4-pillar church-aligned budgeting app ยท Akahu bank sync ยท single-user v1
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.
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.
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.
Repo bootstrapped from CoreshiftHQNZ/app-template
Private repo at CoreshiftHQNZ/sow, branches dev โ staging โ main, GitHub Actions auto-promotion green.
Supabase project + schema applied
Sydney region, ref vmzivnciductsdjduljw. 10 sow tables + 4 enums (pillar, goal_mode, sync_status, user_role).
Inherited template TS errors fixed
tsconfig target=es2022, auth middleware null narrowing, dotenv loader, removed example route. Worth back-porting upstream.
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.
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.
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.
Dashboard with 4-pillar grid
Greeting, last-synced timestamp, uncategorised banner, pillar cards (Stewarding shows tithe progress vs target), recent activity, accounts table.
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.
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.
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.
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").
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.
Railway deploy docs
docs/setup/railway-deploy.md โ exact dashboard clickthrough + env-var paste block + Supabase redirect URL update + first-deploy workflow.
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.
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.
"Skip / ignore" option in swipe onboarding
272 merchant groups is a lot โ many are internal transfers. Add a 5th option (probably a small button below the card) that marks a merchant as "not relevant for budgeting" and hides it from future onboarding without categorising it.
Recurring pattern next_expected auto-advance
Detector currently stores next_expected = lastSeen + frequencyDays. When that's in the past (pattern stopped recurring), the cashflow forecast excludes the pattern. Should we advance forward to current cycle or mark it stale? Probably stale + visible in a "review patterns" screen.
Akahu category โ pillar auto-suggest
Akahu enriches some txns with NZFCC categories (e.g. "Religious organisations" for Equippers Church). Map common categories โ suggested pillar so the swipe pre-fills, reducing taps.
Settings page (tithe %, account "is savings" flags)
User can change tithePct, mark which accounts represent Saving pillar (drives "Saving" totals from transfers), edit category names. Currently only system defaults exist.
First production deploy
After Railway dashboard wiring lands. Test the staging URL, then trigger the Deploy to Production workflow to push staging โ main.
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.
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.
Dashboard graphs
Pillar trend over the last 6 months. Income vs outflow per pillar. Probably recharts since it's already a small bundle add.
Transaction edit (per-txn override)
From the dashboard, tap a txn โ change category or set pillarOverride. Useful for one-off recategorisations.
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.
Akahu full app + accreditation
Personal Apps cap at "1 user (yourself)". Full app is the prerequisite for OAuth2 multi-user. Process: akahu accreditation.
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.
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.