A personal net worth tracker and FIRE (Financial Independence, Retire Early) planning tool, built for UK investors. Track investment funds across savings, pensions, and property with periodic value snapshots, then project your path to early retirement.
Includes a Claude Code skill (/fire-advisor) that acts as an interactive FIRE financial advisor — it reads your live portfolio data and helps you model scenarios, optimise tax wrappers, stress-test your bridge strategy, and plan your route to early retirement.
- Track funds across savings, pensions, and property with monthly snapshots
- Net worth dashboard with historical charts
- FIRE projection engine with configurable withdrawal rates, growth assumptions, and tax modelling
- UK-specific: ISAs, SIPPs, LISAs, GIAs, state pension, pension access ages
- Bridge stress testing (can your accessible savings survive until pension age?)
- Income and expense tracking
- Cognito authentication (single-user)
Three independent packages (no monorepo tooling):
backend/— AWS Lambda function handlers (TypeScript, esbuild). Handlers for funds, snapshots, FIRE config, and income/expenses. DynamoDB single-table design.frontend/— React 19 SPA with Vite, Tailwind CSS v4, Recharts. Auth via AWS Amplify/Cognito.infrastructure/— AWS CDK (TypeScript). DynamoDB, Cognito, API Gateway HTTP API, Lambda, S3 + CloudFront with custom domain.
- Node.js 20+
- AWS CLI configured with a profile
- AWS account with Route53 hosted zone for your domain
- Claude Code (for the FIRE advisor skill)
Edit infrastructure/bin/infrastructure.ts and set your AWS account ID, domain, and hosted zone — or set them as environment variables:
export CDK_DEFAULT_ACCOUNT=123456789012
export FINTRACK_DOMAIN=fintrack.yourdomain.com
export FINTRACK_HOSTED_ZONE_ID=Z0123456789ABC
export FINTRACK_ZONE_NAME=yourdomain.com
export AWS_PROFILE=your-profile./deploy.shThis will:
- Build the backend Lambda functions
- Deploy the CDK infrastructure (DynamoDB, Cognito, API Gateway, Lambda, S3, CloudFront)
- Build the frontend with the correct API endpoint and Cognito config
- Upload the frontend to S3 and invalidate CloudFront
- Create a Cognito user (on first deploy)
Sign in with the Cognito user created on first deploy and enter your funds and snapshots through the web UI.
cd backend && npm ci && npm run buildcd frontend && npm ci
npm run dev # local dev server
npm run build # production build
npm run lint # eslint
npm test # vitestcd infrastructure && npm ci
npm run build # tsc
npm run synth # CDK synth
npm run diff # CDK diff
npm run deploy # CDK deployThe standout feature of this project is the Claude Code skill at .claude/skills/fire-advisor/. When you run Claude Code in this repo, you can invoke /fire-advisor to start an interactive session with an AI financial advisor that:
- Fetches your live portfolio data from the API
- Summarises your net worth, asset allocation, and FIRE progress
- Models scenarios: "What if I increase ISA contributions by 500/month?", "What if markets return 5% instead of 7%?"
- Analyses tax wrapper strategy (ISA vs SIPP priority, LISA considerations, drawdown order)
- Stress-tests your bridge period (the gap between early retirement and pension access age)
- Remembers context between sessions
The advisor is UK-focused and understands ISAs, SIPPs, LISAs, GIAs, UK tax bands, state pension, and pension access ages.
To use it, open Claude Code in this repo and type /fire-advisor.
Single-table design. Table name: FinTrack. Partition key: pk, sort key: sk. GSI1: gsi1pk/gsi1sk.
| Entity | pk | sk | GSI1 |
|---|---|---|---|
| Fund | FUND |
FUND#<id> |
— |
| Snapshot | FUND#<id> |
SNAP#<date> |
SNAPSHOTS / <date>#FUND#<id> |
Snapshots denormalize fund name and category at write time. Values are stored in pence (integer).
Set via .env.production (auto-generated by deploy.sh from CDK outputs):
VITE_API_URL— API Gateway endpointVITE_USER_POOL_ID— Cognito User Pool IDVITE_USER_POOL_CLIENT_ID— Cognito client ID
For the FIRE advisor skill, create a .env file in the project root:
FINTRACK_PASSWORD=your-cognito-password
MIT