In het kort
- Vraag
- Begeleiders van bijeenkomsten voor innerlijk werk hebben één plek nodig voor hun aanbod, inschrijvingen, betalingen en facturen, en deelnemers één plek om ze te vinden.
- Aanpak
- Ik bepaal het product, de doelgroep en de requirements, kies tussen ontwerprichtingen en bouw het met agentic coding, op een eigen multi-tenant fundament.
- Opgeleverd
- Een platform dat op een testomgeving draait: agenda, aanbodbouwer, inschrijven en betalen via Mollie Connect, Belgische facturatie, aanmelden zonder wachtwoord en privacy in eigen beheer, in vijf talen.
Wat het wordt
Innerveld (een werktitel) wordt de plek waar mensen in Vlaanderen begeleide bijeenkomsten voor innerlijk werk vinden: familieopstellingen, ademwerk, klankbaden, stilte, retraites. Voor de begeleiders, op het platform gidsen genoemd, wordt het de plek waar hun praktijk online op orde is: hun aanbod, inschrijvingen, betalingen, facturen en een eigen website. Eén keer publiceren, en het staat op de centrale agenda én op hun eigen site.
Het platform draait vandaag op een testomgeving, met verzonnen demopraktijken. De pilot met een eerste gids is in voorbereiding, en de naam is nog een werktitel.
Een fundament voor meerdere platformen
Innerveld is het eerste product op een fundament dat ik bouw voor platformen waarop meerdere organisaties tegelijk werken (multi-tenant). De gedeelde bouwstenen staan los van het product: aanmelden, praktijken en hun domeinen, betalingen, facturatie, privacy, talen, AI, achtergrondtaken, e-mail en opslag, elk als eigen pakket in één monorepo (pnpm, Turborepo, TypeScript strict). Een volgend platform begint zo niet van nul.
Het hart is de scheiding tussen praktijken. Elke rij in de databank hoort bij één praktijk, en PostgreSQL dwingt zelf af dat een praktijk enkel haar eigen rijen ziet (row-level security). De applicatie verbindt nooit als eigenaar van de databank, maar als een beperkte rol, en tests draaien als die rol om te bewijzen dat lezen of wijzigen over de grens heen niet lukt. Een lek zou zo een fout in de applicatie én in de regels van de databank vragen.
Een agenda als programmabrochure
Voor deelnemers is de agenda de voordeur. Ze leest als een programmabrochure: seizoenen en maanden, reeksen met hun avonden, hoeveel plaatsen er nog zijn, en tussendoor blokken die uitleggen wat een werkvorm is of hoe de prijzen werken. Filters op werkvorm, regio, prijs en voertaal maken het overzicht kleiner.
Het beeld van het platform is een veld van grassen en bloemen dat in code getekend wordt en meekleurt met het uur van de dag en het seizoen. Alles bestaat in vijf talen, met vertaalde adressen en de juiste signalen voor zoekmachines.
Het aanbod in mensentaal
De moeilijkste vraag zat in het datamodel. Een gids geeft een eenmalige avond, een meerdaagse retraite, een reeks waarvoor je in één keer inschrijft, open sessies, of een reeks waarin je later nog kunt instappen. Ik modelleerde dat als aanbod, editie en bijeenkomst, met vormen in gewone woorden. Uit elke configuratie volgt één zin die de deelnemer leest, zoals “Je schrijft in voor de hele reeks”; een configuratie die geen zin oplevert, is ongeldig.
In de werkbank van een editie zet de gids bijeenkomsten, prijsniveaus, keuzevragen en locaties, naast een voorvertoning die meeleeft. Capaciteit geldt per bijeenkomst, per prijsniveau en per keuze, en blijft juist als twee mensen tegelijk de laatste plaats nemen: dat is getest tegen een echte databank. Wie van de wachtlijst uitgenodigd wordt, krijgt 48 uur om de plaats te nemen.
Drie bouwers op één machine
Een gids bouwt haar aanbodpagina zelf, uit blokken (tekst, beeld, verloop, voor wie, praktisch, audio, vragen en antwoorden), met slepen of het toetsenbord en een voorvertoning die meeleeft. Dezelfde blokkenmachine bouwt ook haar eigen site en de pagina’s van het platform zelf. De regels voor een goede pagina zitten als geteste code in die machine, niet in een handleiding.
Elke praktijk krijgt een eigen huisstijl: een kleurfamilie, een toon en een vorm, met een levende proef. De kleuren worden berekend (OKLCH), en een test bewaakt dat elke combinatie het contrast haalt dat toegankelijkheid vraagt (WCAG AA). Zo kan een gids kiezen zonder iets stuk te maken.
Inschrijven en betalen, met de gids als verkoper
Een deelnemer schrijft in zonder account: kiezen, gegevens, betalen, met een totaal dat meerekent. Een account wordt pas na de bevestiging voorgesteld. Daarna volgen een bevestiging met de praktische informatie, een agenda-uitnodiging en een herinnering.
De gids is zelf de verkoper. Via Mollie Connect koppelt ze haar eigen betaalaccount, en betalingen komen rechtstreeks bij haar terecht. De sleutels van die koppeling worden versleuteld bewaard, en de status van een betaling wordt altijd opnieuw bij Mollie opgehaald. Die keten is van begin tot einde bewezen in de testmodus van Mollie.
De facturen volgen de Belgische regels: de btw wordt berekend vanuit de prijs inclusief btw, zodat het totaal op de cent klopt, de nummering loopt zonder gaten, creditnota’s (ook gedeeltelijke) krijgen een eigen reeks, en de vrijstellingsregeling voor kleine ondernemingen zit erin. Elke factuur bestaat ook als UBL-bestand volgens Peppol BIS 3.0, dat de validatie op de officiële Peppol-regels zonder fouten doorstaat. Het versturen via het Peppol-netwerk volgt nog.
Aanmelden zonder wachtwoord, en privacy als gedrag
Innerveld kent geen wachtwoorden. Je meldt aan met een code per e-mail, met Google of met een passkey, ook op de eigen site van een gids.
Privacy zit in wat het product doet, niet enkel in een verklaring. Elke gids kiest een bewaartermijn, en daarna worden de gegevens van deelnemers vanzelf geanonimiseerd; facturen blijven zeven jaar bewaard, zonder koppeling aan de persoon. Wie zijn account verwijdert, ziet vooraf wat verdwijnt en wat blijft en tot wanneer, en kan zijn gegevens als bestand meenemen. De site plaatst geen cookies om bezoekers te volgen, en alles draait in de EU.
Vijf talen, met een mens die naleest
De interface bestaat in vijf talen. De teksten van gidsen vertaalt AI, via een route binnen de EU, met een woordenlijst die de vaktaal stuurt. Elke vertaling heeft een status: machinaal, nagelezen, of verouderd na een wijziging in de brontekst. Wat een mens nalas, wordt nooit meer overschreven, en het gebruik wordt per praktijk gemeten.
Gebouwd om te kunnen vertrouwen
Elke betekenisvolle keuze staat in een architectuurbeslissing (ADR), met het alternatief dat werd afgewezen. Een bevestigde fout krijgt eerst een test die faalt, en pas dan de oplossing. Databanktests draaien afgeschermd, op de echte migraties.
Een scherm is pas af als het er ook goed uitziet. Elke pagina wordt in licht, donker en op mobiel vergeleken met een referentiebeeld, en een toegankelijkheidsscan houdt een wijziging met ernstige problemen tegen. Bij elke uitrol lopen de migraties in één transactie; mislukt er één, dan blijft de vorige versie draaien. Het geheel draait zelf gehost in de EU, met een eigen server die de tests uitvoert.
Hoe ik bouw
Innerveld is van bij het begin gebouwd met agentic coding: de code, de tests en de documentatie schrijft een AI-codeerassistent. Ook de ontwerpen komen uit ontwerprondes met AI, telkens met meerdere richtingen. Mijn werk zit in wat daarvoor en daarna komt: de strategie en de doelgroep, de woorden die het product gebruikt, de requirements, en de keuze tussen richtingen, of het verwerpen ervan als iets niet klopt.
Elke beslissing die mijn woord vraagt, komt met een voorstel in een beslislijst, en alles wat geld, de wet of mensen raakt, beslis ik zelf. Niets aan een server verandert zonder mijn akkoord. Ik test zelf als gebruiker, en wat ik zie, wordt werk: een aanbodpagina die ik te rommelig vond, werd een volledige werkbank. ’s Nachts lezen agents het werk van de dag na, elk met een eigen bril, en een scepticus probeert elke vondst te weerleggen.
Dat is niet minder werk, maar ander werk: goed briefen, kiezen, nalopen met eigen ogen en weten wanneer iets nog niet goed is. Het is ook de plek waar ik ontdek hoe ver je met deze manier van bouwen kunt gaan.
Wat er nog komt
Voor de lancering staan nog op de lijst: een pilot met een eerste gids, de definitieve naam en het merk, een productiedomein, een Europese e-maildienst, het versturen van facturen via Peppol en de inning van abonnementen. Het prijsmodel ligt nog niet vast. Daarna kan hetzelfde fundament een volgend platform dragen.


