Personal
2026
Finanzas
A personal finance dashboard for income and expenses. Sign-in is Google OAuth only (Auth.js with a database session). After login there are five views: dashboard, monthly, annual, categories, and accounts. You can CRUD expenses and incomes, attach a payment method and optional account, add categories with an emoji picker, set a monthly limit per category, and manage cards or accounts. The monthly list filters by text, category, and method. Charts cover month series, year-over-year, category split, income by account, and balance sparklines. Currency (EUR/USD/GBP), language (es/en), year, and a savings-goal cookie live in the shell.
Data goes through Server Actions with Zod, not REST routes — except Auth.js. Neon Postgres plus Drizzle: Auth.js tables, payment accounts, categories, expenses, incomes, and a rate-limit table (20 mutations per minute per user). Rows for money are scoped by the session email; categories are shared. Aggregations mix SQL (sum, groupBy year) with a pure calculations module. CI runs lint, typecheck, and build; Vitest covers the money math and formatters; Playwright exists but needs a session cookie, so it is not in CI.
Stack is Next.js 16 (App Router) and React 19, TypeScript, Tailwind CSS, Drizzle on Neon, Auth.js, next-intl, Radix/shadcn, Recharts, and Zod. CSP and auth middleware sit in front. The live demo opens on the login screen. The GitHub repo stays private.
- Next.js
- React
- TypeScript
- Drizzle
- Neon
- Auth.js
- Tailwind CSS
- Recharts