Skip to content
Personal

Ledgerly

2025-08-01 — present

Family/organization shared finance management app — Next.js 16 fullstack, Supabase PostgreSQL, 3-tier RBAC (OWNER/ADMIN/MEMBER), NestJS Cron recurring transaction automation, 99.45% line coverage unit tests + 300+ E2E integration tests

Ledgerly project cover image

Project Description

A shared finance management application for families and organizations to collaboratively track income and expenses. The Next.js 16 App Router frontend provides transaction, category, and budget CRUD with a Recharts-based financial analytics dashboard, handling authentication and authorization through Supabase Auth with Row Level Security. Implements a 3-tier RBAC system (OWNER/ADMIN/MEMBER) for granular organizational permissions, manages server state with TanStack Query v5, and validates form inputs with Zod 4. Recurring transaction automation runs on a separate NestJS backend deployed via Docker on a Mac mini to bypass Vercel Cron limitations, executing daily at midnight (KST) via @nestjs/schedule. Built 397 Vitest unit tests (99.45% line coverage) and 300+ Playwright E2E tests organized by role-based scenarios (Admin/Member), with a full-stack integration test environment connecting to a real backend and local Supabase.

Highlights

  • 397 Vitest unit tests with 99.45% line coverage
  • 300+ Playwright E2E tests, role-based scenarios
  • 3-tier RBAC (OWNER/ADMIN/MEMBER) + Supabase RLS
  • NestJS Cron recurring transaction auto (Docker)
  • Full-stack integration test env (FE+BE+Supabase)

Features

  • Transaction management — income/expense CRUD with category classification, date/memo/amount-based recording
  • Budget management — per-category and per-period budget setting with real-time usage tracking
  • Organization management — multi-org creation and switching with independent data per organization
  • 3-tier RBAC — OWNER (full access), ADMIN (member/settings management), MEMBER (own transaction management)
  • Recurring transaction automation — NestJS Cron service auto-generating scheduled transactions daily at midnight (KST)
  • Financial analytics dashboard — Recharts-based income/expense trends and category ratio visualization
  • Internationalization — next-intl based Korean/English UI switching

Lessons Learned

  • 💡 Learned SSR authentication state management and RLS-based data access control by combining Next.js 16 App Router with Supabase Auth, understanding auth context propagation patterns between server and client components
  • 💡 Experienced permission separation and data isolation strategies in organizational multi-tenancy by designing a 3-tier RBAC system (OWNER/ADMIN/MEMBER)
  • 💡 Learned practical criteria for microservice separation and shared DB schema management by operating a separate NestJS backend via Docker to bypass Vercel Cron limitations
  • 💡 Internalized test pyramid strategy by building 397 Vitest unit tests (99.45% coverage) and 300+ Playwright E2E tests with role-based scenarios, establishing a full-stack integration test environment with real backend and local Supabase

Tech Stack

Next.js React TypeScript Supabase PostgreSQL Prisma NestJS Tailwind CSS TanStack Query Zod Vitest Playwright Docker Vercel

Related Links

  • live