Skip to content
Back to Projects
Luyra — Personal Finance Workspace

Full-Stack Application · Personal Project

Luyra — Personal Finance Workspace

Solo Developer 2024 — Present 1 developer
Live
  • 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

Luyra — Personal Finance Workspace — screenshot

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

Next.js 16 + React 19
Supabase Auth
Next.js API route handlers
Services + repositories
Neon Postgres · Vercel Cron/Workflow
Authentication and application data have an explicit boundary: Supabase owns the session and JWT identity, while authenticated route handlers derive the user id server-side before services and repositories query Neon. That boundary also leaves a contained path for the planned Spring Boot API migration.

Backend Evidence

Core data

userstransactionscategoriespayment_methodsbudgetssavings_goalssavings_contributionssubscriptions

Key endpoints

  • GET/api/finance/overview

    Load the authenticated finance dashboard summary

  • GET/api/finance/analytics

    Return spending and cash-flow analytics

  • POST/api/finance/money-coach

    Ask the optional AI Money Coach about personal finance data

  • GET/api/finance/review

    Build a financial review from recent activity

Engineering Decisions

  1. Challenge

    Running recurring work, alerts, reports, and backups without an always-on server

    Decision

    Used secret-protected scheduled routes for idempotent background jobs

  2. 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
Next Project

VSTV Agent — Real Estate Platform & Operations Console