TuinTraceer
Iedereen die weleens een moestuin heeft bijgehouden kent het probleem: je zaait iets in april, en in augustus weet je niet meer welk ras het ook alweer was. Een briefje in de schuur, een notitie in de telefoon, een Excel-bestand dat ik nooit meer terugvind — het werkte gewoon niet. Dat was het startpunt van TuinTraceer: een simpele behoefte om bij te houden wat er in de tuin gebeurt, zonder gedoe.
Geen kant-en-klare tuin-app uit de App Store dus, maar iets zelfgebouwds. Niet omdat het per se moest, maar omdat het kon — en omdat zelf bouwen betekent dat de data ook echt van mij blijft.
Wat het werd
Een persoonlijke registratie-app voor twee tuinliefhebbers. Elke handeling in de tuin leg ik vast met datum, gewas, ras, hoeveelheid en locatie. Zaaien of oogsten, met een paar tikken genoteerd. Een seizoensbalk laat altijd zien in welke fase van het tuinjaar je zit, en je kunt filteren op zaai of oogst en zoeken op gewas.
Omdat het voor twee mensen is, heeft ieder een eigen account — zo zie je bij elke registratie meteen wie wat heeft toegevoegd. En omdat een tuin-app alleen nuttig is als je hem ook daadwerkelijk bij de hand hebt, is het een PWA geworden: installeerbaar op iPhone én iPad als gewoon app-icoon, geen App Store nodig, en werkt ook offline.
Onder de motorkap
Bewust gekozen voor een simpele, doorzichtige stack. Geen ingewikkelde toolchain, geen buildstap die over twee jaar niet meer werkt.
- Frontend: HTML, CSS, JavaScript
- Backend: Node.js + Express
- Database: MySQL
De hostingpuzzel
Hier kwam de eerste echte uitdaging: waar laat ik dit draaien? Een gewoon Strato-pakket leek een voor de hand liggende, betaalbare keuze — ruim voldoende opslag, onbeperkt dataverkeer, gratis SSL. Maar shared hosting bij Strato ondersteunt geen Node.js. De API kon dus niet gewoon meeverhuizen naar de webhost.
De oplossing werd een gesplitste architectuur: de statische website draait bij Strato, bereikbaar via het eigen domein. De Node.js-API en de MySQL-database draaien thuis, op een Mac Mini. De browser praat via HTTPS met die thuis-API, die op zijn beurt de database uitleest en beschrijft. Het ‘gezicht’ van de app staat bij een hostingprovider, het ‘geheugen’ staat gewoon thuis op eigen hardware.
Een thuisserver veilig online krijgen
Een Mac Mini vanaf het thuisnetwerk bereikbaar maken voor de buitenwereld brengt eigen vraagstukken met zich mee. De Mac Mini had via DHCP al een vast IP-adres dat óók al voor andere zaken werd gebruikt, zoals de verbinding met MySQL Workbench vanaf een andere Mac in huis.
De voor de hand liggende aanpak — het IP handmatig vastzetten op het apparaat zelf — bleek een valkuil: dat kan bestaande verbindingen breken zodra er iets verandert. In plaats daarvan koos ik voor een DHCP-reservering op de router: de router onthoudt aan de hand van het MAC-adres van de Mac Mini dat dit apparaat altijd hetzelfde IP krijgt. Niets hoefde aangepast te worden op de Mac Mini zelf, en alle bestaande koppelingen bleven gewoon intact.
Daarna volgde het gebruikelijke rijtje voor een thuis-gehoste dienst: poortsturen op de router zodat verzoeken van buiten de Mac Mini bereiken, en een gratis Let’s Encrypt-certificaat (via Caddy) zodat het verkeer naar de API versleuteld is.
Het resultaat
Een werkende app die mijn partner en ik allebei op onze telefoon en tablet hebben staan, die synchroon loopt omdat beide apparaten naar dezelfde database thuis schrijven, en die geen cent kost aan abonnementen. Alleen wat elektriciteit voor een Mac Mini die toch al aanstond.
Onderweg heb ik ook overwogen om er een WordPress-versie van te maken in plaats van de handgeschreven HTML-site — makkelijker beheer via een CMS, maar met als afweging dat de huidige lichte, framework-loze opzet juist transparant en onderhoudsvrij is. Voor nu blijft de simpele versie staan.