Skip to content

Latest commit

 

History

History
80 lines (68 loc) · 4.05 KB

File metadata and controls

80 lines (68 loc) · 4.05 KB

Spendable — Roadmap

Last updated: 2026-03-12 (M2 complete)

Milestones

M0 — Foundation ✅

  • Brainstorm & concept validation
  • PRD written
  • Tech stack decided (Next.js, Tailwind, shadcn/ui, Zustand, Claude API)
  • Competitor analysis

M1 — Scaffold & Core Engine ✅

  • Next.js app scaffolded under app/
  • Data model defined (types.ts)
  • Zustand store wired up (store.ts)
  • Safe to Spend calculation engine (calculate.ts)
  • Core UI components (SafeToSpendCard, BalanceInput, SetupIncome, ExpenseList, TransactionLog)
  • App renders and basic flow works

M2 — Testing & CI/CD ✅

  • Vitest + React Testing Library configured
  • Playwright E2E configured
  • Unit tests: calculate.ts (20 tests, full coverage of engine)
  • Store tests: partialize, rehydration, actions (26 tests total)
  • Component tests: SafeToSpendCard, SetupIncome, ExpenseList
  • E2E test: full happy path (set income → add expense → see Safe to Spend)
  • Git repo initialized at project root
  • GitHub repo: https://github.com/otonielrojas/spendable
  • Netlify auto-deploy on merge to master → https://spendable.netlify.app
  • Netlify PR deploy previews (unique URL per open PR)
  • GitHub Actions CI: lint + unit tests on every PR
  • Development workflow documented in CLAUDE.md (branch naming, PR checklist, merge policy)

M3 — MVP Polish

  • Persistence: localStorage so data survives refresh
  • Onboarding flow: first-time user guided setup (income → buffer → first expense)
  • Empty states for every section
  • Error handling & input validation (negative amounts, past due dates, etc.)
  • Mobile UX pass: touch targets, keyboard behavior, safe area insets
  • Dark mode support
  • PWA manifest + installable on mobile homescreen
  • At launch: remove BETA_PASSWORD env var from Netlify (disables pre-launch gate)
  • At launch: add Umami analytics snippet to layout.tsx (privacy-first, no cookies, GDPR-compliant, free) — enables M4 day-1/day-7 retention tracking without requiring user accounts

M4 — Validation & Feedback

  • Deploy to production URL
  • Share with 10 target users (young professionals)
  • Collect feedback via simple typeform or in-app widget
  • Track key metric: do users return after day 1? day 7?
  • Iterate on core UX based on feedback

M5 — V2: Bank Sync

  • Plaid integration: link bank account
  • Auto-import transactions
  • Auto-detect recurring expenses from transaction history
  • Balance auto-updated from bank

M6 — V2: AI Layer (Freemium)

  • Claude API integration
  • "Why is my Safe to Spend low?" — AI explanation
  • Smart categorization of transactions
  • Pay cycle insights ("You usually have $X left by day 10")
  • Subscription paywall ($5–8/mo) for AI features

Decisions Log

Date Decision Reason
2026-03-11 No bank sync in MVP Validate core UX loop cheaply before Plaid integration complexity
2026-03-11 Pay-cycle-native (not calendar month) Primary differentiator vs PocketGuard
2026-03-11 Target: young professionals on first salary Clear niche, high pain point, word-of-mouth potential
2026-03-11 Freemium: core free, AI ~$5-8/mo Lower barrier to adoption; AI features justify upsell
2026-03-12 Vitest (not Jest) Faster, native ESM, better Next.js/React 19 compat
2026-03-12 Playwright for E2E (not Cypress) Better performance, cross-browser, first-class TypeScript
2026-03-28 Pre-launch gate via middleware.ts + BETA_PASSWORD env var Protect unfinished M3 UI from public exposure; remove at launch by unsetting env var
2026-03-28 No accounts on free tier (permanent) "No account required" is a core trust differentiator vs YNAB/PocketGuard; accounts only introduced for Pro tier at M6
2026-03-28 Umami for analytics (not Vercel Analytics) App is on Netlify; Umami is privacy-first, cookie-free, GDPR-compliant, free — enables M4 retention metrics without violating no-account promise