Case study

KeepingTrackOf.com

A multi-area personal tracking application I designed, built and operate in production. Everything below is live code: the screenshots are taken from the running application.

The live keepingtrackof.com home page
keepingtrackof.com, captured from the live site
Stack
PHP 8.3 · Symfony 7 · MariaDB
Tests
Unit, integration & functional, 90%+ coverage gate
Deploys
Continuous, zero-downtime, auto-rollback
Security
Strict CSP, MFA, Turnstile, audit logging
KTO money area showing an account transaction register with running balances

Personal finance tracking

Accounts, transactions, categories, payees, recurring items and reconciliation — with QIF import/export and running balances.

  • Direct-SQL QIF importer with duplicate fingerprinting
  • Natural-language transaction search powered by Claude
  • Investment portfolio with end-of-day price sync
KTO report page with charts of spending by category over time

Reports and dashboards

Spending by category, cash-flow over time, net worth and asset values — rendered as fast server-side pages with charts.

  • Cached query results with tag-based invalidation
  • Printable layouts and PDF export
  • Per-user timezones and date handling
KTO trip itinerary page listing a day of activities with travel legs between stops

Trip planner

Itineraries with days, lodging, activities, meals and transport; geocoded stops, travel-time conflict checks, maps and a printable/PDF itinerary.

  • Google Geocoding, Routes and Places APIs, server-side only
  • Drag-and-drop day ordering
  • Budget-capped API usage with an admin kill-switch
KTO health dashboard summarising recent exercise and meals

Health and fitness

Exercise logging, meals and food database, health notes and a dashboard that pulls it together.

  • Structured exercise actions and sets
  • Meal and food tracking
  • Dashboard summaries across areas
KTO job-hunt tracker listing applications and their statuses

Job-hunt tracker

Applications, follow-ups, documents and résumés; AI-generated job synopses and fit analysis; reminder emails; a Sankey view of the pipeline.

  • Headless-Chrome fetch for postings that block plain HTTP
  • Résumé markdown to PDF pipeline
  • Daily reminder digests by cron
KTO to-do list page with items and due dates

To-do lists

Simple lists and items with due dates — the kind of small feature that still gets tests, authorization and admin support.

  • Per-record authorization via voters
  • Automatically admin-manageable
  • Full functional test coverage
KTO two-factor authentication set-up page offering an authenticator app or email codes

Platform: auth, admin, security, operations

Stateless JWT authentication with MFA, a registry-driven admin UI, strict CSP, rate limiting, GDPR export/delete, metrics, and continuous deployment.

  • Stateless JWT cookie auth with key rotation and MFA
  • Admin UI auto-derived from Doctrine metadata
  • CSP with per-response nonces; Turnstile on registration/login
  • CI with a 90% coverage gate; zero-downtime deploys with rollback

Under the hood

What "production-grade" means here

Testing

PHPUnit suites at three levels; every test runs in a rolled-back database transaction; a coverage gate fails the build below 90%. Money-critical arithmetic is spot-checked with mutation testing.

Delivery

GitHub Actions runs audit + tests on every push; a green push to main deploys automatically with Deployer: migrations before the symlink flip, smoke test after, rollback on failure.

Security

Stateless JWT auth with a rotating key ring and MFA; object-level authorization via voters; per-response CSP nonces; Cloudflare Turnstile on registration and suspicious logins; admin actions audited.

Operations

Separate app, database, cache, vault and monitoring hosts on a private network; nightly dumps plus binlog point-in-time restore; Prometheus/Grafana dashboards and alerts; secrets rendered from Vault at deploy time.

Visit KeepingTrackOf.com.

Want something like this for your business?

Most of what you see here started as a one-page brief.

Start a project