Werk
Werk waar ik trots op ben
Er zijn vier dingen waar ik bij elk project naar kijk: waar de klant mee worstelde, wat we uiteindelijk hebben gebouwd, waarop het draait, en wat er veranderde toen het live ging. Lees er één door, en je ziet al snel of jouw situatie hiermee overeenkomt.
Dit is bijna allemaal maatwerk software: webapplicaties die zijn gebouwd in Laravel, samen met de bijbehorende apps op iOS en Android. Ik heb ze allemaal in Groningen gebouwd en ben er nog lang na de lancering gebleven. De broncode en documentatie neem je mee als je weggaat.
Referenties op aanvraag. Ik breng je in contact met een klant die al een tijdje met het resultaat leeft, en daar ben ik echt trots op.
MyWarranties: bonnen scannen en garantieclaims indienen
Het probleem. Garantiebewijzen liggen ergens in een la. Thermische kassabonnen vervagen tot een leeg strookje, dus tegen de tijd dat er iets kapotgaat, is het aankoopbewijs al verdwenen of is de garantieperiode stilletjes verstreken. Voor de leverancier is het probleem precies omgekeerd: elke claim komt binnen als een nieuwe e-mailconversatie, en er staat niets in dat naar het product verwijst.
Wat ik heb gemaakt. Een garantieplatform met drie functies op één Symfony-API. De klant maakt een foto van een kassabon en een beeldherkenningsmodel haalt daar direct de producten, merken, aankoopdata, serienummers en garantievoorwaarden uit. Je hoeft niets in te typen. (Serienummers zijn het veld dat niemand vrijwillig invult.) De app waarschuwt je voordat een garantie verloopt. Als er iets kapotgaat, dient de klant een claim in en praat hij met de leverancier via een live chat. Leveranciers reageren via een medewerkersconsole, of beantwoorden gewoon de meldingsmail, en dat antwoord komt weer terug in de chat.
Het resultaat. Drie platforms op basis van één codebase, en ik meet wat de AI-stap kost in plaats van het te schatten:
- 68 REST-eindpunten verdeeld over 41 controllers met één actie, getest door 126 geautomatiseerde tests
- Eén codebase wordt geleverd als webapp, als Android-app en als iOS-app
- Het lezen van een kassabon is één AI-aanroep met schema-beperkingen, waarbij het gebruik van tokens en de kosten per aanroep worden bijgehouden
- Herinneringen voor het verstrijken van de geldigheidsduur op 30, 7 en 3 dagen, die niet twee keer kunnen worden geactiveerd
- Een leverancier kan een claim afhandelen zonder iets te hoeven installeren, gewoon door op de e-mail te reageren
- Gebruikersinterface in acht talen
SmartLabel Academy: een leerplatform voor de muziekindustrie
Het probleem. SmartLabel leert jonge creatievelingen de zakelijke kant van de muziekindustrie: rechten, royalty’s, contracten, metadata. Het platform is opgebouwd op WordPress, met LearnDash er bovenop. Maar inmiddels had het een persoonlijk rechtendossier, een levendige community, native apps en vier talen nodig, en geen enkele verzameling plug-ins reikt zo ver.
Wat ik heb gemaakt. Een zelfstandige React-frontend op een Laravel API. WordPress geeft één functie per keer vrij. Deelnemers werken video-lessen en quizzen af, stellen een CreatorPassport samen met hun releases, rollen en rechten, zoeken in een kennisbank met contractvoorwaarden en modelcontracten, en ontmoeten elkaar in een live community. Via een alleen-lezen brug naar de oude WordPress-database kunnen beide systemen naast elkaar draaien. De migratie duurt zo lang als nodig is, in plaats van één weekend waarin alles in één keer wordt omgeschakeld.
Het resultaat. Ik heb het volgens een schriftelijke overeenkomst gebouwd, en de statische analyse controleert dat bij elke push:
- 269 gedocumenteerde API-eindpunten verdeeld over 95 tabellen, omgezet in een OpenAPI-specificatie
- De backend draait op PHPStan, niveau 10, met strikte regels die in CI worden afgedwongen voordat er een image wordt gebouwd
- Draait naast het WordPress-systeem dat het vervangt, via een alleen-lezen-koppeling
- Eén cache verwerkt zowel verzoeken om pagina’s als live WebSocket-updates, en blijft werken, ook als je offline gaat
- Web, iOS en Android vanuit één codebase, in vier talen
Jouw project zou wel eens de volgende kunnen zijn
Herken je je eigen probleem in een van deze voorbeelden? Stuur me dan een mailtje. Als wat je nodig hebt helemaal niet op deze pagina staat, is dat een net zo goede reden, en juist die mailtjes lees ik twee keer. Een paar zinnetjes over de situatie waarin je zit, leveren je een eerlijke beoordeling op, een schatting van de kosten en de eerste week waarin ik ruimte heb.