Estimate — bahalaka Complete App
13 boards · 226 story points · 54 work items · Boards 5–17
v2 — updated after NOUS Desktop comparison. SDK vendored. Atom verb handlers, not HTTP endpoints. One channel.
Boards Overview
| Board | Phase | Items | Pts |
| 5 | SDK Vendor + WASM Core + App Structure | 5 | 21 |
| 6 | WASM Storage + Auth + Config | 4 | 16 |
| 7 | Server Infra (2 changes) | 4 | 18 |
| 8 | Registration + Pairing | 3 | 13 |
| 9 | Chat Core | 4 | 18 |
| 10 | Chat Features | 4 | 16 |
| 11 | Status + Schedule | 5 | 21 |
| 12 | Finance Core | 4 | 18 |
| 13 | Sponsorships | 4 | 16 |
| 14 | Agreements | 4 | 18 |
| 15 | Concern Detection | 4 | 18 |
| 16 | Stories + Onboarding | 3 | 13 |
| 17 | Ship | 6 | 20 |
| Total | 54 | 226 |
Board Details
Board 5 — SDK Vendor + WASM Core + App Structure 21 pts
Vendor the nous C SDK. Create /app/ folder. Prove C runs in the browser via wire protocol.
{nous C modules, add to, sdk/ (vendor from kastil)}
3~a
{app/ folder structure + shell, add to, bahalaka project}
3~a
{Emscripten Makefile (sdk/ → WASM), add to, bahalaka project}
5~a
{wire.c + crypt.c WASM compilation, add to, Emscripten build}
5~a
{bahalaka.js relay client bridge, add to, app/}
5~a
Board 6 — WASM Storage + Auth + Config 16 pts
Local persistence via IDBFS. Config file. TOTP login via atom through relay.
{journal.c + store.c WASM with IDBFS, add to, Emscripten build}
5~a
{bahalaka.conf.js (relay host/port/paths), add to, app/}
3~a
{TOTP auth page + session atom flow, add to, app/pages/}
5~a
{WASM foundation verification, plan tests for, bahalaka app}
3~t
Board 7 — Server Infra (2 Changes) 18 pts
WebSocket transport on relay. Bahalaka atom verb handlers on prime. Per-user store paths.
{WebSocket transport (RFC 6455), add to, relay_server.c}
5~a
{WebSocket port, add to, relay firewall (3 regions)}
3~a
{bahalaka atom verb handlers, add to, prime}
5~a
{per-user encrypted store paths, add to, prime}
5~a
Board 8 — Registration + Pairing 13 pts
User onboarding via registration atoms. Connection pairing via signed invite atoms.
{user registration atom flow, add to, bahalaka app}
5~a
{connection pairing via signed invite atom, add to, bahalaka app}
5~a
{relay + prime integration verification, plan tests for, bahalaka app}
3~t
Board 9 — Chat Core 18 pts
Forward-only messaging. Chat atoms packed by wire.c, encrypted, sent through relay.
{chat UI page, add to, app/pages/}
5~a
{message send via WASM atom + WebSocket, add to, chat}
5~a
{message receive + decrypt + unpack + render, add to, chat}
5~a
{forward-only journal enforcement, add to, chat}
3~a
Board 10 — Chat Features 16 pts
Receipts, offline queue, media. All atoms through relay.
{read + typing indicator atoms, add to, chat}
3~a
{offline message queue via local journal, add to, chat}
5~a
{photo + voice binary atoms, add to, chat}
5~a
{chat verification, plan tests for, bahalaka app}
3~t
Board 11 — Status + Schedule 21 pts
Asymmetric visibility. GPS atoms. Schedule atoms. All through relay.
{status atoms + GPS verification, add to, app/pages/}
5~a
{Capacitor GPS plugin + location atom, add to, native shell}
3~a
{provider status dashboard, add to, app/pages/}
5~a
{schedule UI + time request atoms, add to, app/pages/}
5~a
{connection isolation enforcement, add to, catalog_server.c}
3~a
Board 12 — Finance Core 18 pts
Allowance, disbursement, savings. Every transaction a signed atom through relay.
{financial atom verb handlers, add to, prime}
5~a
{allowance engine + disbursement atoms, add to, app/pages/}
5~a
{savings + withdrawal tracking atoms, add to, app/pages/}
3~a
{financial dashboard, add to, app/pages/}
5~a
Board 13 — Sponsorships 16 pts
University sponsorships, grade proofs, sponsor requests. All atoms through relay.
{sponsorship lifecycle atoms, add to, app/pages/}
5~a
{grade proof photo as binary atom, add to, app/pages/}
3~a
{sponsor request atom flow, add to, app/pages/}
5~a
{finance verification, plan tests for, bahalaka app}
3~t
Board 14 — Agreements 18 pts
3-part templates, 48-hour cooling, dual Ed25519 signing. All atoms through relay.
{agreement template triples, add to, prime}
5~a
{template selection + cooling period atoms, add to, app/pages/}
5~a
{dual Ed25519 signing atoms, add to, agreements}
5~a
{mismatch detection via policy.c WASM, add to, agreements}
3~a
Board 15 — Concern Detection 18 pts
Promises, reason.c graph walks, concern result atoms pushed through relay.
{promise + commitment declare atoms, add to, app/pages/}
5~a
{concern detection via reason.c cron, add to, prime}
5~a
{provider concern dashboard, add to, app/pages/}
5~a
{trust system verification, plan tests for, bahalaka app}
3~t
Board 16 — Stories + Onboarding 13 pts
Field guide content as triples. Onboarding key generation. All through relay.
{stories engine triples + query atoms, add to, prime}
5~a
{contextual story suggestion atoms, add to, app/pages/}
3~a
{onboarding flow + WASM key generation, add to, app/pages/}
5~a
Board 17 — Ship 20 pts
Capacitor build, download page, comment migration, invite codes, app stores.
{Capacitor iOS + Android build, add to, bahalaka project}
5~a
{smart download page, add to, app/get/}
3~a
{Firestore comments → nous triple migration, update in, bahalaka.com}
3~u
{friends-only signed invite atoms, add to, bahalaka app}
3~a
{app store submission, add to, iOS + Android}
3~a
{end-to-end ship verification, plan tests for, bahalaka app}
3~t
Dependencies
Critical Path
- Board 5 → 6: WASM core must compile before storage + auth can use it
- Board 6 → 7: Client auth atoms must work before server infra can validate them
- Board 7 → 8: Relay WebSocket + prime endpoint must be live before registration atoms can flow
- Board 8 → 9: Users must exist (registered via atoms) before they can chat
- Board 9 → 10: Chat core before chat features
- Board 8 → 11: Users must exist before status/schedule atoms
- Board 7 → 12: prime verb handlers must be live before financial atoms can flow
- Board 12 → 13: Finance core before sponsorship lifecycle
- Board 14 → 15: Promises feed concern detection graph walks
- Board 17: All prior boards complete
Parallel Opportunities
- Boards 11 + 12 parallel after Board 8 — Status and Finance are independent feature domains
- Boards 13 + 14 overlap — Sponsorships and Agreements are separate domains
- Board 16 alongside 15 — Stories don't depend on concern detection
Value Rationale
Priority Order
- Boards 5–6 (WASM): Zero value without this. Proves C + wire protocol runs in the browser. Everything depends on it.
- Boards 7–8 (Server + Registration): Unblocks every user-facing feature. Atoms can't flow without the relay WebSocket and prime endpoint.
- Boards 9–10 (Chat): Highest user value. The core use case. If chat atoms flow, the app has a reason to exist.
- Board 11 (Status + Schedule): The differentiator. Asymmetric visibility via atoms is what makes bahalaka unique.
- Boards 12–13 (Finance): The accountability layer. Transforms the relationship from words to signed ledger atoms.
- Boards 14–15 (Agreements + Concern): The trust engine. reason.c walking the triple graph is the crown jewel.
- Board 16 (Stories): The education layer. Content atoms queried through relay. Good but not urgent.
- Board 17 (Ship): The finish line. Capacitor build, download page, migration, app stores.
Scale
- 226 total story points across 13 boards, 54 work items
- Anchor: a 5 is something a college student can do in one night, complete and perfect
- 22 existing C modules in nous — the hard crypto/storage/protocol work is done
- 7 live nous nodes already running — 3 primes, 3 relays, 1 scout
- 2 server-side changes — WebSocket transport on relay + atom verb handlers on prime
- 1 communication path — NTRP0001 atoms via relay. No exceptions.