Technical architecture
This prototype follows the build-ready pack: one deployable with clean module boundaries, coordinated through domain events rather than polling. Asset-light by design — no inventory, no fund-holding; escrow is an external licensed provider integrated via API.
Client / Presentation
Responsive web app (mobile-first) — traveller exchange, supply console, orders & wallet, admin
API surface
Versioned route handlers · live updates for pool size & price
Hero services
Pooling & Matching · Pricing Engine · Bidding / Auction
Application services
Identity & KYC · Trip / Demand · Offer & Order · Reputation · Notifications
Integration
Licensed escrow · KYC/AML · airline/GDS & hotel APIs (later)
Data
Transactional store · demand-data lake (aggregated, PDPL-gated) · event log
The event-driven core (§2.2). Post a trip, join a pool or settle an order and watch the domain events land here.
No events yet — interact with the exchange to generate some.
src/lib/pricing.tsPricing Engine — descending curve, floor-boundedsrc/lib/store.tsTrip, Pooling, Bidding, Offer/Order, Escrow, Reviewssrc/lib/events.tsEvent bus + append-only audit logsrc/lib/types.tsData model (§4) — entities & relationshipssrc/app/api/**Versioned API surface — the only data surface the UI touchesThe store is an in-memory stand-in for the Postgres transactional store + outbox. Because the UI only touches the API, that swap is isolated.