Inspiration Money decisions are hard to learn by reading; they click when you can “feel” the trade‑offs. We wanted a playful simulator where you try life choices—promotion, a house, loans, a side hustle—and instantly see how they shape savings and net worth. FinSim turns abstract finance into an interactive game with visuals that make sense at a glance.
What it does
- Lets you set your baseline income and expenses, then stack life events with adjustable amounts.
- Runs a 10‑year projection locally or on the server and returns KPIs and a timeline.
- Visualizes net worth and cash flow with clean, responsive charts.
- Saves scenarios to a database and creates public share links you can send to friends or judges.
- Optionally pulls market context (e.g., inflation series from FRED) to inform assumptions.
How we built it
- Frontend: React + Vite + Tailwind for a premium gradient/glass UI; React Router for pages; Zustand for state; Recharts for charts.
- Backend: Node + Express + TypeScript with Zod validation; Prisma ORM targeting TiDB Cloud (MySQL).
- Data: FRED endpoints for inflation/time series and CoinGecko for price snapshots.
- Infra: Vercel (frontend) and Render (backend). Monorepo with
client/andserver/. - Simulation: A clear, extensible model that compounds net worth annually after applying yearly cash flow from income minus expenses plus event deltas.
Challenges we ran into
- Windows dev quirks: Prisma engine file locks (EPERM) and fixing client output paths.
- ESM/CommonJS friction: replaced an ESM-only slug lib with a lightweight generator.
- JSON over curl on Windows: shell quoting pitfalls solved via file-based payloads.
- DB connectivity: SSL/allowlist nuances with TiDB; handled via
sslacceptoptions. - Keeping the UI gorgeous yet fast: balancing Tailwind styles, chart performance, and accessibility.
Accomplishments that we're proud of
- A “judge-ready” UI that feels modern and delightful, not just functional.
- Adjustable life events with instant recalculation and clear KPIs.
- Side-by-side scenario comparison and shareable public links.
- Clean, typed API with validation and a schema-backed database.
- End-to-end deployment on free tiers with environment-configured keys.
What we learned
- How to translate financial concepts into a simple, explainable simulation.
- Practical DX patterns for React + Tailwind v4 and Zustand state.
- Prisma with a serverless MySQL (TiDB) workflow, migrations, and SSL details.
- Deploying a monorepo cleanly to Vercel (client) and Render (server).
- Designing UIs that communicate complex outcomes at a glance.
What's next for Finsim
- Event timing: start year, duration, one-time vs recurring, and monthly vs yearly inputs.
- More controls: savings rate, investment return, inflation-adjusted views, taxes.
- Personalization: auth, user profiles, and saved scenario libraries.
- Curriculum mode: guided challenges and financial literacy lessons.
- Performance and resilience: caching market data, better error handling, PWA/mobile polish.
Built With
- axios
- javascript
- prisma
- react
- render
- router
- st.-louis-fred
- tidbcloud
- typescript
- vercel
- vite
Log in or sign up for Devpost to join the conversation.