Overview
Daily Expenses is a subscription-based web application designed to solve a real pain point for personal, freelancers and small businesses: managing multi-currency income and expenses while staying compliant with VAT requirements.
Problem
Global freelancers routinely deal in multiple currencies (AED, USD, GBP, EUR) and struggle to:
- Track spending across categories without overspending budgets
- Produce clean monthly records for their accountants
- Handle VAT calculations without dedicated (expensive) accounting software
- Get a clear picture of finances across currencies in one place
Solution
A focused, mobile-first web app that covers exactly what a solo operator needs — no double-entry bookkeeping, no bank syncing, no tax advice. Just clean records, smart categorization, and VAT-aware reports.
Key Features Built
| Feature | Detail |
|---|---|
| Multi-currency transactions | Each entry stores the exchange rate at time of entry — no historical re-fetching |
| AI categorization | OpenAI gpt-4o-mini suggests categories server-side; falls back to manual on failure |
| Budget tracking | Per-category budgets with near/over warnings computed server-side |
| VAT-aware reporting | Phase-5 feature pulled forward as the primary monetizable output |
| Recurring transactions | Template-based system for repeating income/expenses |
| 14-day guest trial | Frictionless onboarding before requiring a subscription |
| Google OAuth + Credentials auth | NextAuth v5 with JWT sessions |
| Subscription billing | Stripe-powered billing and plan management |
| Account sharing | Shared access model for accountant or partner visibility |
Technical Decisions
Money as integer minor units — All monetary values are stored as integers (fils, cents, pence) to eliminate float precision bugs end-to-end, from database to API to UI.
Rate stored at entry time — rateToBase is saved on each transaction.
Dashboard totals aggregate via amountMinor * rateToBase, making historical
reports stable and accurate.
Per-user scoping enforced server-side — Every owned resource carries a
userId index. API routes resolve identity from the NextAuth session;
client-supplied user IDs are never trusted.
No shadcn/ui — UI is hand-crafted Tailwind v3 with a warm gold-and-green Gulf finance aesthetic, avoiding the shadcn v4/Tailwind v4 dependency conflict.
Stack
- Frontend: Next.js 14 App Router, TypeScript strict, Tailwind CSS v3
- Backend: Next.js Route Handlers, MongoDB + Mongoose
- Auth: NextAuth v5 (Credentials + Google, JWT strategy)
- AI: OpenAI gpt-4o-mini (server-side only)
- Payments: Stripe
- Hosting: Vercel + MongoDB Atlas
- Validation: Zod
Outcome
A production-ready, phased SaaS product built by a single developer — covering auth, billing, AI-assisted data entry, multi-currency aggregation, and VAT reporting — with a clear upgrade path as paying users drive feature prioritization.