NL EN
Projects · 01 / 05

Hub

Private app, login only

Personal Laravel app for our household: a watchlist with ratings, a 2000+ title book catalogue, a finance planner, a puzzle collection and a family tree with its own API.

Period
2026, rebuild of an older PHP app
Role
Design, development and hosting
Built with
LaravelPHPMySQLTailwindAlpine.js

Screenshots show made-up demo data, not real accounts.

  • 2000+books in the catalogue
  • 5sections, from films to family tree
  • 200+automated tests
  • ~2 sfrom deploy to live
About the project

Hub is the app our household runs on. It started as a plain PHP site and I rebuilt it from scratch in Laravel 13, with Blade, Alpine.js and Tailwind and no heavy frontend framework, so every page loads fast.

It holds what we track at home: films and series we want to see or have rated, a book collection, our monthly budget, a puzzle collection and a family tree. Every section has its own role, so another household member only sees what is theirs.

What I built
  • Watchlist and ranking that fetch posters, genres and running times from OMDb, with genre filters and a running-time slider
  • A book catalogue built for 2000+ titles: the whole list loads once and only the visible rows are drawn, with an A–Z rail, live search and status tabs
  • A finance planner with income, fixed costs per category, budget pots, savings goals and an expected balance for the month
  • A family tree imported from GEDCOM, with a pan-and-zoom pedigree view, a timeline and a list of missing data
  • A JSON API for an AI research assistant, secured with a per-user token that changes every day
  • Runs in Docker behind a reverse proxy; code changes go live with a single deploy script
Under the hood

How it works

A rebuild that kept the data

The first Hub was plain PHP. Hub 2 is a new Laravel app, and an import service moved everything from the old database across. It has a dry-run mode, so I could check the full import before it wrote a single row.

A GEDCOM parser of its own

The family tree comes from a GEDCOM file, the standard export of genealogy software. Hub parses it itself, works out the families and how people are related, and builds the pan-and-zoom pedigree from that.

Deploys in seconds

The container only holds the runtime (PHP 8.5 and Apache); the code is mounted from a shared folder. A deploy script syncs the code, so a template or CSS change is live in about two seconds. Migrations and caches run when the container starts.

Backups from the app

An admin page makes a full database backup with mysqldump and can restore one, so a backup never depends on logging in to the server.