Skip to content

Latest commit

 

History

History
36 lines (23 loc) · 2 KB

CLAUDE.md

File metadata and controls

36 lines (23 loc) · 2 KB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Project

WealthDash — a personal finance dashboard built with Next.js 16 (App Router), React 19, TypeScript, Prisma 7 (SQLite), and shadcn/ui. Features transaction tracking and a stock portfolio with real-time Yahoo Finance prices.

Commands

npm run dev       # Dev server (Turbopack)
npm run build     # Production build
npm run lint      # ESLint
npx prisma migrate dev    # Run/create migrations
npx prisma generate       # Regenerate Prisma client

Architecture

Data layer: Prisma with SQLite via LibSQL adapter. Singleton client in src/lib/prisma.ts. Schema defines two models: Transaction (income/expense tracking) and Position (stock holdings with unique ticker). Generated types go to src/generated/prisma/ (gitignored).

Server actions (src/actions/): All data mutations and queries use Next.js server actions with revalidatePath() for cache invalidation. transactions.ts handles CRUD + cash balance calculation. positions.ts handles CRUD + portfolio valuation via live stock quotes.

Stock prices (src/lib/stock.ts): Yahoo Finance quotes fetched sequentially per ticker with a 60-second in-memory cache and stale-on-error fallback.

Components: Server components (async) fetch data directly — SummaryCards, TransactionList, PositionList. Client components ("use client") are forms using useRef for reset. UI primitives from shadcn/ui (base-nova style) in src/components/ui/.

Pages: All three pages (/, /transactions, /portfolio) use force-dynamic rendering. Dashboard aggregates cash balance + portfolio value into net worth.

Conventions

  • Path alias: @/* maps to src/*
  • Tailwind CSS v4 (PostCSS plugin, theme defined inline in globals.css)
  • shadcn/ui config in components.json — use npx shadcn@latest add <component> to add new UI components
  • Environment: only DATABASE_URL needed (defaults to file:./dev.db)