Discover
Build feeds and search sessions from eligible listing projections with deterministic fallback and stable pagination.
Women’s fashion marketplace
A pre-launch marketplace in active development, built around canonical product data, personalized discovery, seller-controlled listings, and server-authoritative checkout and order state.
01 / Product overview
Buyer and seller experiences are connected by canonical commerce records—not by cached views or provider responses.
Build feeds and search sessions from eligible listing projections with deterministic fallback and stable pagination.
Create seller-owned items and listings, validate publication requirements, and emit durable change events.
Reserve inventory, calculate authoritative quotes, orchestrate payment, and finalize immutable order records.
02 / Engineering architecture
Next.js clients call a domain-oriented NestJS API. PostgreSQL owns listings, availability, reservations, quotes, orders, and financial records; no search index, cache, browser state, or payment response can redefine that truth.
Transactional outbox workers project listing changes into discovery and run other asynchronous consumers. Stripe calls stay outside database transactions and return trusted evidence for idempotent finalization.
Request path and canonical write boundary
Interface layer
Discovery, listing management, checkout, and order experiences
Synchronous runtime
Authorization, domain rules, provider orchestration, and authoritative totals
Canonical foundation
Items, listings, reservations, quotes, orders, financial records, and outbox facts
Asynchronous and provider boundaries
Separate worker runtime
Lease, retry, and project durable listing events without blocking browser requests
Rebuildable read side
Search, ranking inputs, and personalized feeds derived from eligible canonical listings
External boundary
Idempotent payment requests outside transactions; trusted evidence returns for order finalization
Non-canonical support: Redis-backed controls can be lost or rebuilt without changing product, inventory, payment, or order truth.
03 / Engineering highlights
The implementation favors explicit ownership, durable events, and reversible projections over coupling product truth to a provider or cache.
Checkout locks items in deterministic order, persists a reservation and server-owned quote, calls Stripe outside the transaction, then revalidates trusted payment evidence before atomically creating order truth.
Resolved intent and ordered results are snapshotted so cursor pages do not silently reparse or reorder a query.
Transactional outbox events and version checks prevent delayed asynchronous work from overwriting newer listing state.
Owned Item and Listing records must satisfy eligibility, price, size, condition, and ready-media rules before publication.
Optional provider-bounded enrichment can improve retrieval, but core search remains useful when remote AI is disabled or unavailable.
04 / Technical challenges