Stuart
Een modulair platform dat om het even wat beheert.
Eén kern, een handvol vervangbare packages, en een applicatie die nooit geforkt hoeft te worden om bij de volgende klant te passen.
- Composer-packages
- 5 Composer-packages
- backoffice-modules
- 13 backoffice-modules
- aanpassingen aan de kern per module
- 0 aanpassingen aan de kern per module
- Rol
- Product, architectuur, bouw
- Periode
- 2026 — nu
- Stack
- Laravel 12 Livewire 3 Tailwind CSS MySQL Laravel Cashier Docker
Het probleem
Elk bedrijf vraagt dezelfde tachtig procent — accounts, rollen, uitnodigingen, rechten, een kalender, een dashboard — en daarna twintig procent die telkens anders is. Die twintig als een branch van de tachtig bouwen betekent één fork per klant onderhouden, en bij de derde durft niemand nog iets te upgraden. Stuart bestaat om van die twintig een package te maken in plaats van een branch.
Hoe het werkt
De kern declareert interfaces, de modules implementeren ze, en de applicatie beslist welke implementatie eraan hangt. Recepten benoemen een ingrediënt via het voorraadcontract en niet via de voorraadtabel, dus het hele stockpakket vervangen laat recepten overeind. Het wordt bewust gedemonstreerd op iets onglamoureus en genadeloos — een huishouden runnen, waar de voorraad echt is, de deadline het avondeten is, en niemand een workaround accepteert.
Wat erin zit
Voorraad als dubbele boekhouding
Elke beweging is in balans en heeft twee kanten, dus er wordt nooit iets gecreëerd of vernietigd — alleen verplaatst. Loten, locaties, FIFO- en FEFO-picking, reservaties, en een voorraadstand die altijd uit te leggen valt in plaats van enkel te tonen.
Recepten die weten wat ze kosten
Ingrediënten, stappen, gereedschap en timings, gepland tegen wat er effectief in de kast staat. Het package hangt af van de kern en nooit van voorraad — precies dat maakt allebei vervangbaar.
Aankopen, leveranciers en boodschappen
Een kasticket wordt voorraad, een boodschappenlijst wordt een aankoop, en de planner maakt van volgende week allebei. Elke stap belandt in het grootboek en niet ernaast.
Facturatie als deel van het platform
Abonnementen via Laravel Cashier, facturen opgemaakt via de API van Clark — het product factureert zijn klanten dus met dezelfde compliancemachine die het verkoopt.
Op uitnodiging, met opzet
Publieke registratie staat uit, e-mail wordt geverifieerd vóór ze vertrouwd wordt om mee in te loggen of te verzenden, en rollen en rechten zijn groepsgewijs. Een tenant is een gezin of een bedrijf, geen mailinglijst.
Draait waar je het zet
Docker om te ontwikkelen, een gescript release naar een droplet voor productie — lokaal bouwen, versturen, migreren, symlink omzetten. Terugrollen is de symlink terugzetten.
Een keuze die uitleg verdient
De receptentabel draagt geen foreign key naar items. Dat kan ook niet: de tabel waar een item in leeft hoort bij het package dat het voorraadcontract invult, en het receptenpackage heeft geen recht om die naam te kennen. Die constraint opgeven is precies wat het mogelijk maakt een module te vervangen zonder migratie — een bewuste ruil, en de reden dat dit een platform is en geen vier applicaties die op elkaar rijmen.
Staat er zoiets op je lijst?
De projecten verschillen, de manier van werken niet. Vertel wat je probeert op te lossen.
Neemt nieuw werk aan