01 · Status board
| Area | State | Evidence / pointer |
|---|---|---|
| Payments (Stripe) | LIVE + PROVEN | P1 GREEN, B7 battery complete — COMPLETION_TRACKER.md; live 409-gate + stripe_live checkout re-proven 2026-07-06. See the Stripe runbook. |
| Buyer product (Market/Leads/Territories/Pipeline/Billing/Settings) | LIVE | F4/Q adversarial QA green; 2026-07-06 API battery below; bundle assets/index-CXgZFR3a.js. |
| Admin/supply (refunds, intake, pricing, funnel) | LIVE | A1–A3 + C2 live-proven; authz re-verified 2026-07-06 (401/403 correct). |
| Mobile buyer shell | LIVE 07-07 | Deployed + live-proven: 375px zero-overflow on all five buyer pages, chrome 132.5px, drawer navigates+closes. Shots: artifacts/soldi-completion-2026-07/shots/live-*-20260707.png. |
| Realtime Wave 3 (DO, live echoes, chat) | LIVE 07-07 | DO migration v1 applied; wss:…/rt/floor 101 + hello history; LIVE ticker + Room presence proven in browser. (Plain GET 404s by design — WS-only routing.) |
| Sequences send engine | IN FLIGHT | Codex gpt-5.4 lane building docs/content/SPEC_SEQUENCES.md plan on feat/sequences-send-engine (2026-07-07); PR pending, merge/deploy gated. |
| Comps live provider | IN FLIGHT | Codex gpt-5.4 lane building docs/content/SPEC_COMPS.md plan on feat/comps-live-provider (mock stays default until ATTOM/Anthropic keys exist); PR pending, merge/deploy gated. |
| Seller payouts / Connect | SPEC-ONLY | Gated on Decision #0 (docs/content/prd/SUPPLY_SIDE.md §3). No money-out rails exist. |
| Docs truth | FIXED 07-06 | SHARE_WITH_ZAK payments bullet + realtime drift, ROADMAP stale Stripe lines, TESTING_PLAN proof gaps, implementation-notes index corrected; Clerk + /auth/me ADRs in DECISIONS.md; beta spec added (BETA_READINESS.md); Zak Text 2 drafted (gated). |
| Growth PRDs (Consent Mode v2, offline conversions) | BACKLOG | Specced, not MVP blockers — docs/content/prd/. |
02 · Payments decision (settled)
Stay Stripe; Clerk Billing rejected. Confirmed by Cam 2026-07-06; research and owner agree independently. ADR: docs/content/DECISIONS.md.
| Rail | Fee (US card) | Fits Soldi's wallet? |
|---|---|---|
| Stripe | 2.9% + $0.30 | Yes — amount-only Checkout live today; Connect covers future payouts |
| Clerk Billing | 2.9% + $0.30 + 0.7% (Stripe still required underneath) | No — Plan-ID subscriptions only, no escrow/payout primitives, would entangle live PBKDF2 auth |
Reversal only if Clerk ships a real wallet/payments product (none as of 2026-07). Everything operational — integration map, curl probes, webhook idempotency, test cards, Connect roadmap — lives in the Stripe payments runbook.
03 · Open Cam decisions
Each with exact next action + what it unblocks. Full options/implications/recommendations and safe defaults-if-undecided: docs/plans/mvp-build-public-release/BETA_READINESS.md §5.
Next action: delete the pre-PR#123 duplicate for demo@soldi.cc (keep cus_UouKZd8WGskgex; steps: runbook §05) or accept as documented artifact. Unblocks: tracker terminal state + Zak "Text 2". Safe default: accept-as-documented (test mode, zero money risk). Minutes.
Cam directed the finish after Zak flagged app.soldi.cc stale; shell + Wave 3 deployed together (worker 9c8b6452), battery + live 375px + realtime proofs green. B6–B12 MET in BETA_READINESS.md.
Next action: ratify staying in test mode for the beta (testers fund wallets with test cards, no real money) vs flipping live keys. Recommendation: stay test mode. Unblocks: honest tester onboarding wording.
Lead marketplace vs principal/committed-offer (docs/content/prd/SUPPLY_SIDE.md §3). Gates payouts/Connect and seller status promises — not a beta blocker; the documented default (pure-marketplace semantics, no seller promises) holds until decided.
admin@soldi.cc rotationNext action: rotate the password before beta invites go out (minutes), or disable. Long-lived proof credentials shouldn't survive the beta week.
04 · Mobile buyer shell (this session's build)
The last open MVP code gap (open-decisions "Mobile buyer shell"; scoped as a drawer in platform-completion session 20260703-5ff01a1-shell2) is now implemented on main:
- New
app/src/layouts/MobileNav.tsx— at ≤640px a compact current-section button opens a grouped drawer (Market / My Leads / Account / Admin); the disabled Floor pill moves inside the menu, out of first paint. Nav link lists are shared with TopNav so the rails can't drift. - TopNav — phone chrome is a single 52px row (brand | section | account); tablet 641–920px keeps the segmented rail; desktop unchanged.
- ScoreboardBar — the ≤640px wrap-to-rows block becomes one thin scrollable status line (kill-switch first, referral promo last): ~40px vs ~129px.
- Net: first-viewport chrome at 375px drops from ~264px to ~130px (nav 52 + scoreboard ~40 + ticker 38); the Territories table lands in the first viewport (~518px vs 648px live today).
Proof: sandbox linux verify green — typecheck + 30 files / 245 tests (5 new MobileNav tests) + build (assets/index-CFrs7sov.js); in-repo tsc -b green. Done (2026-07-07): deployed with Realtime Wave 3, live 375px re-proof green on all five buyer pages, drawer interaction verified on production, deck refreshed. Full evidence trail: docs/plans/mvp-build-public-release/BETA_READINESS.md §1 (B6–B12).
05 · Live QA battery — 2026-07-06
Non-destructive curl battery against production, demo account. All 21 probes passed; zero 5xx; responses 0.1–0.3s. Highlights:
| Check | Result |
|---|---|
| Health + bundle | /api/v1/health ok; root serves assets/index-CXgZFR3a.js (matches last green build — no drift) |
| Auth | Demo login 200; wrong password 401; /auth/me round-trips |
| Market / dossier | 3 demo-inventory rows; dossier contact fields populated (filtering is client-side by design) |
| Territories persistence | Standing-order bid 17500→18000→17500 round-trip verified, state restored |
| Pipeline / portfolio | 24 leads across stages (new 15, contacted 1, offer 4, assigned 2, dead 2); KPIs render |
| Billing gate | Wallet $117, held $0; deposit → 409 stripe_checkout_required; /wallet/checkout → stripe_live URL (not visited) |
| Authz | Admin endpoints: 403 as demo, 401 unauthenticated; protected APIs 401 unauthenticated |
| Realtime | /api/v1/rt/floor 404 — expected (Wave 3 not deployed) |
Informational notes (no fixes needed): unauthenticated /auth/me returns 200 {"user":null} rather than 401 (deliberate SPA bootstrap pattern — ADR recorded 2026-07-06 in docs/content/DECISIONS.md); Market filters are client-side; /user/preferences is PATCH-only.
06 · Remaining engineering
Enroll → schedule → cron dispatch (email via the Resend REST API — note: @velli/email-relay is not a repo dependency) → engagement status; triggers off pipeline stage events. Implementation-ready plan (build order, claim-before-send idempotency, rate caps, kill switch, test plan): docs/content/SPEC_SEQUENCES.md §Implementation plan. Schema (migration 0007) + read routes exist; the page stays hidden until the engine works. Needs RESEND_API_KEY as a worker secret (exists in repo .env only).
ATTOM + Anthropic behind a provider seam over app/worker/comps.ts; cost/latency tracked in D1; fallback-to-mock on any external failure. Implementation-ready plan + test plan: docs/content/SPEC_COMPS.md §Implementation plan. Human prerequisite: procure ATTOM_API_KEY + ANTHROPIC_API_KEY — neither exists anywhere today.
Both are post-beta acceptable: Comps works today on the mock provider and Sequences is hidden. Neither blocks beta testers.
07 · Environment & deploy quirks (read before touching)
- Host-mounted repo, mac node_modules: never run installs in
/workspace/soldi; itsnode_modulesbelong to the macOS host. Tests/build fail in-repo (native esbuild/rollup/workerd mismatch) — typecheck is the only in-repo gate. - Sandbox-copy verify recipe: copy the repo (minus
node_modules/.git) to scratch,bun installthere,bun run verifythere; port patches back and re-runtsc -bin-repo. - Never
bun installinsites/fhc-pages(dirties rootbun.lock; restore withgit checkout -- bun.lock). - Live probes: always
curl -sL(trailing-slash 307s). Demo:demo@soldi.cc/soldidemo;?demo=1auto-login. - Deploys: repo root only (
bun run deploy:<surface>, shared.envCF token); app deploy needs explicit owner approval and next one applies the Wave 3 DO migration.fhcdeploy exit-1 can be benign — verify the upload log.
08 · This week, in order
- Cam: P2 duplicate-Customer decision (minutes; runbook §05) → mark P2 GREEN or PARKED_ACCEPTED.
- Mac session: 375px screenshot proof of the new mobile shell → owner-approved
deploy:app(brings mobile shell + Realtime Wave 3 live together) → post-deploy battery + live 375px re-proof → deck/walkthrough refresh. Full runbook:BETA_READINESS.md§2. - Cam: rotate
admin@soldi.ccpassword before invites; ratify test-mode-for-beta. - Cam: send Zak "Text 2" (drafted, marked DO-NOT-SEND, in
SHARE_WITH_ZAK.md) once 1–2 are done; invite beta testers with the onboarding brief (BETA_READINESS.md§4). - Cam: Decision #0 seller business model → unlocks payout/Connect spec work (not a beta blocker).
- Eng (post-beta): Sequences engine, then Comps live provider — both specs now implementation-ready (§06).