Maastricht, Netherlands

Joeri (Bonapartov)
den Besten

Full-stack developer. I run product and technology at a defence-research startup and two businesses of my own. Most of the work is unglamorous automation: finding the thing a company does by hand every week, and making it stop being done by hand.

Now

Apr 2026
Co-founder & CPTO, HARDRADA
Defence-research startup. I co-lead with the CEO and own product direction.
Mar 2026
Owner, Bonapartov
IT automation and AI visibility for local business, on a platform I wrote.
Dec 2024
Owner, Blankies
Consumer e-commerce. My own shop, my own stock, my own bookkeeping.
Feb 2024
Volunteer, Landbouwbelang
Bar shifts and VJ visuals at a volunteer-run cultural venue in Maastricht.

Work

3

HARDRADA

Co-founder & CPTO
hardrada.eu

A defence-research startup selling supply-chain intelligence to governments and primes. On day one there were no product shots, no case studies and no revenue, so the site had to carry the entire argument by itself.

The centrepiece is an interactive European Defence Supply Graph: a scroll-driven network visualisation that surfaces chokepoints in the supply chain. I wrote the rendering layer on canvas with GSAP driving the scrub, plus a complete static fallback for reduced-motion, mobile and no-JS.

It shipped at 17fps in Firefox against 54 in Chrome. I isolated the cause with a CSS-toggle A/B harness run against production and found it in per-frame createRadialGradient calls, which Firefox rasterises on the CPU. Roughly forty of them per frame in the entity graph alone. Pre-baking the glows into sprites and caching the offscreen layers fixed it.

  • Bilingual EN and NL throughout, with the CMS driving both locales
  • Incremental static regeneration on the home route, which took the cold path off every request
  • Product direction, data acquisition and partner conversations sit with me alongside the build
17 → 50fps, Firefox
233 → 41ms p95 frame
600 → 180ms TTFB
5weeks, brief to live

Bonapartov Platform

Owner, sole developer
bonapartov.com

A multi-tenant platform that every client site runs on. Rather than build a one-off for each business, each capability is a module that switches on per tenant, so a client gets a shop or a booking flow without me forking anything.

Nineteen dashboard modules so far: store, leads, CMS, posts, email, files, documents, invoices, subscriptions, appointments, members, committees, messages, tickets, team, analytics, account, website and domains.

The part I am most pleased with is unglamorous. VAT resolves from the invoice date rather than being frozen onto the subscription, so when my own small-business exemption ends on 1 October it applies itself, including on contracts signed before the cutover. The rate lives in one function that every write path goes through.

  • Mollie for payments, Moneybird for invoicing, both reconciled server-side
  • Per-tenant store settings, so one client's VAT status can never leak into another's
  • Row-level isolation in Postgres, with the tenant resolved before any query runs
  • Deployed to EU regions only, self-hosted services on Hetzner behind Coolify

Blankies

Owner, sole developer
blankies.nl

My own webshop, not a client brief. Thirty-eight wool and mohair throws from European mills, with my own till, stock and books underneath it. I built it because running a shop is a different thing from delivering one, and that difference is hard to sell if you have never done it.

The storefront is bespoke rather than the stock module: custom product pages with a gallery and lightbox, cart, checkout, wishlist and reviews, reusing the platform's cart and SEO libraries but none of its components.

  • Homepage image payload cut from about 15MB to 2.5MB with no visible quality loss, mostly by converting background divs to responsive lazy-loaded images
  • Checkout proven end to end against live Mollie
  • Catalogue recovered from a defunct storefront's public backend after the original shop was frozen

Concepts

15 built

Three clients is a thin portfolio, and I got tired of that being the whole answer. So I invented fifteen companies and built them properly. Each has its own design system and none of them share a palette. They are fictional brands, but the sites are real work.

MaasvoltDeep tech, energy storageNo hero, no cards. A ruled grid where the numbers carry the pitch.
KiemveldAgri-biotech, phenotypingMulti-column setting, drop cap, marginalia and zero motion. A site that reads as print.
StelwerkIndustrial roboticsRobot cells for manufacturing, laid out as a horizontal panel track.
SluiswerkB2B SaaS, logisticsFreight visibility where the hero is the working interface itself.
Baken MedicalMedtech, implantsCochlear implants as a deck of full-viewport statements.
Werf VenturesDeep-tech investorAn investor whose entire site holds one register.
ProefveldClinical researchDecentralised trials, where the page itself is the timeline.
VeenwaardeClimate data, peatlandPer-parcel carbon measurement anchored on a generated map.
Bureau NagelArchitectureAn architecture practice showing drawings instead of renders.
Brouwer & WeijersLaw firmA law firm as a numbered document, rates included.
SteenzoutMaterials, bindersCement without the kiln, recipe published.
Studio MerelCeramics, webshopA studio shop where the work is drawn, not photographed.
ZeewachtMaritime, hydrographic surveyUncrewed seabed survey, cut on the diagonal.
Praktijk LichtveldPsychology practiceOne narrow column of prose, waiting time and rate stated up front.
Kantine KroonHospitalityA neighbourhood canteen as a poster. Loud, coloured and short.

Infrastructure

Two always-on Linux boxes and a VPS, joined over a private tailnet. Almost everything I know about operations I learned by breaking these and then having to fix them at an inconvenient hour.

  • Self-hosted on Docker and Coolify: password vault, document management, accounting, DNS filtering, monitoring, all behind one login
  • A three-machine compile cluster over icecc. 2.33× on heavy builds, measured, not estimated. One script brings it up
  • Backups that cover the databases and named volumes. The first version had been quietly backing up nothing that mattered for months
  • OOM hardening after a crash took out dbus and sshd and locked me out: earlyoom, a real swap file, /tmp off tmpfs
  • Everything in EU regions. Client data does not leave, and that is not a preference

Stack

Language
TypeScript in strict mode. No any, no suppressed errors.
Frontend
Next.js App Router, React, Tailwind, GSAP and canvas where it earns it, React Three Fiber when there is something to show in 3D
Data
PostgreSQL and Supabase, row-level security, migrations checked in
Infrastructure
Hetzner, Docker, Coolify, Linux administration, CI/CD, EU regions
Integrations
Mollie, Moneybird, transactional email, webhook-driven billing, MCP servers
Before software
Four years of CNC programming and TIG welding, turning to 0.001mm in duplex stainless and titanium
Languages
Dutch native, English fluent, Russian C1

Get in touch

I work on a few things at a time, so I am picky, but I answer everything. Email is best. Describe the problem the way you would to a colleague, not the way you think a developer wants to hear it.