Ik wilde een simpele app om mijn gezondheid bij te houden. Slaap, water, beweging. Alle bestaande apps stuurden mijn data naar de cloud of kostten €10 per maand voor basis functionaliteit.
Dus besloot ik hem zelf te bouwen. Met één klein probleem: ik kan niet programmeren.
Dit is het verhaal van hoe ik met AI als co-pilot in een paar uur een werkende PWA bouwde. Met tests, CI/CD, en deployment. De hele rataplan.
Live app: daily.modub.nl
Een knop die verdwijnt. Data die niet opslaat. Features die opeens stoppen met werken. Dit soort bugs zijn frustrerend, vooral als je ze pas ontdekt wanneer je de app zelf gebruikt.
Tests zijn de oplossing. Kleine stukjes code die automatisch checken of alles nog werkt. Elke keer als je iets aanpast, drukken ze op alle knoppen en controleren ze of de app zich gedraagt zoals verwacht. Vandaag schreef ik er 106.
...
Soms begin je ergens en eindig je heel ergens anders.
Ik wilde een kalenderoverzicht. Zoals Daylio dat heeft: een maand met gekleurde cirkeltjes die je stemming per dag laten zien. In één oogopslag zie je patronen. Veel groen? Goede maand. Clusters van rood? Tijd om eens te kijken wat er speelt.
De eerste versie Claude bouwde een keurige kalender. Met maandnavigatie, weekdagen bovenaan, dagnummers in de vakjes. Plus een uitklapbaar paneel als je op een dag klikte met alle details van die dag.
...
Twee dagen lang werkte hetzelfde veld niet. Ik vulde “lezen” in, klikte opslaan, ging terug - en het vakje was weer leeg. Elke keer opnieuw.
Dit is het verhaal van een bug die me leerde dat AI-gegenereerde code zijn eigen valkuilen heeft. En dat mijn samenwerking met Claude nog lang niet vlekkeloos is.
De frustratie Het begon simpel. Claude had twee nieuwe velden toegevoegd: “lezen” (een checkbox) en “energie” (een emoji selector). De code zag er goed uit. De tests slaagden. Maar op mijn telefoon verdween de data gewoon.
...
Vandaag een korte maar leerzame sessie. Geen nieuwe features, alleen bugs opruimen. En dat bleek verrassend interessant.
De lijst Drie issues stonden open:
#44: Cafeïne statistieken tonen verkeerde data #45: Energie en habits worden niet opgeslagen #49: Statistieken werken niet goed Klinkt als een ramp. Maar de werkelijkheid was genuanceerder.
De echte bugs Issue #44 was legitiem. De app had twee formaten voor cafeïne data: een oud format (caffeineConsumed: true/false) en een nieuw format (caffeineCount: 2). De statistieken snapten alleen het oude format.
...
Elke health tracker heeft dezelfde checkboxes. Slaap. Water. Beweging. Maar mijn leven is niet standaard.
Vandaag bouwde ik custom habits.
Het probleem met standaard trackers Ik wil bijhouden of ik heb gemediteerd. Of ik piano heb gespeeld. Of ik die ene stretching routine heb gedaan.
Geen enkele tracker heeft precies die dingen. Je kunt kiezen uit hun lijstje, maar niet je eigen toevoegen.
Tot nu.
Hoe het werkt In de instellingen staat nu een nieuwe sectie: Custom Habits. Je klikt op “Nieuwe habit toevoegen”, typt een naam, kiest een emoji, klaar.
...
Soms stroomt het gewoon. Je begint met “waar was ik gebleven?” en twee uur later heb je vijf verbeteringen doorgevoerd.
Vandaag was zo’n dag.
Hulp van een virtuele product owner Ik had een probleem: te veel ideeën, te weinig tijd. Wat moet ik eerst doen?
Normaal zou ik gewoon beginnen met wat het leukst lijkt. Maar deze keer vroeg ik het aan Johanna - mijn virtuele product owner.
Even uitleggen: wie is Johanna? In mijn werkmap heb ik een verzameling “agents” - tekstbestanden die Claude vertellen hoe hij zich moet gedragen. Johanna is er één van. Als ik haar “laad”, denkt Claude vanuit het perspectief van een product owner.
...
Na zeven sessies en een werkende app is het tijd voor een eerlijk gesprek. Want de verhalen hiervoor kunnen een verkeerd beeld geven.
Het misverstand “De AI bouwde een app in 16 uur.”
Dat is wat de cijfers zeggen. Maar het is niet het hele verhaal.
Wat ik doe (en waarom het ertoe doet) De juiste vragen stellen De AI kan alles bouwen. Maar alleen als je weet wat je moet vragen.
...
“Het moet aanvoelen als een echte app” De app werkt. De app is live. Maar… het voelt nog als een website.
Tijd voor native feel.
Pull-to-refresh (30 min) Je kent het. Trek naar beneden, de app refresht. Zo simpel, zo verwacht op iOS.
Trek naar beneden → Refresh indicator 80px threshold voor trigger Smooth animatie overscroll-behavior voor browser compatibility Feels: Net een native app!
De code let startY = 0; let pulling = false; element.addEventListener('touchstart', (e) => { if (window.scrollY === 0) { startY = e.touches[0].pageY; pulling = true; } }); element.addEventListener('touchmove', (e) => { if (!pulling) return; const diff = e.touches[0].pageY - startY; if (diff > 80) { // Show indicator, trigger refresh } }); Simpel. Effectief. Native feel.
...
Hoe tekstbestanden me helpen denken.
Het probleem Ik was aan het bouwen, maar ik miste iets. Niet de code - die kwam wel. Maar de richting. Wat moet ik eerst doen? Is dit goed genoeg? Mis ik iets?
Normaal zou je dit aan collega’s vragen. Een product owner. Een designer. Een tester. Maar ik werk alleen.
De oplossing: virtuele experts In mijn werkmap heb ik een verzameling “agents” - simpele tekstbestanden die Claude vertellen hoe hij moet denken. Het klinkt technisch, maar het is eigenlijk heel simpel.
...
De kortste sessie Soms zijn de beste sessies de kortste.
Netlify setup (30 min) netlify.toml configuratie Build settings geconfigureerd Custom domain ready Auto-deploy op git push Het moment Deploy successful! https://dailymo.netlify.app
Ik open de URL op mijn iPhone.
De app laadt. Smooth. Snel. De install prompt verschijnt.
“Zet op beginscherm”
Tap.
En daar staat ie. Op mijn home screen. Tussen de andere apps. Alsof het altijd al zo was.
Van idee naar live Stap Tijd Idee → Project setup 15 min Project → MVP 50 min MVP → Tested 4 uur Tested → Production ready 4 uur Production ready → LIVE 30 min Totaal: ~9 uur AI tijd. ~1.5 uur mijn tijd.
...