Alle cases
Intern systeem

Integraties · Klantportaal

Care PortalKlantportaal voor onderhoudsurenpakketten, live op care.thecreativitylab.nl

De klanten van de Studio zien hun caresaldo, dienen wijzigingsverzoeken in en kopen bij; elk uur dat erbij komt of eraf gaat landt in één grootboek waar alleen aan toegevoegd wordt en dat de database zelf bewaakt.

Klant
The Creativity Labonze eigen operatie
Dienst
Portaal, betalingen, integraties
Jaar
2026eerste commit juli 2026, geverifieerd in git
Status
Livecare.thecreativitylab.nl
Open het portaal
De pakkettenpagina van het Care Portal: drie urenpakketten, wat er in elk zit, en een afrekenknopDe openbare pakkettenpagina

Geverifieerde systeemfeiten

Geteld in de codebase, augustus 2026

10Edge functions: afrekenen, webhook, uitnodigingen, meldingen, herstel, health
18Databasemigraties, row-level security op elke tabel die ze aanmaken
1webhookschrijft elk betaald uur bij: hij haalt de betaling opnieuw op bij Mollie, negeert alles wat niet betaald is en is bestand tegen herhaling
0onbedoelde roodstandenEen databasetrigger weigert elke geboekte werkregel die een saldo onder nul zou brengen, tenzij een beheerder bewust de allow_negative-vlag op die regel zet; het portaal doet dat nooit

De cijfers hierboven zijn tellingen in de repository. Klantnamen en saldi zijn privé en blijven dat.

Het probleem

Onderhoudsuren leefden in e-mails en een spreadsheet. Niemand kon het saldo zien zonder ernaar te vragen.

  • Urenpakketten die wij met de hand bijhielden, onzichtbaar aan de kant van de klant
  • Wijzigingsverzoeken die per mail binnenkwamen, zonder gedeelde status
  • Bijkopen waarvoor eerst een factuur heen en weer moest voordat het werk kon beginnen
  • Geen spoor waar een van beide partijen naar kon wijzen

Dit is onze eigen weergave van de situatie ervoor. Het beschrijft een handmatige workflow en is daarmee het enige op deze pagina dat de repository niet kan controleren.

Het systeem

Een grootboek dat de database beschermt, een webhook die niets vertrouwt, en een portaal voor beide kanten.

Vite en React aan de voorkant, Supabase erachter: Auth, Postgres met row-level security en edge functions. Tijd wordt in minuten opgeslagen; het urengrootboek kent alleen toevoegingen, bijschrijvingen tellen op en werk schrijft af, en saldi worden op de server berekend. Een trigger weigert een afschrijving die rood zou doen staan, tenzij een beheerder dat op die regel uitdrukkelijk overrulet, en activiteiten en het auditlog worden door databasetriggers geschreven, niet door de client. Betalingen lopen via Mollie: de webhook ontvangt alleen een betaal-id, haalt de betaling opnieuw op bij Mollie, negeert alles wat niet betaald is, en schrijft uren precies één keer bij: een atomaire, idempotente SQL-functie voor bestaande klanten, en een tegen herhaling bestendige afhandeling voor gasten die de order claimt voordat er wordt bijgeschreven. In beide gevallen wordt het gefactureerde bedrag op de server opnieuw gecontroleerd tegen de prijs die de server heeft bepaald. Uitnodigingen en meldingen gaan via Resend.

  1. Verzoek of bijkopenEen klant dient een wijzigingsverzoek in of koopt een urenpakket.
  2. BetalingAfrekenen via Mollie; de terugkeer in de browser is nooit het bewijs van betaling.
  3. GrootboekDe webhook haalt de betaling opnieuw op, schrijft precies één keer bij, de trigger bewaakt het saldo.
  4. BeheerDe Studio plant het werk in en boekt de uren; de klant ziet elke regel.Overdracht aan een mens
Het inlogscherm van het Care Portal
Inloggen

Het resultaat

Beide kanten zien dezelfde cijfers,
en de cijfers kunnen niet uit elkaar lopen.

  • Klanten zien saldo, verzoeken en een transparant urengrootboek
  • Beheerders zetten klanten op, beheren uren en verzoeken; elke wijziging in de geld- en statustabellen wordt door de database zelf in een auditlog geschreven waar alleen aan toegevoegd wordt
  • Betaalde uren worden bijgeschreven achter één geverifieerde webhook, op beide paden bestand tegen herhaling
  • Een lanceerchecklist in de instellingen laat zien welke integraties zijn ingesteld

Jouw workflow

Heb je een workflow zoals deze?

Vertel ons waar de uren heen gaan. Wij brengen de workflow in kaart, zeggen eerlijk of dit AI nodig heeft of gewone automatisering, en komen terug met een duidelijke volgende stap.

Plan een systems call

Geen gladde verkoop, geen standaarddecks. Eén gesprek met de persoon die het zou bouwen.