Clio
Privé-app, alleen met loginLogboek voor afspraken en klantgesprekken: één invoerregel die +klant, @persoon, #tag en !deadline live kleurt, met actiepunten, export, samenvattingen en een MCP-koppeling voor AI.
- 5soorten tokens, gekleurd tijdens het typen
- 190+automatische tests in PHP en JavaScript
- 3exportformaten
- 2FAbij elke login
Clio is mijn logboek voor afspraken en klantgesprekken. Alles begint met één invoerregel: typ wat er besproken is en Clio herkent tijdens het typen de klant, personen, tags, deadlines en bestede tijd.
Uit die notities bouwt Clio een tijdlijn, een lijst met open actiepunten en samenvattingen per klant. Het draait op Laravel 13 en FrankenPHP zonder frontend-buildstap, achter inloggen met tweestapsverificatie en een strikte content security policy.
- Live kleuring van +klant, @persoon, #tag, !deadline en ~tijd, uit één grammatica die de PHP-parser en de JavaScript-tokenizer delen
- Aanvullen van klanten, personen en tags, met sneltoetsen voor bijna alles
- Open actiepunten gegroepeerd in te laat en later, af te vinken in de tijdlijn
- Samenvattingen per klant en dag die terugverwijzen naar hun bronnen
- Exporteren naar Markdown, CSV en JSON, volgens het huidige filter
- Een MCP-server zodat een AI-assistent het logboek kan lezen; schrijven vraagt aparte rechten op het token
- Elke gebruiker heeft een eigen logboek, afgedwongen in de modellen en gecontroleerd door automatische tests
Hoe het werkt
Eén grammatica, twee parsers
Notities worden twee keer geparsed: in JavaScript tijdens het typen, voor de kleuren en suggesties, en in PHP bij het opslaan. Beide draaien op één gedeeld bestand met testgevallen, dus wat je ziet tijdens het typen is altijd wat er wordt opgeslagen.
AI-toegang zonder de deur open te zetten
Het MCP-endpoint is de enige route buiten de login en de tweestapscontrole. Tokens kunnen alleen lezen, tenzij ze schrijfrechten krijgen, worden als hash opgeslagen en hebben een rate limit nog vóór het token wordt gecontroleerd. Mislukte pogingen komen in het log voor fail2ban.
Testen raakt nooit de live data
De lokale opzet heeft een eigen database. Commando's die data schrijven weigeren in productie en tegen elke andere database, en de testsuite stopt als hij niet naar de testcontainer wijst. Echte data komt alleen binnen via Clio's eigen JSON-export.
Zoeken en geschiedenis
Zoeken gebruikt een MySQL full-text-index waarin elk woord als begin van een woord telt. Elke wijziging wordt bewaard als revisie en verwijderen kan ongedaan worden gemaakt, dus er gaat nooit per ongeluk iets uit het logboek verloren.
Mitchel van Emmerik