Sow โ€” Build Kanban

4-pillar church-aligned budgeting app ยท Akahu bank sync ยท single-user v1

Last updated 2026-05-13
repo ยท supabase ยท railway
Build phases
M0 Foundation
M1 Onboarding + dashboard
M2 Cashflow + goals
M3 Deploy + polish
M4 Multi-user (church)

Ricky's tasks

Action items

Things that need a human (you) to click through a flow. None are technical. Don't worry about the "Later" column โ€” Claude will tell you when each becomes time-sensitive.

Do now

App is buildable + runnable locally. These three unblock the next phase.

โ–ถ๏ธ Test the swipe UI locally ~15 min ยท validates the core UX

cd /Users/Ricky/Documents/Claude/Projects/Equippers/sow && npm run dev, then open http://localhost:5050 and sign up with ricky@coreshifthq.com. Auto-provision links to your existing user row. You'll land on /onboarding with your real 272 merchant groups. Try drag ยท tap ยท arrow keys. Note what feels rough โ€” biggest UX risk is the 272 number itself (most are internal transfers). Feed back which buckets you want a "skip / ignore" flow for.

๐Ÿš‚ Finish Railway dashboard wiring ~15 min ยท gets sow deployable

Follow docs/setup/railway-deploy.md. Project shell + staging env are already created via CLI. The remaining steps need the dashboard: connect GitHub repo, paste env vars (block included), generate domains, update Supabase redirect URLs.

๐Ÿ” Rotate Akahu tokens at my.akahu.nz after first deploy โ€” 5 min

The two Akahu tokens were pasted into this chat. Once Railway is live and pulling vars, rotate both at my.akahu.nz, then update .env locally and the Railway env vars (both environments). Old tokens stop working immediately.

Later โ€” heads-up only

Each becomes time-sensitive when its milestone starts. I'll prompt you.

Decide: stay solo, or open to the church? after M3 polish

If you want other church members on Sow, M4 kicks in: graduate from Akahu Personal App โ†’ full Akahu app, go through Akahu's accreditation, switch the auth layer to per-user OAuth2. ~2โ€“4 weeks of work + waiting on accreditation. Keeping it solo is fine โ€” Sow stays free and your existing tokens keep working.

Custom domain (optional) any time after deploy

sow.coreshifthq.com via Cloudflare โ†’ Railway custom domain. Currently Railway-provided URL is fine.

Kanban

Done
14
M0SOW-1

Repo bootstrapped from CoreshiftHQNZ/app-template

Private repo at CoreshiftHQNZ/sow, branches dev โ†’ staging โ†’ main, GitHub Actions auto-promotion green.

M0SOW-2

Supabase project + schema applied

Sydney region, ref vmzivnciductsdjduljw. 10 sow tables + 4 enums (pillar, goal_mode, sync_status, user_role).

M0SOW-3

Inherited template TS errors fixed

tsconfig target=es2022, auth middleware null narrowing, dotenv loader, removed example route. Worth back-porting upstream.

M1SOW-4

Akahu sync layer

Service + route + CLI. Pulls accounts + transactions (365d first run, 35d incremental), classifies income, detects recurring patterns. Verified: 7 accounts, 956 txns, 9 patterns.

M1SOW-5

Default categories + onboarding API

4 system categories (one per pillar). /api/onboarding/merchants groups by merchant or whitespace-collapsed description; /categorise bulk-assigns; /complete flips users.onboardingComplete.

M1SOW-6

Swipe onboarding UI

Tinder-style card with pointer drag + 4-direction tap buttons + arrow-key shortcuts. Up = Stewarding, Right = Saving, Down = Spending, Left = Seeding. Pure CSS transforms โ€” no anim libs.

M1SOW-7

Dashboard with 4-pillar grid

Greeting, last-synced timestamp, uncategorised banner, pillar cards (Stewarding shows tithe progress vs target), recent activity, accounts table.

M2SOW-8

Cashflow 8-week timeline

Projects recurring patterns forward, buckets into Monday-anchored weeks, computes running balance, flags low-balance weeks. Expandable per-week event list.

M2SOW-9

Goals with dual-mode projection

date_locked โ†’ app computes required monthly rate. rate_locked โ†’ app computes estimated finish date. Inline create + allocate forms. Auto-marks complete on target hit.

M2SOW-10

Shared AppShell with nav

Sow logo + Home/Cashflow/Goals tabs + Refresh + Sign out. Active state highlights current page. Dashboard uses it; new pages plug in for free.

M3SOW-11

Railway project + staging env created

Project ID 2aa7ea26-6f54-4dd0-a27b-f182251e8e25 in Coreshift HQ workspace, staging env duplicated from production. GitHub repo link + env-var paste pending (see "Do now").

M3SOW-12

Local dev verified end-to-end

npm run dev boots on port 5050 (5000 taken by macOS AirPlay), serves React app, API endpoints respond, auth gating works.

M3SOW-13

Railway deploy docs

docs/setup/railway-deploy.md โ€” exact dashboard clickthrough + env-var paste block + Supabase redirect URL update + first-deploy workflow.

M3SOW-14

Kanban entry (this page)

Sow added to coreshift-kanbans index. Will be kept in sync as part of the work, not as a separate pass.

Doing
1
M3SOW-15

Browser smoke-test of full flow

Ricky to log in, swipe through merchants, look at the dashboard / cashflow / goals. Capture what feels rough so M3 polish can be brief-driven, not guessed.

Backlog
8
M3SOW-21

Custom sub-categories per pillar

User-defined sub-categories ("Groceries", "Subscriptions", "Holiday fund") nested inside each pillar. Schema supports it; needs UI + categorisation flow that doesn't blow up the swipe simplicity.

M3SOW-22

Goal allocation history view

Per goal, show every allocation that's flowed in (manual + linked to transactions). Currently the schema records them but the UI just shows the total.

M3SOW-23

Dashboard graphs

Pillar trend over the last 6 months. Income vs outflow per pillar. Probably recharts since it's already a small bundle add.

M3SOW-24

Transaction edit (per-txn override)

From the dashboard, tap a txn โ†’ change category or set pillarOverride. Useful for one-off recategorisations.

M3SOW-25

Nightly cron for /api/sync

Currently sync is manual. Add a Railway cron job (or simple setInterval in the server) to pull from Akahu once per 24h.

M4SOW-26

Akahu full app + accreditation

Personal Apps cap at "1 user (yourself)". Full app is the prerequisite for OAuth2 multi-user. Process: akahu accreditation.

M4SOW-27

OAuth2 signup flow for church members

"Connect with Akahu" button โ†’ user picks their bank โ†’ returns with a per-user token stored encrypted in the users table. Replaces the env-var Akahu tokens.

M4SOW-28

Encrypted per-user token storage

When multi-user lands, each user's Akahu tokens need to live in the DB (encrypted with a KMS key) instead of env vars. Required for OAuth2 path.