Ga naar de hoofdinhoud
BVDNET
Arnhem · websites & automatiseringBVDNET
← moodboard
Curriculum Vitae

Berend van Dijk,
Wie er komt bouwen.

Full-stack developer · TypeScript, Python & AI-agents

Arnhem · berend@bvdnet.nl

Profiel

Developer sinds medio 2025, daarvoor CNC-verspaner en Apple-reparateur bij Coolblue. Sindsdien bouwde ik drie websites voor twee opdrachtgevers en drie eigen producten, allemaal live, in TypeScript/Next.js en Python/FastAPI.

Ik begin bij de vraag wat iets moet doen en voor wie, en werk eraan tot het klopt. Het mooiste vind ik de stap van idee naar iets dat mensen echt gebruiken.

Werken met AI-agents
  • Context in de repo. Instructies, skills en controles staan in de repo's. AGENTS.md routeert elke agent naar alleen de context voor zijn taak, en een aparte repo verdeelt het werk over de vijf sites.
  • Tegelijk. Elke taak krijgt een eigen git-worktree en branch, zodat meerdere agents naast elkaar aan één site werken, of dezelfde verbetering op vier sites tegelijk doorvoeren.
  • Pull request. Een agent levert zijn werk op als pull request, met de uitkomst van de controles erin. Ik kijk mee terwijl hij werkt. Liep hij zonder toezicht, herken ik het werk niet of lopen er veel tegelijk, dan review ik de pull request regel voor regel.
  • Los van het harnas. Ik richt het zo in dat het harnas niet uitmaakt: Claude Code, Codex, Gemini of elke andere agent die een repo kan laden, werkt er per repo mee, lokaal of in de cloud.
  • Ook geprobeerd: volledig autonoom. In juni 2026 bouwde ik tien agents (Google ADK, Gemini) die op vier sites zelf problemen vonden, een coding-agent aanstuurden en het resultaat samenvoegden: 120 van 152 pull requests in twee weken. De merge-regels bleken te ruim en het systeem vroeg meer onderhoud dan de sites; nu merge ik zelf.
Projecten

Voor klanten

FinancieelSlimleven.nl

financieelslimleven.nl →

Klantproject · dec 2025 – heden

Site van een onafhankelijk hypotheekadviseur, met rekentools, e‑books en een leeromgeving die bezoekers naar een gratis oriëntatiegesprek leiden.

Next.js 16TypeScriptSanityResend@react-pdfVitestVercel
  • Vier rekentools, van box 3 tot vermogensopbouw, die de uitkomst als pdf meegeven. Na een download volgen de mails vanzelf; de teksten beheert de adviseur in het CMS.
  • Regiopagina's met cijfers van het CBS. Valt het CBS weg, dan verdwijnt alleen dat blok; de pagina en de build blijven staan.
  • Toen het CRM van de klant de facturatie overnam, heb ik de eigen betaalkoppeling weer verwijderd: ruim 8.000 regels minder om te onderhouden.

MDV Capital

mdvcapital.nl →

Klantproject · juli 2026

Site voor een ondernemer die winstgevende mkb-bedrijven met een opvolgingsvraag overneemt. Binnen een week van eerste gesprek tot livegang.

Next.js 16TypeScriptTailwind 4React Three FiberSanityAttioVercel
  • Een draaiende 3D-wereldbol die nooit op de server rendert, niet laadt bij de instelling ‘minder beweging’ en stilstaat zodra hij uit beeld is.
  • Het contactformulier meldt pas succes als de mail echt is geaccepteerd, en zet de aanvraag tegelijk als contact met opvolgtaak in het CRM.

Max Styling

maxstyling.nl →

Klantproject · sep 2026

Site voor een maatkledingservice, met rekenhulpen voor de kosten per keer dragen en het garderobebudget. Tweede opdracht van dezelfde klant als MDV Capital.

Next.js 16TypeScriptSanityAttioResendVercel
  • Eén aanvraagformulier waarvan elk deel als eigen record in het CRM landt: contact, deal met budget, terugbeltaak en notitie. Een test faalt als een deel geen bestemming heeft.
  • Alle 34 pagina's statisch; layoutverschuiving gemeten en tot vrijwel nul teruggebracht, en een font-preload die bij meting niets opleverde weer teruggedraaid.

Eigen producten

MaviCats.com

mavicats.com/gearbase →

Eigen project · 2026

Site voor liefhebbers van Sony Mavica-camera's, met een database van 38 modellen om naast elkaar te leggen. Kleine community; technisch mijn grootste backendproject.

