Full-Stack Application · Personal Project
Luyra — Personal Finance Workspace
- Next.js 16
- React 19
- TypeScript
- Supabase Auth
- Neon Postgres
- Vercel Cron
- Anthropic
Project Summary
Problem
Personal finance needs more than a transaction list: it needs a private place to understand spending, plan budgets, grow savings, and review decisions over time without losing control of the underlying data.
Approach
Luyra is a personal money-management workspace with finance as its active product surface. It combines transaction tracking, budgets, savings, analytics, financial reviews, settings, and an optional AI Money Coach behind a Next.js application. Supabase handles authentication while Luyra's application data is served through a typed Next.js API boundary backed by Neon Postgres.
Screenshots
What I Built
- Transactions with categories, payment methods, tags, and multiple currencies
- Monthly budgets with alerts before spending drifts too far
- Savings goals and recurring transactions updated on schedule
- AI-assisted analysis, PWA installation, notifications, and automated backup
Implementation
Next.js 16 App Router and React 19 provide the application surface. Supabase Auth manages login and identity; Neon Postgres stores users, finance data, reports, and preferences. Zod validates request data, while a lib/api → route handler → service → repository boundary keeps components independent from SQL. Vercel Cron and Workflow run scheduled finance jobs, with optional Anthropic, Resend, Telegram, and Web Push integrations.
Architecture Flow
Backend Evidence
Core data
Key endpoints
- GET
/api/finance/overviewLoad the authenticated finance dashboard summary
- GET
/api/finance/analyticsReturn spending and cash-flow analytics
- POST
/api/finance/money-coachAsk the optional AI Money Coach about personal finance data
- GET
/api/finance/reviewBuild a financial review from recent activity
Engineering Decisions
Challenge
Running recurring work, alerts, reports, and backups without an always-on server
Decision
Used secret-protected scheduled routes for idempotent background jobs
Challenge
Keeping each user’s financial records isolated at the database boundary
Decision
Applied RLS to owner-scoped rows and automated a secondary Postgres backup
Takeaways
- A deliberate boundary between identity, HTTP, business logic, and SQL makes a backend migration much smaller
- Financial products become more useful when analytics and review workflows turn raw transactions into decisions
VSTV Agent — Real Estate Platform & Operations Console