Hub
Privé-app, alleen met loginPersoonlijke Laravel-app voor ons huishouden: watchlist en beoordelingen, een boekencatalogus van 2000+ titels, een financiële planner, een puzzelcollectie en een stamboom met eigen API.
- 2000+boeken in de catalogus
- 5onderdelen, van films tot stamboom
- 200+automatische tests
- ~2 svan deploy tot live
Hub is de app waar ons huishouden op draait. Het begon als een simpele PHP-site; ik heb het vanaf nul opnieuw gebouwd in Laravel 13, met Blade, Alpine.js en Tailwind en zonder zwaar frontend-framework, zodat elke pagina snel laadt.
Er staat in wat we thuis bijhouden: films en series die we willen zien of beoordeeld hebben, een boekencollectie, ons maandbudget, een puzzelcollectie en een stamboom. Elk onderdeel heeft een eigen rol, zodat een ander lid van het huishouden alleen ziet wat van hem of haar is.
- Watchlist en ranking die posters, genres en speelduur ophalen bij OMDb, met genrefilters en een schuifje voor de speelduur
- Een boekencatalogus gebouwd voor 2000+ titels: de hele lijst laadt één keer en alleen de zichtbare rijen worden getekend, met een A–Z-balk, live zoeken en statustabs
- Een financiële planner met inkomsten, vaste lasten per categorie, potjes, spaardoelen en een verwacht saldo voor de maand
- Een stamboom uit een GEDCOM-import, met een kwartierstaat om in te slepen en zoomen, een tijdlijn en een lijst met ontbrekende gegevens
- Een JSON-API voor een AI-onderzoeksassistent, beveiligd met een token per gebruiker dat elke dag verandert
- Draait in Docker achter een reverse proxy; wijzigingen gaan live met één deployscript
Hoe het werkt
Herbouwd, met behoud van de data
De eerste Hub was simpele PHP. Hub 2 is een nieuwe Laravel-app, en een importservice heeft alles uit de oude database overgezet. Die heeft een proefmodus, zodat ik de hele import kon controleren voordat er één rij werd weggeschreven.
Een eigen GEDCOM-parser
De stamboom komt uit een GEDCOM-bestand, de standaard export van stamboomsoftware. Hub leest dat zelf in, bepaalt de gezinnen en hoe mensen familie van elkaar zijn, en bouwt daarmee de kwartierstaat om in te zoomen.
Live in seconden
De container bevat alleen de runtime (PHP 8.5 en Apache); de code komt uit een gedeelde map. Een deployscript synchroniseert de code, dus een wijziging in een template of de CSS staat in ongeveer twee seconden live. Migraties en caches draaien bij het starten van de container.
Back-ups vanuit de app
Een beheerpagina maakt met mysqldump een volledige back-up van de database en kan er een terugzetten, zodat een back-up nooit afhangt van inloggen op de server.
Mitchel van Emmerik