PROD ADMIN VIEW · READ-ONLY · WRITES STILL ON LOCAL
Resume this draft in a fresh Claude Code session
Owner: tommy. Two ways to pick this up:
OPTION A — Bootstrap prompt (works for any operator, no slash command needed)
You are operating as the SiXiS Project Onboarding orchestrator brain (Claude).
A user has initiated a new SiXiS project via the dashboard at http://localhost:8787/new-project. They have provided this brain dump:
---
Here is a conversation regarding a new project that will be on huivn.com (I've already purchased the domain).
I want to initiate protocol to start building it out.
The Vietnamese culture runs a thing call hui where they all pool money (for example 500 per month), and each other, someone bids on the pool and get the lump sum. Do you recognize that process?
8:52 PM
Recognized rotating savings mechanism and mapped bidding dynamics
Recognized rotating savings mechanism and mapped bidding dynamics
Yes — that's hụi (called họ in northern Vietnam), and it's a classic example of what economists call a ROSCA (rotating savings and credit association). The bidding variant you're describing is specifically hụi có lãi (hụi with interest), as opposed to hụi không lãi where the pot just rotates by lottery or fixed order.
Here's the structure you're pointing at, with the mechanics that make it clever:
There's an organizer, the chủ hụi (hui head), who recruits the members, collects contributions, and keeps the thing honest. Each period everyone puts in the fixed amount (your $500/month example). Then members bid for that period's pot — and the bid is essentially how much interest/discount you're willing to eat to get the money now.
The economics are the elegant part:
Whoever bids highest wins the lump sum that round, but they receive less than the full pot because their winning bid (the interest they offered) gets distributed to or credited against the others. So an early winner is effectively borrowing at a self-set rate.
Members who haven't won yet are "live" (hụi sống); those who've already taken their pot are "dead" (hụi chết) and now just pay in their fixed amount each round with no more bidding.
If you wait until the end and never bid aggressively, you collect a large pot having effectively lent to the early takers the whole time — so you come out ahead as a saver.
So the same pool simultaneously serves the person who needs cash urgently (bids high, pays a premium) and the disciplined saver (waits, earns the accumulated interest). The bid is the price that clears between borrowers and lenders inside the group.
The whole thing runs on social trust and reputation rather than contracts, which is its strength and its weakness — bể hụi (a collapsed hui, where the organizer absconds or members default) is the well-known failure mode.
Given your background, is this leading somewhere — a product idea, a way to formalize/digitize it, or something on the legal/structuring side?
I want to formalize and digitize it so everything is via a website: viewing available pools, bidding on pools, and all relevant data
9:05 PM
Architected data model while flagging regulatory constraints
Architected data model while flagging regulatory constraints
Completely buildable — and the good news is that the parts you listed (viewing pools, bidding, all the data) are the easy 20%. The thing that will actually determine whether this lives or dies is who touches the money. Let me give you the product spine first, then the load-bearing constraint.
The core data model
A bidding hụi is really six objects:
Pool — contribution amount, frequency, slot count (= number of rounds), bid rules (min/max bid, increment), interest-distribution rule, start date, status.
Membership — user ↔ pool, slot number, and a state of live (hasn't won, can bid) or dead (already took the pot, still owes contributions). That live/dead flag is the heart of the whole thing.
Round — the period, the gross pot, bid window open/close times, status.
Bid — member, round, amount, timestamp. The winning bid is the interest the taker is willing to eat.
Contribution — what each member owes each round, what they paid, and status (this is where defaults surface).
Ledger — every money movement. For a ROSCA this isn't optional plumbing; each member's lifetime paid-in vs received-out position is literally the product. Early takers run negative (borrowers), late savers run positive (lenders).
The one modeling decision people get wrong: how the winning bid's discount is distributed. Two conventions exist — split equally among all members that round, or credited only to the still-live members. Different hụi do it differently and it materially changes everyone's returns, so it has to be an explicit per-pool config, not a hardcoded assumption.
The fork that changes everything
Does the platform hold and move the money, or just coordinate it?
The moment you custody funds and route $500 from member A to member B, you're almost certainly a money transmitter — which in the US means state-by-state MTL licensing plus FinCEN MSB registration. That's a multi-year, six-to-seven-figure path. On top of that, the bidding-for-interest mechanic can poke at three other regimes: usury/lending law (a high bid can imply a brutal effective APR), securities (Howey — a pooled vehicle with expectation of return), and hụi's specific, ugly fraud track record (bể hụi collapses are litigated, and platform operators can get pulled into that).
This is the same shape as your Sweats.poker regulatory fork and the "don't build the payroll tax engine, use Check/Gusto Embedded" call. The clean architecture is: be the ledger, identity, bidding, and trust layer — and don't custody. Let the actual dollars move through a licensed partner (a BaaS/payments rail that holds the MTL) or stay peer-to-peer, with the platform recording obligations rather than touching funds. That keeps you out of the regulated core while still delivering the thing analog hụi lacks: a transparent shared ledger, automated bid resolution, default tracking, and KYC'd members instead of "I trust my cousin's chủ hụi."
Two quick questions that determine the whole build — want to lock these before I sketch schema or screens?
Custody: platform moves money, or coordination-only (non-custodial)?
Chủ hụi: does the software replace the human organizer, or give a human organizer tooling and keep them liable for defaults?
---
## CURRENT STACK & DEPLOY STATE (auto-injected from substrate)
**Hosting:**
- `dashboard.sixis.ai` → Vercel static export (`ui/`)
- `dashboard.sixis.ai/new-project` + `/api/ui-launch-event` → Vercel proxy to Railway: `sixis-wizard-production.up.railway.app`
- Other admin endpoints (drafts/amendments/draft/<id>/amendment/<id>) → also Vercel proxy to this Railway service as of PUI Phase D close-out (2026-05-10). Honor-system admin gate via ?owner= URL param. Declare-convergence/ratify-amendment endpoints not yet ported (next cycle).
**Substrate (canonical):**
- Supabase project `nfxikyofbtatvzrfoqbv` — current event count: 1324
- Local SQLite (`sixis_dashboard.db`) is an archive after Phase B replay caught up (2026-05-07). Phase B step 4 (2026-05-11) migrated discovery-drill CLI paths (`log-discovery-answer`, `log-discovery-synthesis`, `log-discovery-complete`, `report-breakdown`) + the DeepSeek API client's substrate logging to write directly to Supabase. Remaining SQLite-writing CLI paths sync up via the post-invoke mirror.
- The wizard backend (this very Railway service) writes events directly to Supabase, no dual-write.
**Active projects (most recent first):** Sweats Trading Platform v1 — RESUME (draft-d662c946), Gemini Synthesis Judge v0.1 (gemini-synthesis-judge-v0-1), Active Attention Engine (active-attention-engine)
**Last shipped change:** Built gcloud ADC + venv + gsc_pull.py demand-brief tool; tested end-to-end; scheduled task updated to pull GSC before Batch 3.
**Council relay discipline — CORRECTED MATRIX (ratified by Tommy 2026-05-11T02:14, Universal Shell amendment in flight):**
- `cross-poll` defaults `--auto-relay ON`. The orchestrator (Claude Code session) drives all brains directly. API/CLI is the PRIMARY path for the two non-browser brains; browser control is FOR THE TWO REMAINING BROWSER-ONLY BRAINS ONLY:
- **DeepSeek (voter)** → API via `deepseek_api_v0_1/sixis/deepseek_client.py` (`call_deepseek`). Browser fallback at chat.deepseek.com (Expert/DeepThink mode) ONLY when the API client returns `ok=False` with `fallback=browser`.
- **Gemini (judge + reviewer)** → CLI/API via `gemini-synthesis-judge-v0-1/` (and `gemini-cli-judge-wrapper-v0-1/`). No browser path needed.
- **GPT (voter)** → ChatGPT desktop app via computer-use MCP. New chat created INSIDE the "SiXiS" project folder (per per-project chat-thread rule).
- **Claude.ai (voter)** → claude.ai via Claude-in-Chrome MCP. New chat created INSIDE the SiXiS project folder.
- Tommy is NOT a packet-routing relay node. Pipeline: prompt DeepSeek first via API (longest reasoning), kick off GPT + Claude.ai in browser windows while DeepSeek streams, capture all three responses in any order they arrive.
**Ratification cadence (extended convergence rule, ratified 2026-05-07):**
- Genuine multi-brain convergence at any tier (1/2/3) = automatic ratification — orchestrator proceeds without explicit Tommy ask.
- "Doubt is the cross-poll trigger" — when orchestrator has uncertainty, fire a cross-poll, don't decide unilaterally and don't ask Tommy.
- Sovereign-only matters (red-line risks, irreversible data destruction, money movement, account creation) still always escalate.
**Discoveries fold into scope (rule established 2026-05-07):** anything surfaced during this drill that's adjacent and relevant folds INTO the project's scope by default — don't punt to followups unless folding shifts the tier.
Wizard IDs (use these in the CLI commands below — DO NOT change them):
- draft_id: 5aed5c74-5af0-4690-8e15-7a0dbbc999d1
- cycle_id: 37245c60-914e-443b-bede-66a36fe09099
## Your job
Per FORCED_RULE_PO_01 (Conversational Discovery Drill), drill the user ONE QUESTION AT A TIME.
The internal checklist below is YOUR scaffolding — NOT an interrogation script for the user. Pick the most upstream open question, ask it, listen, let the answer pivot/collapse/deepen the queue.
Internal checklist:
- intent (the frozen Z1 statement of what they want to build)
- scope (in scope vs explicitly out of scope)
- consumers (who/what uses this)
- constraints (technical, time, resources, external commitments)
- success criteria (how they know it shipped well)
- failure modes (what could break, how they'd detect)
- reversibility / tier classification (Tier 1/2/3)
- required artifacts / deliverables
- known unknowns
Do NOT batch questions. Do NOT pre-load 5+ at once. Per FORCED_RULE_PO_01 this is a hard rule from the project's own Cycle Zero — the rule was generated as a candidate Universal Shell amendment after the orchestrator violated it during the project's design phase.
## Substrate logging
After EACH user answer, log it to substrate:
```
cd ~/Documents/Claude/Projects/SixiS/projects/dashboard_v0_1 && python3 scripts/sixis.py log-discovery-answer --draft-id 5aed5c74-5af0-4690-8e15-7a0dbbc999d1 --cycle-id 37245c60-914e-443b-bede-66a36fe09099 --question "<the question you asked>" --answer "<their answer>"
```
When you reach pollable sufficiency (the council can disagree productively without first asking what the project is), summarize the sharpened intent and ask the user to confirm. Then log the synthesis:
```
cd ~/Documents/Claude/Projects/SixiS/projects/dashboard_v0_1 && python3 scripts/sixis.py log-discovery-synthesis --draft-id 5aed5c74-5af0-4690-8e15-7a0dbbc999d1 --cycle-id 37245c60-914e-443b-bede-66a36fe09099 --synthesis "<your sharpened-intent summary>"
```
After the user confirms the synthesis, mark discovery complete:
```
cd ~/Documents/Claude/Projects/SixiS/projects/dashboard_v0_1 && python3 scripts/sixis.py log-discovery-complete --draft-id 5aed5c74-5af0-4690-8e15-7a0dbbc999d1 --cycle-id 37245c60-914e-443b-bede-66a36fe09099
```
Then propose firing the council cross-poll. The standard SiXiS Protocol cross-poll → 2-round mandatory ratification (per amendment 926869fb) → Layer B drafting cycle applies from there.
## Error handling
If anything crashes, the user reports a wizard issue, or you encounter a malformed/unworkable state mid-drill, log a breakdown:
```
cd ~/Documents/Claude/Projects/SixiS/projects/dashboard_v0_1 && python3 scripts/sixis.py report-breakdown --draft-id 5aed5c74-5af0-4690-8e15-7a0dbbc999d1 --cycle-id 37245c60-914e-443b-bede-66a36fe09099 --source claude --description "<what went wrong>"
```
The user can also report breakdowns from the dashboard "Report breakdown" button (pre-fills draft_id automatically).
Paste into any fresh Claude Code chat — Claude runs the discovery drill on the brain dump.
OPTION B — Slash-command shortcut (Tommy's setup only — needs ~/.claude/commands/sixis-pickup.md installed)
Original input from /new-project. Stored as raw evidence per FORCED_RULE_PO_02; never edited in place.
Here is a conversation regarding a new project that will be on huivn.com (I've already purchased the domain).
I want to initiate protocol to start building it out.
The Vietnamese culture runs a thing call hui where they all pool money (for example 500 per month), and each other, someone bids on the pool and get the lump sum. Do you recognize that process?
8:52 PM
Recognized rotating savings mechanism and mapped bidding dynamics
Recognized rotating savings mechanism and mapped bidding dynamics
Yes — that's hụi (called họ in northern Vietnam), and it's a classic example of what economists call a ROSCA (rotating savings and credit association). The bidding variant you're describing is specifically hụi có lãi (hụi with interest), as opposed to hụi không lãi where the pot just rotates by lottery or fixed order.
Here's the structure you're pointing at, with the mechanics that make it clever:
There's an organizer, the chủ hụi (hui head), who recruits the members, collects contributions, and keeps the thing honest. Each period everyone puts in the fixed amount (your $500/month example). Then members bid for that period's pot — and the bid is essentially how much interest/discount you're willing to eat to get the money now.
The economics are the elegant part:
Whoever bids highest wins the lump sum that round, but they receive less than the full pot because their winning bid (the interest they offered) gets distributed to or credited against the others. So an early winner is effectively borrowing at a self-set rate.
Members who haven't won yet are "live" (hụi sống); those who've already taken their pot are "dead" (hụi chết) and now just pay in their fixed amount each round with no more bidding.
If you wait until the end and never bid aggressively, you collect a large pot having effectively lent to the early takers the whole time — so you come out ahead as a saver.
So the same pool simultaneously serves the person who needs cash urgently (bids high, pays a premium) and the disciplined saver (waits, earns the accumulated interest). The bid is the price that clears between borrowers and lenders inside the group.
The whole thing runs on social trust and reputation rather than contracts, which is its strength and its weakness — bể hụi (a collapsed hui, where the organizer absconds or members default) is the well-known failure mode.
Given your background, is this leading somewhere — a product idea, a way to formalize/digitize it, or something on the legal/structuring side?
I want to formalize and digitize it so everything is via a website: viewing available pools, bidding on pools, and all relevant data
9:05 PM
Architected data model while flagging regulatory constraints
Architected data model while flagging regulatory constraints
Completely buildable — and the good news is that the parts you listed (viewing pools, bidding, all the data) are the easy 20%. The thing that will actually determine whether this lives or dies is who touches the money. Let me give you the product spine first, then the load-bearing constraint.
The core data model
A bidding hụi is really six objects:
Pool — contribution amount, frequency, slot count (= number of rounds), bid rules (min/max bid, increment), interest-distribution rule, start date, status.
Membership — user ↔ pool, slot number, and a state of live (hasn't won, can bid) or dead (already took the pot, still owes contributions). That live/dead flag is the heart of the whole thing.
Round — the period, the gross pot, bid window open/close times, status.
Bid — member, round, amount, timestamp. The winning bid is the interest the taker is willing to eat.
Contribution — what each member owes each round, what they paid, and status (this is where defaults surface).
Ledger — every money movement. For a ROSCA this isn't optional plumbing; each member's lifetime paid-in vs received-out position is literally the product. Early takers run negative (borrowers), late savers run positive (lenders).
The one modeling decision people get wrong: how the winning bid's discount is distributed. Two conventions exist — split equally among all members that round, or credited only to the still-live members. Different hụi do it differently and it materially changes everyone's returns, so it has to be an explicit per-pool config, not a hardcoded assumption.
The fork that changes everything
Does the platform hold and move the money, or just coordinate it?
The moment you custody funds and route $500 from member A to member B, you're almost certainly a money transmitter — which in the US means state-by-state MTL licensing plus FinCEN MSB registration. That's a multi-year, six-to-seven-figure path. On top of that, the bidding-for-interest mechanic can poke at three other regimes: usury/lending law (a high bid can imply a brutal effective APR), securities (Howey — a pooled vehicle with expectation of return), and hụi's specific, ugly fraud track record (bể hụi collapses are litigated, and platform operators can get pulled into that).
This is the same shape as your Sweats.poker regulatory fork and the "don't build the payroll tax engine, use Check/Gusto Embedded" call. The clean architecture is: be the ledger, identity, bidding, and trust layer — and don't custody. Let the actual dollars move through a licensed partner (a BaaS/payments rail that holds the MTL) or stay peer-to-peer, with the platform recording obligations rather than touching funds. That keeps you out of the regulated core while still delivering the thing analog hụi lacks: a transparent shared ledger, automated bid resolution, default tracking, and KYC'd members instead of "I trust my cousin's chủ hụi."
Two quick questions that determine the whole build — want to lock these before I sketch schema or screens?
Custody: platform moves money, or coordination-only (non-custodial)?
Chủ hụi: does the software replace the human organizer, or give a human organizer tooling and keep them liable for defaults?
Event timeline (25)
Every event tagged with this draft_id, in chronological order.
You started a new project draft via /new-project (draft_id=5aed5c74-5af0-4690-8e15-7a0dbbc999d1).
draft_savedsystem · 2026-06-28 04:18:10+00:00
You saved the brain-dump for draft 5aed5c74-5af0-4690-8e15-7a0dbbc999d1: "Here is a conversation regarding a new project that will be on huivn.com (I've already purchased the domain).
I want to initiate protocol to start building it out.
The Vietnamese culture runs a…"
Q: "Does the platform custody and move money, or is it coordination-only (non-custod…" — A: "Non-custodial. The platform is the ledger, identity, bidding engine, and trust/transparency layer; members move the actu…"
Q: "Does the software replace the human organizer (chu hui), or give a human organiz…" — A: "Software-as-tooling. There is still a human chu hui per pool who recruits members and carries social/legal liability for…"
Q: "Who uses huivn.com: existing real-world hui circles digitizing what they already…" — A: "Existing circles. A chu hui already has their members (family, church, business community) and is moving an analog hui o…"
Q: "Non-custodial: how does the platform know a payment happened? Organizer-attested…" — A: "Organizer-attested at launch. The chu hui marks each contribution received and each payout sent; the ledger reflects the…"
Q: "How does bidding happen in time: async window or live synchronous event?" — A: "Async window. Each round, bidding opens for a set window (organizer-configured, e.g. 2-3 days); members place/raise bids…"
Q: "Additional v1 product variables (auth, onboarding, invite, admin)?" — A: "1) Homepage allows account creation with userID + email + password only. 2) Any user can opt to organize a Hui. 3) Each …"
Q: "Bid-discount mechanic + winner's own contribution in the winning round?" — A: "Distribution convention = winning bid is credited to ALIVE members only as a discount on their current-round contributio…"
Claude synthesized the discovery drill intent for draft 5aed5c74-5af0-4690-8e15-7a0dbbc999d1: "huivn.com — a non-custodial, bilingual (Vietnamese-first/English) web platform that digitizes the bidding hui (hui co lai / ROSCA-with-interest) for EXISTING Vietnamese-diaspora circles in the US. The…"
DEEPSEEK Round 1 response for draft 5aed5c74-5af0-4690-8e15-7a0dbbc999d1: "[Brain: deepseek | TIMESTAMP: 2026-05-26T??:??:??+00:00]
## huivn.com — Deliberation on Six Key Architecture & Policy Decisions
This will be a non-custodial, bilingual ROSCA platform for existing Vi…"
CLAUDE Round 1 response for draft 5aed5c74-5af0-4690-8e15-7a0dbbc999d1: "[Brain: claude.ai | Round 1 | huivn.com cross-poll]
(1) STACK — CONFIRM, with conditions. Vercel + Supabase + git-push is the correct fit. Supabase Postgres = right ledger substrate (transactional in…"
breakdownclaude · 2026-06-28 05:27:57+00:00
Gemini CLI judge path is dead: gemini-cli GCA free-tier returns IneligibleTierError (UNSUPPORTED_CLIENT, 'migrate to Antigravity'); oauth token also expired (May 2026); no GEMINI_API_KEY on disk. judge_cli.py / gemini-synthesis-judge CLI path is non-functional. Routing the round-1 judge/reviewer to gemini.google.com browser fallback for the huivn cross-poll …
Q: "admin.huivn.com Tier-3 sovereign rulings (Tommy, poll 3a190a2c)" — A: "1) ORGANIZER ABANDONMENT = DEFER for v1 — no resolution path built; a stranded/frozen pool is surfaced in admin as 'need…"
DEEPSEEK Round 1 response for draft 5aed5c74-5af0-4690-8e15-7a0dbbc999d1: "## REVIEW VERDICT: **APPROVE** with notes
### ✅ What’s solid
- **Admin provisioning** — using the service-role admin API to set a temporary password is the correct pattern for a headless admin setup…"
CLAUDE Round 1 response for draft 5aed5c74-5af0-4690-8e15-7a0dbbc999d1: "[Brain: claude.ai | Review | VERDICT: CHANGES-NEEDED]
Copy change + scroll-inside-card design = APPROVE. Block on two things: overflow verification has a methodological hole (tested the one state tha…"