Dit tabblad is alleen voor de Discovery Day en hoort niet bij het product.
Hier staat hoe wij de agent zouden laten draaien. De rest van het prototype laat zien wat de gebruiker ziet.

1. Hoe het nu draait

De agent draait op één Mac mini op kantoor, bewust: op 18-06 kozen jullie lokaal in plaats van Supabase en een VPS. launchd start de nacht om 00:30, met herkansingen om 02:30, 04:30 en 06:00. Sinds 14-10 loopt Claude via de Claude Code CLI op het abonnement. De bewaker draait elk half uur en meldt alleen wat aandacht nodig heeft; een Cloudflare-hartslag ziet het als de mini zelf uitvalt. Het werkt, maar alles hangt aan één machine en één beheerder.

2. Wat we voorstellen

Nu

Eén machine, één beheerder

Mac mini op kantoor

launchd start om 00:30, 02:30, 04:30 en 06:00. Bestandsloten tegen dubbel draaien. Cloudflare Tunnel, nachtelijke back-up naar een Storage Box.

Claude Code CLI

Sinds 14-10 op het abonnement, op dezelfde machine; de batchroute staat daardoor uit.

Lezen

PDF-tekstlaag + macOS-OCR, Claude als extra lezer.

Zenvoices en Exact

Browserschrijver met een eigen Chrome-profiel; betaalselectie via de Exact-pagina met Sebastiaans login.

Bewaking

Bewaker elk half uur op de mini, Cloudflare-hartslag van buiten. Proefdatabases op dezelfde machine.

Eén beheerder

Alles hangt aan Sebastiaan en één machine.

Voorgesteld

Beheerde diensten, test en productie gescheiden

GitHub + Actions

Code, tests en de meetlatpoort op elke pull request.

Railway cronjob

Zelfde schema, container in staging en productie, logs per run.

Claude API

Batches + caching, aparte workspaces met limiet en alarm.

Supabase

STEN-database (test + productie), Storage, Vault.

Bewaker en hartslag

Jullie meldregels, niet meer op de machine die ze bewaken.

Blijft lokaal

Exact-betaalselectie (menselijke login met authenticator).

