Transfer Pro is a premium transfer commerce platform with two connected surfaces:
- Public website: acquisition, route SEO, fleet merchandising, fixed-price booking, quote intake, and account onboarding.
- Operations workspace: admin, driver, and customer views for booking management, pricing, assignment, payment state, invoice visibility, and communication.
The product is intentionally original in branding and interface direction. It uses a marketplace-style homepage, city-night gradients, tabbed journey discovery, offer-led merchandising, and a calm operations shell rather than a generic SaaS dashboard.
- Direct customer bookings for fixed-price routes
- Quote-based ride intake for bespoke journeys
- Admin control over routes, route mode, pricing, and fleet
- Customer account creation and sign-in
- Driver-visible trip board
- Driver assignment data model
- Payment integration hooks with Stripe
- Vehicle listings and booking merchandising
- Booking, quote, invoice, and notification records
- SEO-ready marketing pages and destination templates
Next.js App Routeris the application shell.- Server components render most pages to keep the public site fast and reduce client bundle size.
- Client components are limited to interactive forms and account actions.
- Server actions handle auth, booking creation, and quote submission from forms.
- Route handlers expose pricing and signed provider callbacks. Checkout creation is server-action-only so clients cannot submit prices.
InsForgeis the primary persistence layer and backend control plane.lib/repository.tsisolates read and write logic so the UI can remain agnostic to whether the app is in demo-data mode or InsForge-backed mode.- Demo mode keeps local development explorable before infrastructure is provisioned; it is never the production data path.
- This workspace is linked to an InsForge backend project. Ordered SQL migrations under
insforge/migrations/are used for live changes. @insforge/sdkis used only from the Next.js server runtime withINSFORGE_API_KEY. Database RLS blocks public roles on every application table.
- JWT cookie auth is implemented with
jose, a mandatory production secret, HTTP-only cookies, and database-backed session-version checks. - Accounts support three roles:
ADMIN,DRIVER,CUSTOMER. requireSession()gates dashboard access server-side.- Password changes, resets, role changes, account anonymization, and secret rotation revoke existing sessions.
lib/payments.tscreates Stripe Checkout sessions from stored server-side booking totals./api/webhooks/striperequires Stripe signatures and metadata, validates amount/currency, and deduplicates event IDs.lib/notifications.tsis the abstraction point for email, SMS, or WhatsApp fan-out.
Main transfer models:
User: role, identity, contact, password hashCustomerProfile: billing and preference metadataDriverProfile: operational metadata and availability baseVehicle: class, capacity, merchandising summary, featuresRoute: origin, destination, distance, duration, pricing mode, SEO copyRoutePrice: per-route, per-vehicle price matrixRideQuote: bespoke request queue with optional offerBooking: fixed-price or accepted-quote ride recordBookingStop: multi-stop expansion pointInvoice: issued and paid booking paperworkPaymentTransaction: gateway transaction recordNotification: outbound communication logAuditLog: operator change trail
This schema is designed so pricing, assignment, invoice history, and notification state can all be audited later without overloading the main booking record.
/- Marketplace hero with airport, city, intercity, and hourly tabs
- Offer-led conversion modules
- Location collections with tabbed browsing
- Fleet positioning and traveler proof
- Trust CTA into fixed-price booking or quote flow
/routes- Indexed route catalog
- Clear distinction between fixed and quote journeys
/fleet- Vehicle listings designed around use cases, not raw spec sheets
/book- Fast fixed-price booking form
- Route and vehicle preview rail
/quotes- Bespoke journey intake for complex rides
/how-it-works- Workflow explanation for trust and SEO support
/destinations/[slug]- Reusable SEO landing page template for route clusters or local service pages
/sign-inand/sign-up- Account entry and retention layer
/dashboard- Role-aware overview
- Summary strip
- Live bookings and quote queue
/dashboard/bookings- Booking management table
/dashboard/quotes- Quote review table
/dashboard/routes- Admin route and price matrix
/dashboard/fleet- Admin fleet management surface
/dashboard/drivers- Driver assignment overview
/dashboard/customers- Customer account visibility
/dashboard/invoices- Invoice ledger
- Customer lands on route or homepage.
- Customer opens
/book, selects a known route and vehicle. - Form submits through a server action.
- Repository creates or reuses a customer record.
- Booking record is created with a signed server-verified fare, passenger details, and pickup metadata.
- Stripe Checkout URL is generated server-side from the stored booking total when payment credentials exist.
- Notification abstraction queues booking confirmation messages.
- Booking appears in admin and driver dashboards.
- Customer opens
/quotes. - Customer describes route, schedule, passengers, and preferred vehicle.
- Quote request enters the queue with
PENDINGstatus. - Admin reviews and prices the ride.
- Accepted quote can be converted into a booking record.
- Admin reviews upcoming bookings.
- Driver and vehicle capacity are checked.
- Assignment is recorded against the booking.
- Notification fan-out informs customer and driver.
- Invoice and payment status remain visible in the booking lifecycle.
- User signs up or is created implicitly when booking in database-backed mode.
- Customer returns to the dashboard to view bookings, quotes, and invoices.
- The account becomes the retention anchor for repeat transfers and future automation.
- Single Next.js application for public site and internal workspace
- InsForge schema and seed SQL under
insforge/ - Prisma schema snapshot under
prisma/for domain reference - Shared domain, auth, payments, and repository logic under
lib/ - Route handlers under
app/api/ - Component slices separated into
marketing,booking,dashboard,auth, andui
This structure keeps the application deployable as a single web service while still allowing future extraction of workers, background jobs, or provider-specific adapters.
- Public pages default to server rendering for faster first paint and better crawlability.
- Interactive logic is isolated to forms and dashboard actions to keep bundle size contained.
- Repository abstraction allows database reads and writes to be optimized without rewriting the UI.
- Route handler boundaries make it straightforward to expose selected capabilities to native apps, partner portals, or external dispatch systems later.
- Notifications, payments, and invoicing are intentionally separated from page components so they can move to async jobs when volume grows.
- Move provider delivery and retry handling into background jobs
- Convert invoice records into downloadable PDF artifacts
- Add driver mobile actions for trip status updates and navigation launch
- Add route-specific rich content and FAQ blocks for local SEO scale
- Add consent-aware analytics, experimentation, and conversion-event tracking