Appearance
Build phases (M1–M8)
Suggested sequencing for the Dropout Capital team.
Done-when
| Phase | Deliverable | Done when |
|---|---|---|
| M1 — Foundation | Supabase project, enums, accounts/journals/ledger_entries + merchants/rails registries + RLS, account CRUD, posting function with double-entry validation | A merchant + rail exist; a PAYMENT posts and balances move atomically; an imbalanced posting is rejected |
| M2 — Fees | fee_rules + matching SQL + all fee formulas; finances_config + module flags | Correct fees for PAYMENT/REFUND/DISPUTE/VOID/WITHDRAWAL/TOPUP, matching Tonder fixtures |
| M3 — Ingestion | Listener adapters (Tonder + Menta), transaction_events/pgmq, orchestrator worker, idempotency, correlation IDs, transactions attempt store, webhooks/webhook_deliveries + Webhook Manager | A rail notification → posted journals + a transactions row + outbound webhook delivered; idempotent under redelivery |
| M4 — Settlements + Transfers | approve/confirm, journal tagging, settlements SOR + calculateForceDecrease, settlement query API, internal transfers, prior-period load | Settlement records persist with correct force_decrease; produces correct OUT + per-acquirer IN journals; transfers audited |
| M5 — Scheduled | pg_cron rolling reserve + daily ledger; XLSX → Storage; snapshots | Reserves release on schedule; daily statements generated per timezone |
| M5b — Settlement reports (FinOps) | Cycle engine (T+0/T+1/T+2), settlement_merchant_config + settlement_runs, per-merchant statement → settlement trigger → Storage + email | A scheduled cycle settles each active merchant, files the statement, and emails FinOps — automated from day 1 |
| M6 — Merchant frontend | Dashboard pages (Home / Acceptance & Conversion / Deposit Analytics / Fraud & Risk) with the metric catalog from transactions + journals; Realtime; RLS scoping | Merchant sees only their entity, live; acceptance/APM/dedup rules match Tonder fixtures |
| M6b — Hosted Checkout | Payer-facing checkout embedding Tonder Lite SDK v2.0 + Skyflow elements; checkout_config branding; APM + 3DS states; correlation-id threading (gated on the Lite SDK v2.0 contract) | A branded checkout takes a card/APM payment end-to-end, no PAN in Vecnet, attempt lands in transactions |
| M7 — Vecnet admin operator platform | Admin Panel + System Control Panel: all 11 modules | Vecnet personnel configure merchants/rails/fees/webhooks and run the full ops loop; every mutation is audited |
| M8 — Reconciliation + hardening | cross-rail recon, DLQ handling, bulk reprocess, observability | Correlation gaps surfaced; bulk historical load works |
Several phases are gated by open items — notably M6b (Lite SDK v2.0 contract) and the M3 Listener adapters (Tonder + Menta API contracts).