What you get in the generated ZIP
A typical e-commerce generation includes:
app/blueprints/
├── product_bp.py # variants, options, inventory
├── inventory_bp.py # stock movements, reservations, reorder thresholds
├── cart_bp.py # session-bound, expires, atomic add-to-cart
├── checkout_bp.py # multi-step state machine
├── order_bp.py # state: pending → confirmed → fulfilled → shipped → delivered → returned
├── payment_bp.py
├── shipping_bp.py # 3PL adapter (interface, plug your own)
├── tax_bp.py # per-jurisdiction with destination-based calculation
├── refund_bp.py # with restock policy
└── webhook_bp.py # payment + shipping + 3PL webhooks
frontend/(store)/
├── browse/ # product list with faceted search
├── product/[slug]/ # PDP with variant selector
├── cart/ # cart with optimistic updates
└── checkout/ # multi-step with form persistence
What's already wired
- Inventory under concurrency: stock decrements use
SELECT FOR UPDATEto prevent overselling. Cart reservations with TTL — abandoned carts release stock back automatically. - Partial fulfilment: orders can ship in multiple shipments. Each shipment has its own tracking and status. Order isn't "shipped" until all shipments are.
- Refund-with-restock: refunds optionally restock the inventory; the policy is per-product (digital goods don't restock, perishables don't, generic goods do).
- Dropshipping vs warehoused: products tagged with their fulfilment model. Generation produces separate handlers for each.
- Tax: destination-based by default, with origin-based override per jurisdiction (US states with origin-based rules are configured). Tax-exempt customer flag honored.
- Multi-currency: amounts in minor units, currency locked at order placement, conversions logged with rate and source.
- Cart abandonment: Celery Beat task at configurable cadence sends recovery email via your email provider with a one-click cart-restore link.
What ships in docs/
docs/decisions/ADR-0011-inventory-concurrency.md— explains theSELECT FOR UPDATEchoice over optimistic locking, with rejected alternativesdocs/decisions/ADR-0014-payment-provider.md— Stripe vs Paystack vs Flutterwave selection logic, defaults to your wizard choicedocs/diagrams/order-state-machine.md— Mermaid state diagram of the order lifecycledocs/compliance/pci-scope-statement.md— usually SAQ-A (tokenized via provider)docs/cost/tco.md— payment-provider fees, hosting, observability per estimated MAU
Internal links
- Stripe integration, Paystack integration, Flutterwave integration
- Marketplace use case for multi-vendor variants
CTA
Try it — free plan, no credit card. archiet.com.
Generate an e-commerce platform, run a concurrent purchase test, decide if the inventory handling matches what you'd write yourself.