Vista SysTech Limited
All case studies
Marketplace

Scott Point

A reverse marketplace where shoppers request the product they want and retailers compete with live, automatically price-dropping offers — on web and mobile.

Scott Point, Australia 5 min read

3

apps on one API

NestJSGraphQLReact Native

The Challenge

Traditional online shopping puts the buyer at a disadvantage: they browse fixed listings and take whatever price a retailer sets. Scott Point set out to flip that dynamic — to build a marketplace where the buyer names the product they want, and retailers compete to sell it to them at the best price.

Making that work well is hard:

  • The buyer must describe exactly what they want — which means a large, accurate, structured product catalogue (categories, brands, specifications, images), not free text.
  • Retailers need a fair, fast way to compete — including the ability to keep improving their offer automatically without watching every request.
  • The whole negotiation is time-sensitive — offers and counter-offers run on timers and need real-time delivery to phones.
  • Payments, delivery, and trust — accepted offers must convert cleanly into paid, shippable orders with saved cards and refunds.
  • Two very different audiences — casual shoppers on mobile and business retailers managing offers at a desk.

The Solution

Scott Point is a custom-built, multi-surface marketplace. Shoppers use a React Native mobile app to request a specific product; retailers use a Next.js web portal to receive those requests in their chosen categories and compete with offers — manually or through an automated bidding strategy that drops the price toward a floor they set. A NestJS + GraphQL backend powers both, backed by a structured product catalogue enriched from the global Icecat database, Stripe payments, and Firebase push notifications that keep the negotiation live.


Feature Highlights

1. Request-and-Offer Marketplace (core)

The heart of the platform reverses the usual flow. A shopper creates an offer request for a specific product — with an initial target price, delivery preference, and a time window — and retailers respond with competing offers. Buyers and retailers can counter each other, offers run on configurable timers (full day, half day, or quarter day), and the best accepted offer becomes an order.

2. Automated Bidding Engine

Retailers don't have to babysit every request. They can configure an automated bidding strategy — a starting price, a lowest acceptable price, and a step-down amount — and the system competes on their behalf, dropping their offer incrementally toward their floor to win the sale. This turns price competition into a set-and-forget advantage.

3. Rich Product Catalogue (Icecat-powered)

Buyers request real, precisely specified products because the catalogue is built on Icecat, a global product-content database. Products carry structured categories, manufacturers/brands, technical specifications, feature groups, EAN barcodes, descriptions, bullet points, and multiple images — imported and synced from Icecat's XML feeds, with support for manually added products alongside. Full-text search helps shoppers find exactly the item they want.

4. Retailer Onboarding & Category Subscriptions

Retailers complete a guided, multi-step registration — verification, personal details, business details (ABN), category selection, and payment — and subscribe (via Stripe) to the product categories they sell in. That subscription model means each retailer only receives the offer requests relevant to their business, and the platform earns recurring revenue.

5. Orders, Payments & Refunds

Accepted offers convert into orders with a clear lifecycle — in progress, shipped, delivered, completed, cancelled, or refunded. Payments run through Stripe with saved cards for fast checkout, and refunds are handled and recorded against the order. Delivery options include retailer-managed shipping or pickup.

6. Customer Mobile App (iOS & Android)

A React Native app is the shopper's home: browse categories and products, create offer requests, track "my offers" and incoming retailer bids in real time, manage addresses and payment, place orders, and follow shipping — with Firebase push notifications delivering new offers and status changes instantly.

7. Retailer & Admin Web Portal

A Next.js portal serves retailers and administrators: retailers see available offers, manage their own offers, handle orders, business details, category subscriptions, and settings; administrators manage the catalogue (categories, manufacturers, banners), run product imports and exports, and oversee the platform. A shared dashboard surfaces activity and metrics.

8. Addresses & Australian Localisation

Address entry is streamlined with an AddressFinder integration and geocoordinates, and the platform is built around Australian business context — ABN capture for retailers, and country/state handling for delivery and tax.

9. Security & Account Protection

Authentication uses JWT with refresh-token sessions (tracked per device with FCM tokens), OTP verification on signup, and account lockout that counts failed login, password-reset, and email-change attempts per IP to block brute-force attacks — hardened further with Helmet, rate limiting, and bcrypt password hashing.

10. Notifications, Catalogue Ops & Audit

Multi-channel messaging via Firebase push and email keeps both sides informed. Administrators run bulk product imports from Icecat feeds and Excel exports, manage promotional banners, and every significant change is recorded in an event log for a full audit trail. Images are processed and served from AWS S3.


Technical Architecture

LayerTechnology
BackendNestJS (TypeScript), GraphQL (Apollo Server), REST + Swagger
DataPrisma ORM over PostgreSQL (full-text search) · Redis caching
Web portalNext.js (React, TypeScript), Cypress end-to-end tests
Mobile appReact Native (iOS + Android), Apollo GraphQL client, Firebase Cloud Messaging
PaymentsStripe (cards, saved cards, subscriptions, refunds)
CatalogueIcecat product-content integration (XML feed import)
Storage & mediaAWS S3, Sharp image processing
Auth & securityJWT + refresh sessions, OTP, account lockout, Helmet, rate limiting
Delivery & opsDocker, Redis, Winston logging

The backend is organised into clean domain modules — auth, users, customers, products, category, manufacturer, make-offer, order, address, settings, and more — exposing a single GraphQL API that serves both the mobile app and the web portal from one source of truth.

Outcomes

  • A genuinely different way to shop — buyers set the terms and retailers compete, inverting the usual fixed-price model into a live, request-driven marketplace
  • Competition on autopilot — automated bidding lets retailers win sales without manual effort, keeping the marketplace liquid and prices sharp
  • Catalogue depth from day one — Icecat integration gives shoppers a large, precisely specified product catalogue instead of free-text guesswork
  • One backend, three experiences — a mobile shopper app, a retailer/admin portal, and a GraphQL API all run on a single, modern, type-safe codebase
  • Built to scale and to trust — subscription-based retailer revenue, Stripe payments with refunds, and serious account-security hardening make it production-ready

What's Next

  • Real-time offer streaming (subscriptions/websockets) to complement push notifications
  • Expanded retailer analytics on win rates and pricing performance

Designed, built, and maintained by Vista SysTech — full-stack architecture, backend, web portal, React Native app, integrations, and ongoing support.