Building CashUp

CashUp is a gamified personal finance education app — track income and expenses, complete Duolingo-style lessons, climb a savings leaderboard, and earn achievement badges. It runs as a Progressive Web App with optional Supabase persistence or an in-memory demo mode for stakeholders.

Live Demo

No account needed — open Sign in (Iniciar sesión), then use a demo user.

What it does

Marketing landing

Public landing page with hero, feature cards (smart tracking, learn finance, compete & earn, AI tips), user reviews, about section, course previews (3 levels: Fundamentos, Dinero Inteligente, Inversiones), blog teasers, and FAQ accordion.

Auth & onboarding

  • Login with Supabase auth or demo users (“existing user” / “new user” for stakeholder demos)
  • Onboarding flow with profile setup
  • Financial literacy test — baseline quiz before entering the app

Core app (protected routes)

ModulePurpose
DashboardFinancial overview, stats, savings rate, streaks
TransactionsIncome/expense tracking with categories
SubscriptionsRecurring charge detection and management
LearningGamified lessons with study + quiz pages
LeaderboardSavings ranking competition
Savings goalsTarget-based saving progress
Split expensesShared expense splitting
Profile & settingsUser preferences, PWA install instructions

AI features

AIAnalysisDialog provides personalized financial tips based on spending habits.

PWA behavior

When installed as a standalone PWA, the app skips the marketing landing and routes directly to /auth — treating the installed app as the product, not the brochure site.

Tech stack

LayerChoice
FrameworkReact 18 + TypeScript + Vite
UIshadcn/ui + Tailwind CSS
StateZustand
Data fetchingTanStack React Query
BackendSupabase (auth + PostgreSQL)
RoutingReact Router 6
PWAvite-plugin-pwa + service worker
ChartsRecharts
FormsReact Hook Form + Zod
TestingVitest + Testing Library

Demo mode works without Supabase — all data lives in memory so the full UX can be demoed without backend setup.

Development process

CashUp (FinPath Mastery) is a Vite + React financial literacy demo with Zustand state, optional Supabase backend, and PWA support via vite-plugin-pwa. Live demo: finpath-mastery.vercel.app.

Layout shell

  • Integrated the shadcn/ui Vite template: sidebar, mobile bottom nav, and React Router page scaffold.
  • Set up route structure for lessons, quizzes, calendar, and profile screens.
  • Prepared component architecture for later Supabase wiring while keeping demo mode functional.

Demo UI phase (no database)

  • Built all screens with realistic in-memory placeholder data so the full UX is navigable without backend setup.
  • Implemented financial literacy test flow and lesson quiz pages.
  • Added charts with Recharts and forms with React Hook Form + Zod validation schemas.

PWA configuration

  • Added vite-plugin-pwa with web app manifest, service worker, and install prompts — see Vite PWA guide.
  • Fixed Vite build issues related to service worker precaching and asset paths.
  • Tested offline shell loading for installed home-screen mode.

Mobile PWA layout

  • Tuned safe-area insets and bottom navbar positioning for iOS/Android standalone display.
  • Prevented scrollable content from hiding behind the fixed bottom nav.
  • Enabled single landing-page mode when installed (no duplicate home button).
  • Resolved UI ghosting and translation string mismatches across ES copy.

Final polish

  • Refined calendar scheduling UI and lesson content positioning above the nav bar.
  • Shipped new app icon and navbar sizing for small screens.
  • Final deploy pass on Vercel with demo data mode documented in README.

Blog

recent-work

Building Galena AI

Synthetic voice detection dashboard — six ONNX detectors behind a FastAPI service, verdict confidence, call history, and interactive model metrics.

Read more →

Galena AI

Synthetic voice detection dashboard — six ONNX detectors via FastAPI, verdict confidence, call history, and interactive model metrics.

How it was built →
border-home1