Database (STEN)Supabase (beheerde Postgres, EU-regio): een productie- en een apart testproject, dagelijkse back-ups en point-in-time recoveryEen testomgeving met eigen data, los van productie (opdracht 1). Postgres-versie, extensies, rollen (bi_reader, geen superuser) en advisory locks eerst naast STEN leggen.
Nachtrun en andere takenRailway (EU West, Amsterdam): de engine als container, als cronjob op jullie schema (00:30 / 02:30 / 04:30 / 06:00), met aparte staging en productieRuns die niet van één machine afhangen, logs per run, hetzelfde image in test en productie. Jullie schema is al het herkansingsmechanisme en blijft gelijk. Crontijden zijn UTC: let op zomer- en wintertijd.
AIClaude API (Anthropic) met Message Batches en prompt caching, zoals jullie engine al kan; dezelfde modellen (Haiku 5.5 structureert, Sonnet 5.5 stelt voor). Aparte workspaces voor productie en ontwikkeling, elk met eigen limiet en alarmDe nacht draait sinds 14-10 op het abonnement via een ingelogde CLI, omdat ontwikkelwerk op 13-10 de API-limiet opmaakte. Met gescheiden workspaces kan de nacht terug naar de API en de batchroute (−50%).
Lezen / OCRTekstlaag uit de PDF (zoals nu) + Tesseract-OCR in de container; Claude blijft de extra, onafhankelijke lezerVervangt macOS-OCR, dat alleen op een Mac draait. Jullie controle 'minstens twee leesfamilies zijn het eens' blijft.
Concepten in Zenvoices zettenJullie browserschrijver (Playwright) in de container, met een robotaccount en dezelfde waarborgenZenvoices kan via de API geen boekingsregels schrijven. Jullie waarborgen blijven: alleen 'Opslaan als concept', nooit goedkeuren, teruglezen na opslaan, vingerafdruk, schrijfsloten per administratie.
Betaalselectie in ExactBlijft op een machine met een mens erbij: Exact vraagt om de dag om een authenticatorJullie betaalselectie werkt via de Exact-pagina met Sebastiaans login. Dat kan niet onbemand in de cloud; zolang Exact er geen API voor geeft, blijft dit deel lokaal.
GeheimenRailway-variabelen per omgeving (vaste sleutels); het roterende Exact-refreshtoken in Supabase Vault, met één schrijver tegelijkNiets in bestanden op één machine. Het Exact-token mag maar door één proces tegelijk worden ververst; dat slot gaat mee.
BestandenSupabase Storage (factuur-PDF's, schermafdrukken bij fouten)Eén plek, met dezelfde rechten als de database.
Mail voor opvolgingMicrosoft Graph op een gedeelde Outlook-mailbox, als conceptJullie werken al zo: factuurverzoeken staan als concept in de administratie-mailbox.
Bewaking en alarmJullie bewaker en meldregels mee: alleen melden als er iets te doen is, kritiek direct, de rest in het dagrapport. Een hartslag buiten de omgeving blijft (zoals de Cloudflare Worker nu)Die regels werken en zijn bewust gekozen. Wat verandert: de bewaker staat niet meer op dezelfde machine als wat hij bewaakt.
Code, tests en kwaliteitspoortGitHub + GitHub Actions: jullie pytest-suite en de meetlatpoort op elke pull request die regels, prompts of code raakt; merge naar main zet staging, een release zet productieJullie poort draait nu lokaal (naar-main.sh, pre-commit-hook); de export bevat geen CI. Zo wordt 'feedback wordt code' veilig voor meer mensen dan Sebastiaan.

3. Jullie besluit van 18-06, en ons antwoord

Jullie kozen met goede redenen voor lokaal. Ons voorstel moet daar per punt op antwoorden.

De data verlaat het pand niet.Bij ons wel: EU-regio en een verwerkersovereenkomst, maar het blijft een andere plek. Is dat een harde eis, kies dan optie B hieronder.
Geen open poorten op de kantoorrouter.Blijft zo: alles belt naar buiten. Excel en Power BI gaan dan over internet (TLS, IP-lijst) in plaats van over het kantoornetwerk.
≈ €3 per maand in plaats van ≈ €28.Ons voorstel kost meer: tientallen euro's per maand voor database, runs en een testomgeving. Daar koop je mee dat het niet van één machine afhangt.
De lokale database was al productie.Klopt, en jullie schreven zelf: verhuizen is een DATABASE_URL-wissel. Dat maakt de stap klein en terug te draaien.
Excel en Power BI rechtstreeks op het kantoornetwerk.De rol bi_reader en de reporting-views gaan mee; alleen het adres verandert.
De prijs: Sebastiaan draagt de uptime.Dit is precies wat wij willen oplossen: geen beheer dat aan één persoon en één Mac mini hangt.
Optie B: alles blijft op kantoor, maar niet meer één machine
Mag de data het pand echt niet uit, dan houden we jullie opzet en voegen we toe: een tweede machine als warme reserve met een herstelde back-up, een testomgeving met eigen data, CI in GitHub Actions met een self-hosted runner, en een overdraagbaar draaiboek.

4. Waarom niet de GitHub Actions-planner voor de nachtrun

  • Geplande workflows kunnen bij drukte later starten of worden overgeslagen.
  • Een job mag maximaal 6 uur duren; het wachten op een batch kan tot 5 uur duren.
  • Runners starten leeg: elke run opnieuw inloggen bij Zenvoices.
  • macOS-runners voor de huidige OCR kosten ongeveer 10× zoveel.
  • Financiële gegevens zouden op de runners van GitHub staan.

GitHub Actions is wel het juiste gereedschap voor CI en de meetlatpoort. Tijdens de overstap kan het tijdelijk de planner zijn, met de Mac mini als self-hosted runner.

5. Overstap in stappen

  1. Terug naar de Claude API voor de nacht, met aparte workspaces en bestedingsalarmen. Dagen.
  2. CI in GitHub Actions met jullie tests en de meetlatpoort.
  3. Supabase-testproject met een kopie van STEN, daarna productie.
  4. De engine in een container en als Railway-cronjob in staging, naast de Mac mini in proefmodus (schrijft niets).
  5. Tesseract in plaats van macOS-OCR achter een vlag, vergeleken op de meetlat.
  6. Schrijven in productie naar Railway; launchd voor de engine op de Mac mini uit. De Exact-betaalselectie blijft lokaal.

6. Kosten (indicatief)

  • Claude: ≈ $13–15 per maand bij ≈ 674 facturen en ≈ 2 ct per factuur (jullie raming), met batches lager, plus ontwikkeling. Limiet nu $50.
  • Supabase en Railway: tientallen euro's per maand voor productie en test, tegen ≈ €3 per maand nu.

Alles indicatief; de bedragen bevestigen we in de offerte.

7. Open punten

  • Moet de data het pand echt niet uit? Dat beslist tussen optie A (beheerd) en optie B (op kantoor, met reserve).
  • Heeft Zenvoices een API om te schrijven? Dan kan de browserschrijver weg.
  • Komt er een Exact-API voor betaalselectie (jullie supportvraag loopt)? Dan kan ook dat deel uit de lokale machine.
  • Wie is eigenaar van de accounts bij Supabase, Railway en GitHub: TEN-19 of Revido?
  • Verwerkersovereenkomsten en EU-regio's bij beide aanbieders.