De vorige lead developer had geen tijd meer. Wat hij achterliet was een draaiende productie-app in een verouderde React pages router setup, zonder documentatie, en met een registratieflow die fundamenteel kapot was — je kon een account aanmaken, maar de bevestigingsmail werkte niet, wachtwoord resetten was onmogelijk, en de helft van de gegevens die je invulde bij registratie werd nooit opgeslagen. Ik nam het solo over.
De eerste prioriteit was de auth. Login werkte deels, maar account aanmaken deed het niet goed: bevestigingsmails kwamen niet aan, wachtwoord resetten was stuk, en ingevoerde gegevens werden niet correct opgeslagen via de Strapi API. Ik debugde de volledige flow, zette het om naar de correcte Strapi-implementatie, en testte alles grondig op de stagingomgeving voordat het naar productie ging — altijd laat op de avond wanneer het gebruik laag was.
Daarna begon de incrementele modernisering. In plaats van alles in één keer te vervangen — te risicovol voor een live platform — koos ik voor een geleidelijke aanpak: elke nieuwe feature of component die ik bouwde verving gelijk de oude CSS door Tailwind. De app router migratie deed ik wel in één keer, gepland en uitgevoerd buiten productie-uren. Zo werd de codebase steeds moderner zonder dat gebruikers er iets van merkten.
Voordat ik minder beschikbaar zou worden, nam ik een student onder mijn hoede. Ik liep met hem door de codebase, bouw documentatie op in Storybook en ZeroHeight, en ben nog steeds beschikbaar als hij vastloopt. De overdracht is een proces, geen moment.
De registratieflow gebruikte Strapi incorrect — waardoor bevestigingsmails uitbleven, wachtwoord resetten stuk was, en gebruikersdata verloren ging. Volledig herschreven naar de correcte Strapi API-implementatie en getest op staging voor elke productie-deploy.
Een volledige Next.js router migratie op een live platform is risicovol. Ik plantte het zorgvuldig, testte alles op staging, en voerde de migratie uit in één nacht buiten productie-uren. Nul downtime, nul klachten.
Te duur en te risicovol om alles in één keer te herschrijven. In plaats daarvan: elke nieuwe component of feature vervangt meteen de oude CSS door Tailwind. De codebase wordt stap voor stap moderner zonder grote risico's.
Performance (78) en Accessibility (89) worden actief verbeterd. De lagere scores komen van legacy afbeeldingen in oude componenten die nog niet zijn gemigreerd — dit is werk in uitvoering.
"Luuk pakte een codebase op die niemand meer begreep en maakte er iets van waar we als team op kunnen voortbouwen."
— Team YoungPWR
Staging is geen luxe, het is een vereiste. Elke wijziging op een live platform — hoe klein ook — ging eerst door staging. Dat heeft meerdere keren een productie-incident voorkomen.
Incrementeel refactoren werkt beter dan een big bang rewrite. Elk component dat ik aanraakte werd beter achtergelaten dan ik het vond. Over tijd telt dat op.
Kennisoverdracht begint niet op je laatste dag. Door vroeg te beginnen met documentatie en mentoring zorg je dat het project niet van één persoon afhankelijk is — ook niet van jezelf.