vault

DAX Chain — PRD Vault

docs/README.mdtype: indexupdated: 2026-08-09

DAX Chain — Product Requirements Vault

Obsidian-friendly vault. Open this folder in Obsidian and follow the wikilinks to navigate. Every page renders as plain markdown elsewhere.

Published as HTML

This vault is rendered at prd.<domain> — a public, unauthenticated site built from docs/ at deploy time (app/prd, lib/prd). Wikilinks, GFM tables and Obsidian callouts all render. Anything committed here is world-readable once deployed.

This PRD is written from the PM seat at a crypto startup. Treat it as a working document — open questions are tracked per page and consolidated in 09-Open Questions.

Start here

New to the vault? Read in this order — about 20 minutes:

  1. 01-Overview — what we're building and for whom
  2. 03-Domains — every product surface and whether it's live
  3. 02-Architecture — how the shipped system fits together
  4. 08-Risks and Drawbacks — what's fragile, and why

Looking for something specific?

If you want to… Go to
Integrate against the API reference/payouts, reference/api-checkout
Understand a single feature end to end User stories
Know what's decided vs still open 09-Open Questions
See what ships next 10-Roadmap
Look up a term Glossary

Map of content

Current state (what's shipped)

Target state (AWS refactor brief)

  • 11-Target-Architecture — AWS topology: Route 53 + CloudFront + AWS WAF + Shield → API GW → ALB → app/worker containers on EC2, CoSigner, TRES; admin via IAM Identity Center
  • 12-Environments — Dev / Test / Prod three-environment model with HA + DR profiles
  • 13-Network-Model — public/private subnets, security groups (SG-ALB / SG-APP / SG-WORKER / SG-COSIGNER / SG-DB)
  • 14-Operations — runbook index, privileged actions, DORA / MiCA framing, CI/CD posture, dependency matrix

Reference

User stories

  • Stories index — invoicing, QR receive, send, admin fees, Mercuryo, merchant API/QR payments

Status legend

Marker Meaning
🟢 Live Implemented and exercised in dev
🟡 Beta Implemented but provider mocked or not yet released to prod
🔴 Spec Designed, not yet built
⚠️ Risk Known weakness — see 08-Risks and Drawbacks
❓ Open Decision required — see 09-Open Questions

Snapshot

Verified against master on 2026-08-09.

  • 43 migrations applied — 0000_baseline through 0042_payee_wallet_whitelist (lib/db/migrations).
  • Drizzle schema is a directory (lib/db/schema/*.ts), not a single file.
  • 4 of 9 providers have live implementations: Fireblocks (LiveFireblocks), rate oracle (CexioOracle), KYC (SumsubService), email (Resend). Still mock-only: chain, acquirer, risk, Elliptic, TRES — those throw on live.
  • Background work runs on pg-boss (worker/worker.ts, 11 queues) — payout execution, webhook delivery, mail, order expiry, deposit reconciliation and Fireblocks polling are all off the request lifecycle.
  • Public REST: /api/v1/payments/*, /api/v1/payouts/*, /api/v1/rates, /api/v1/wallets.
  • Inbound webhooks: /api/webhooks/fireblocks, /api/webhooks/kyc, /api/webhooks/mercuryo.
  • Web surfaces: /my/* (wallet, send, receive, buy, sell, convert, payees, invoices, payouts, orders, notifications, api-keys, profile, history, help), /api-orders, /api-payouts, /admin/*, /pay/*, /docs, /prd (this vault, rendered), plus the in-progress /v2/* UI rewrite.
  • No cache tier and no message broker. Postgres is the only datastore: durable background work runs on pg-boss, and rate-limit windows live in the rate_limits table.

Elliptic (AML + sanctions), the card acquirer, the chain provider and TRES are still mocked. Fireblocks, KYC, email and the rate oracle have live paths. See

05-External Providers and 08-Risks and Drawbacks#Provider readiness.

Route prefixes moved. Authenticated retail surfaces live under

/my/* (not /wallet, /send, …), and the (user) / (merchant) / (marketing) route groups no longer exist — see 02-Architecture#Layering.