In development
Multi-tenant SaaS, funeral trade
Case files, suppliers, invoicing, members and policies, with row-level security on every table. Not yet launched, which is why it has no name here.
1 / 4 · 57 extensions in view · source: delivery document
Services
I build, migrate, connect and maintain web applications. Full stack here means I design the schema, set up the server, write the code and keep the site running afterwards. No agency, no layers in between, no handover halfway.
Government · Non-profit · Small business · Independents
An outdated system brought up to date in phases, with the data intact rather than rebuilt from nothing.
PHP 8.3 · MySQL 8 · DockerIn fullWIKIKnowledge bases set up, migrated and extended with custom extensions and a skin of their own.
Semantic MediaWiki 5.1 · PageForms · LuaIn fullAPPApplications built to fit, several clients in one system, from database schema to production.
TypeScript · Next.js · PostgreSQLIn fullAn API on a system that has none, or a connection to a register you depend on. With a dry run before anything is written.
REST · GraphQL · SPARQL · KvK · PDOKCustom themes and fully hand-built sites, connected to stock, fulfilment and invoicing. No bought template.
Shopify · WordPress · Next.jsSpeed, security and accessibility measured with a real browser, with a report and a priority list. Carrying out the work can follow.
Playwright · axe-core · Core Web VitalsHosting for hand-built sites, with updates, backups, certificates and monitoring. One person to talk to instead of a ticket system.
Docker · nginx · VPSMediaWiki since 2008, commercial websites since 2009, government work since 2021. Every figure on this site is in the work inventory with its source beside it.
See the work and the workstationIn full 01 / MIG
A site on an old PHP or an old database that nobody dares touch any more. I bring it forward in phases, extension by extension, and repair what is broken in the database along the way. Throwing it away and starting again is almost never necessary and almost always more expensive, because twenty years of editorial work cannot be rebuilt.
Built with
PHP 7.4 to 8.3 · MySQL 5.7 to 8.0 · MediaWiki 1.26.4 to 1.39.10 · PostgreSQL · Docker · nginx · Apache · Bash
What you get
The art atlas of France ran on MediaWiki 1.26.4 from 2015 and had been compromised. More than one party said it had to go. More than 8.000 duplicated archive revisions renumbered, forty-three extensions carried across, the database repaired in place, repeat page loads 26 to 64 times faster. The site is still there.Delivery document
In full 02 / WIKI
I have worked with MediaWiki since 2008, and since 2021 for government organisations. Setting it up, migrating it, extending it with custom extensions, and arranging the environment around it so editors can carry on without a developer. Few people in the Netherlands take this work on, and it is what I know best.
Built with
MediaWiki LTS · Semantic MediaWiki 5.1 · custom extensions and skins · PageForms · Scribunto and Lua · VisualEditor · AbuseFilter · OATHAuth · jobrunner
What you get
Six custom extensions and a skin built for one client: an API layer of 5.215 lines, a quality dashboard that scores 4.600 notes, a bulk repair with a dry run, a status page, a map synchronisation and an enrichment from Wikidata.Delivery document and repository
In full 03 / APP
An application that does exactly what your work asks, instead of a package you have to work around. Several clients in one system, roles and rights, invoicing, documents, an audit trail. The rules of the trade go into the database rather than into application code, so nobody can work around them later by accident.
Built with
TypeScript · Next.js App Router · React · Node.js · PostgreSQL · row-level security · Docker · Playwright · Vitest
What you get
Under construction now: a multi-tenant platform for the funeral trade with 46 tables, 29 migrations, 119 SQL tests and 24 screens, four production dependencies, and Dutch funeral law held as constraints in the database. Not yet launched, which is why it is described without a name.Own account
On the bench
In development
Case files, suppliers, invoicing, members and policies, with row-level security on every table. Not yet launched, which is why it has no name here.
In development
My own product. Public organisations have to accept the European identity wallet by the end of 2026, alongside the DigiD connections they already have.
Running live
The site you are reading is the front of a measuring system. Every measurement enters a hash chain, and the architecture rules are enforced by a test.
The stack
TypeScript · React · Next.js App Router · server components · CSS with design tokens · Tailwind · shadcn/ui · WebGL2 · canvas · WCAG 2.2 AA
PHP 8.3 · Node.js · REST · GraphQL · custom API layers · queues and background workers · PostgreSQL · MySQL 8 · migrations · row-level security · constraints and triggers · indexes and query plans · SKIP LOCKED · outbox · Drizzle · Bash
MediaWiki LTS · Semantic MediaWiki 5.1 · custom extensions · custom skins · PageForms · Scribunto and Lua · VisualEditor · AbuseFilter · OATHAuth · maintenance scripts
Shopify · Shopify REST and GraphQL · WordPress · WooCommerce · Joomla · e107 · IP.Board
Docker and docker compose · nginx · php-fpm · Apache with FastCGI · VPS · Coolify · TLS and HSTS · Content Security Policy · Vitest · Playwright with Chromium · SQL tests · axe-core · Chrome DevTools Protocol · Core Web Vitals · dependency-cruiser
Wikidata and SPARQL · KvK API · PDOK and BAG · Peppol and EN16931 · Mollie · Resend · iCal · DigiD · eIDAS 2.0 and the EUDI wallet
The route
An hour on what is there and what it has to become. Free of charge.
For a migration I rebuild your environment offline first. Also free of charge.
A fixed price per phase, with what you get in each one. No open end.
In steps, with something working to look at after each one.
Documentation, tests and handover. Maintenance per month if you want it.
Questions that keep coming
You do. The code sits in your own repository with its full history. At delivery you also get the documentation, the running tests and access to server, database, domain and certificates, plus a handover that says what is not finished yet.
That depends on what is in the database, and nobody knows that in advance. So I rebuild your environment offline first. After that test I know which steps are needed and can give a schedule that holds.
Then I stop and we talk before more hours go into it. Working in phases exists for this: after each phase there is something that works and you can decide whether we continue.
Most of the work happens remotely and that works well. For an intake, a delivery or a difficult session I come over when that is better.
Also available via rbck.nl
Alongside custom projects, I offer competitively priced, personal hosting for small entrepreneurs and SMEs via rbck.nl. No unnecessary frills or endless packages. Just fast, secure hosting with support from someone who actually understands your website.
rbck.nl · tailored hosting