PythonFastAPISQLAlchemyAlembicPostgreSQLNext.jsCloudflare
  • Python-backend met 89 tabellen, als container op Cloudflare in vijf rollen: API, cron en drie wachtrijverwerkers, onder meer voor AI-moderatie van beeld en tekst.
  • Elke pull request krijgt een eigen databasebranch voor de migraties. Sinds een migratie ongemerkt vijf indexen in productie liet vallen, draait er ook een driftcontrole.

BVDART.nl

bvdart.nl →

Eigen label · 2025 – heden

Tweetalige webshop voor gesigneerde, genummerde prints van mijn eigen code-gegenereerde kunst, met een 3D-galerie waar je zelf doorheen loopt en een lab met 14 beeldtools.

Next.js 16TypeScriptSanityStripeResendVitestPlaywright
  • De galerie draait op een eigen 3D-engine in alleen CSS, zonder 3D-library: botsing met de muren, besturing met muis en toetsen, en alleen tekenen wat in beeld is.
  • Stripe-betalingen waarbij de webhook elke betaling precies één keer verwerkt, de oplage bijwerkt en de factuur als pdf mailt.

BVDNET.nl

bvdnet.nl →

Eigen bedrijf · 2025 – heden

Tweetalige site van mijn bedrijf in websites en AI-automatisering, met een prijsindicatie, een blog en een AI-woordenboek van 171 begrippen met bronvermelding.

Next.js 16TypeScriptnext-intlSanityResendVitest
  • Prijsindicatie waarin een bezoeker zelf samenstelt wat hij nodig heeft en ziet wat dat ongeveer kost, afgeleid van de pakketprijzen.
  • Eigen A/B-testopzet: de server wijst varianten toe en alleen pagina's met een lopende test zetten een cookie, zodat de rest van de site statisch blijft.

In ontwikkeling

MaviCats Game

gesloten bètaopen de CSS-3D-galerie →

Eigen project · 2026

First-person fotografiespel in de browser. Je fotografeert verborgen wezens met nagebouwde Sony Mavica-camera's; het model bepaalt de zoom, de zoeker en hoeveel foto's er op de floppy passen. Tien gebieden, co-op voor twee tot vier spelers.

TypeScriptReactThree.jsViteDurable ObjectsWebRTC
  • Begonnen op een eigen 3D-engine in CSS. Metingen lieten zien dat 84% van de frametijd in de browser zelf zat, niet in het spel; daarom overgestapt op Three.js, waarbij 88% van de code ongewijzigd meeging.

Mazeshift.com

bètamazeshift.com →

Eigen project · sep 2026

Een klassiek doolhofspel met verschuivende gangen in de browser, in zeven spelvormen: tegen de computer, met z'n tweeën op één apparaat of tegen anderen via de server, met ratings, toernooien en een dagelijkse puzzel.

TypeScriptHonoCloudflare WorkersDurable ObjectsPostgreSQLThree.js
  • Een openbare agent arena: Claude- en GPT-modellen spelen via de API tegen elkaar, met een Elo-ranglijst en de notities die elke agent bij zijn zetten maakte.
  • Eén regelmotor zonder afhankelijkheden, met toeval alleen via een seed, gedeeld door de server, de computertegenstanders en de agents, die zonder browser spelen.
Vaardigheden
Programmeertalen
TypeScriptJavaScriptPythonSQLBash
Frontend
HTMLCSSReactNext.jsTailwind CSSThree.js
Backend
Node.jsFastAPIHonoREST APIsWebSockets
Data
PostgreSQLSQLAlchemyAlembicBigQuerySanity CMS
Cloud
CloudflareVercelGoogle Cloud
DevOps
LinuxGitGitHub ActionsDockerTerraform
Testen
VitestpytestPlaywrightaxe
AI
Claude CodeCodexGeminiMCPGoogle ADK
Werkervaring
  • Zelfstandig developerBVDNET, Arnhem2025 – heden
  • Leerling CNC-verspanerGoorsenberg, Nijmegen2023 – 2024
  • Apple-reparateurCoolblue, Arnhem2019 – 2022
  • Eerdere functiesDiverse werkgevers, Arnhem2008 – 2019
Opleiding
  • Communication & Multimedia DesignHAN University of Applied Sciences, Arnhem2019 – 2021
  • Muziekcompositie & -productieHogeschool voor de Kunsten Utrecht (HKU)2013 – 2014
  • VWO, Economie & MaatschappijStedelijk Gymnasium Arnhem en Arentheem Thomas a Kempis2006 – 2013