Case Study: VapeFinder.com.au — Supplier Discovery Platform
Source Repository: github.com/joshjames/vapefinder ⚠️ REGULATORY POST-MORTEM NOTE:
Following its engineering lifecycle, the VapeFinder platform was formally decommissioned and closed down due to sweeping legislative updates and federal regulatory structural changes governing the sale and commercial distribution of alternative nicotine delivery systems within Australia. This archive serves strictly as a technical layout showcase of mobile-first discovery patterns, fuzzy location routing, and Next.js App Router service separation.
System Overview: VapeFinder was engineered as a high-performance, mobile-first marketplace locator designed to securely and efficiently bridge the gap between consumers and local wholesale/retail suppliers throughout Australia using low-compute spatial clustering.
Platform Layer & Service Dependency Architecture
The system relies on a clean decoupling of Next.js Route Handlers (API Layer) and abstract, state-free logic controllers (Service Layer). Database interactions pass explicitly through strict TypeScript data schemas.
graph TB
subgraph Client["📱 Client Tier (Mobile-First Web)"]
ui["Next.js App Router UI"]
gmaps["Google Maps API Integration"]
geo["HTML5 Geolocation API"]
end
subgraph API["⚡ API Gateway & Route Handlers"]
routeAuth["/api/auth/* (Session Management)"]
routeSup["/api/suppliers/* (CRUD / Geo-Query)"]
routeProd["/api/products/* (Catalog Management)"]
routeMsg["/api/messages/* (Real-time Routing)"]
routeLead["/api/contacts/* (Lead Tracking Engine)"]
end
subgraph CoreServices["⚙️ Platform Service Layer"]
authService["Auth Utility Engine
JWT & Session Guard"]
mapService["Maps Optimization Service
Fuzzy Radius Generator"]
msgService["Multi-Channel Broker
WhatsApp / Telegram / App Switch"]
leadService["Monetization & Lead Counter"]
end
subgraph Models["📦 Data Access Layer (Entities)"]
userModel["User Model
(ID, Email, PasswordHash, Role)"]
supplierModel["Supplier Model
(ID, Name, GeoPoint, FuzzyRadius, Active)"]
productModel["Product Model
(ID, SupplierID, Name, SKU, InStock)"]
messageModel["Message Model
(ID, SenderID, ReceiverID, Content, Timestamp)"]
leadModel["Lead/Contact Model
(ID, SupplierID, CustomerFingerprint, Meta)"]
end
subgraph Storage["💾 Persistence Layer"]
db[("PostgreSQL Database
(Structured Relations)")]
end
%% Client Interactions
ui --> geo
ui --> gmaps
ui -->|"JSON HTTPS / App Router"| API
%% Route to Service Mapping
routeAuth --> authService
routeSup --> mapService
routeProd --> CoreServices
routeMsg --> msgService
routeLead --> leadService
%% Service to Model Mapping
authService --> userModel
mapService --> supplierModel
msgService --> messageModel
leadService --> leadModel
CoreServices --> productModel
%% Database Persist
userModel --> db
supplierModel --> db
productModel --> db
messageModel --> db
leadModel --> db
%% Custom Styling Match
classDef clientNet stroke:#38bdf8,fill:#0c4a6e,color:#cbd5e1;
classDef apiNet stroke:#e879f9,fill:#581c87,color:#cbd5e1;
classDef serviceNet stroke:#2dd4bf,fill:#115e59,color:#cbd5e1;
classDef modelNet stroke:#a78bfa,fill:#2e1065,color:#cbd5e1;
classDef storageNet stroke:#fb923c,fill:#431407,color:#cbd5e1;
class Client clientNet;
class API apiNet;
class CoreServices serviceNet;
class Models modelNet;
class Storage storageNet;
Technical Breakdown & Specifications
1. Privacy-First Location Obfuscation
- Instead of streaming absolute vector coordinates (Latitude/Longitude) of suppliers to client devices, the
Maps Optimization Service automatically calculates a moving fuzzy perimeter (~500m to 1km radius offset). - This allows accurate localized consumer map rendering via the Google Maps API while entirely mitigating the scrapability of a supplier's precise operations footprint.
2. Asynchronous Multi-Channel Brokerage
- The messaging system routes inquiries either internally using stateful tables or externally via protocol hooks (Deep linking seamlessly into Telegram and WhatsApp instances).
- Every intent-to-contact event transitions through a tracking abstraction layer, allowing real-time recording of transactional lead metrics to validate monetization velocity without disrupting customer conversion funnels.
3. Clean Directory Allocation
vapefinder/
├── src/
│ ├── app/ # Next.js App Router pages
│ │ ├── (marketing)/ # Public marketing funnels
│ │ ├── (auth)/ # NextAuth / Crypto Token Guards
│ │ ├── (customer)/ # Geolocation & Mapping Views
│ │ └── (supplier)/ # Inventory & Product Matrix Management
│ ├── components/ # Atomic UI Elements
│ └── lib/ # Core Infrastructure Engines (db, maps)