Live data · Refreshes hourly via ISR

Track every pound.
Know where it goes.

ExpenseFlow is a production-grade full-stack expense tracker with AI receipt scanning, multi-currency support, shared group expenses, real-time analytics, and GraphQL API.

Demo login:demo@expense.app/demo123

Live from the demo database

Real data, server-rendered

Fetched server-side at build time and regenerated every hour (Next.js ISR)

217
Expenses tracked
across all categories
£43,223
Total spend tracked
last 12 months
10
Active categories
from food to travel
£3,602
Monthly average
per user

What's inside

Every feature you'd build yourself

Designed as a portfolio project showcasing modern full-stack patterns.

Smart Analytics

Interactive charts with category breakdowns, 30-day trends, budget tracking, and AI-generated spending insights. Powered by MongoDB aggregation pipelines.

AI

AI Receipt Scanner

Upload a receipt photo and Claude AI extracts the amount, description, and category automatically. Falls back to keyword matching in demo mode.

Shared Group Expenses

Create groups, invite members, split bills equally or by exact amounts. Greedy debt-simplification algorithm minimises the number of settlements.

Multi-Currency

Add expenses in any of 30 currencies. Live exchange rates cached for 1 hour from open.er-api.com. Stores original amount + conversion rate for audit trail.

Recurring Expenses

Weekly, monthly, or yearly recurring templates. Generate due expenses in bulk, pause/resume, and track next due dates automatically.

CSV & PDF Export

Export filtered expenses to CSV or a beautifully formatted PDF report generated server-side with PDFKit. No client-side PDF libraries needed.

Perf

Redis Caching

Analytics endpoints cached in Redis with 2–5 minute TTLs. Non-blocking SCAN-based cache invalidation on every write. Falls back gracefully if Redis is down.

GraphQL API

Full GraphQL layer alongside REST using Apollo Server 4. Apollo Sandbox enabled in development. Custom Date scalar, auth guard, and ISR-friendly resolvers.

JWT Auth + RBAC

Stateless JWT authentication with role-based access control. Helmet, CORS, and express-rate-limit for production hardening. Passwords hashed with bcrypt.

Tech stack

React 18TypeScriptNext.js 14Node.jsExpressMongoDBRedisGraphQLApollo Server 4JWTTailwind CSSViteVitestDockerGitHub ActionsClaude AIVercelMongoDB Atlas

How this page is rendered

This landing page is a Next.js 14 Server Component. On each deployment (or every hour via ISR), it authenticates with the ExpenseFlow API server-side and fetches live analytics. The HTML arrives fully rendered — no loading spinners, no client-side API calls, zero JavaScript for the stats.

  • Server-side fetch with next: { revalidate: 3600 } (ISR)
  • Graceful fallback to seed data if API is unreachable
  • Zero client JS for above-the-fold content
  • next-themes for dark/light with no flash on load

Ready to explore?

The demo is live with 200+ seeded expenses, shared groups, recurring templates, and real analytics. No sign-up required — just use the demo credentials.

Demo credentials

email
demo@expense.app
password
demo123