# Alpha Accounting (Alpha Invoice) ## Purpose Alpha Accounting is a Next.js 14 App Router application for invoicing, accounting, and financial workflows. It supports invoices, quotations, recurring invoices, reminders, PDF generation, email sending, and dashboard analytics. ## Tech Stack - Next.js 14 (App Router) - TypeScript - Tailwind CSS - Prisma ORM (SQLite dev) - Nodemailer (SMTP) - Firebase Storage (PDFs) ## Key Directories - src/app: routes, layouts, and pages - src/components: shared UI components - src/lib: server actions, helpers, and integrations - prisma/schema.prisma: database schema ## Core Files - src/lib/actions.ts: server actions for CRUD and business logic - src/lib/schemas.ts: Zod validation schemas - src/lib/reminder-engine.ts: reminder queue processing - src/lib/email.ts: email sending and templates - src/lib/currency.ts: currency symbols - src/lib/invoice-utils.ts: invoice totals and formatting - src/lib/InvoicePDF.tsx: PDF rendering for invoices - src/lib/pdf-generator.tsx: PDF generation and upload flow - src/lib/firebase-storage.ts: Firebase Storage uploads ## Data Model (Prisma) - Company, User, Client, Invoice, Quotation, RecurringInvoice - ReminderSettings, ReminderRule, ReminderTemplate, ReminderEmailQueue, ReminderLog ## UI Locations - Dashboard routes: src/app/dashboard - Settings pages: src/app/dashboard/settings - Public pages: src/app, src/app/about, src/app/pricing, src/app/investors ## Environment Variables - DATABASE_URL - SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD - NEXT_PUBLIC_APP_URL - Firebase keys (see .env.example) - NEXT_PUBLIC_GTM_ID (optional) ## Common Workflows - Install: npm install - Prisma generate: npm run prisma:generate - Prisma push: npm run prisma:push - Dev server: npm run dev - Build: npm run build ## Notes for AI Tools - Validate payloads with Zod schemas in src/lib/schemas.ts. - Use server actions in src/lib/actions.ts instead of direct Prisma calls in UI. - Dates must be serialized for client safety (see serializeData in actions). - Invoice/quotation updates delete line items then recreate; send full payloads. - Reminders rely on company settings; seed/update company first. - PDF generation stores files in Firebase Storage; local persistence is not used.