Launching devillers.nl v4

March 7th, 2026 · 4 min read

Disclaimer: This blog post was generated by OpenAI GPT 5.3 using Codex and serves primarily as a summary of my vibe coding session to overhaul this website.

Today I am launching the fourth iteration of my personal website: devillers.nl v4.

This rebuild was not just a visual refresh. The goal was to modernize the foundation while preserving the value of everything that already worked: content, URLs, and discoverability.

Chopping wood with Generative AI

For this iteration, Codex did the majority of implementation work: scaffolding, migration, refactors, route-safe updates, UI iterations, and repeated polish passes based on prompt-by-prompt feedback.

I acted as product owner and reviewer: setting constraints, steering design intent, and tightening the result through iterative direction.

Most importantly, I was able to redo the entire website in under 2 hours with minimal human intervention. AI is most definitely a game changer for the tech industry.

That collaboration model made it possible to move quickly without skipping engineering rigor.

I used Playwright to maintain a tight feedback loop with Codex throughout the rebuild. I guided Codex to work iteratively in small steps and verify each change after every iteration using Playwright. Playwright is also great when you want the LLM to visually inspect examples on the internet.

Guiding principles for the overhaul

The v4 migration followed a clear set of constraints from start to finish:

  • Keep the same Next.js + MDX model, but upgrade to current package versions
  • Reuse all existing content from the old website
  • Preserve public URL structure for SEO (/, /about, /blog, /blog/[slug], /work, /work/[slug])
  • Replace Chakra UI completely with Tailwind CSS and custom components
  • Keep the design typography-heavy, minimal, and mobile-friendly
  • Support light mode, dark mode, and system preference with a manual toggle
  • Keep heading/body typography consistent: Noto Serif + Roboto
  • Keep the primary visual identity centered around #672a7b

In short: new codebase, familiar content, stable routes.

What changed

The implementation touched nearly every layer of the site:

  • Full App Router architecture for pages and content rendering
  • New Tailwind-first design system and component library
  • Refreshed home page and cleaner About page
  • Updated Work and Blog index headers and card interactions
  • Better mobile behavior across key layouts
  • Route-level previous/next navigation for Work and Blog detail pages
  • Carousel updates including overlaid controls and mobile swipe gestures
  • Syntax highlighting for code blocks using PrismJS in MdxCodeBlock
  • Social links and iconography updates across landing, About, and footer
  • Asset compatibility fixes for legacy/broken historical paths
  • Route extraction and old-vs-new link verification work to reduce regressions

Tech stack

v4 currently runs on:

Closing

v4 is intentionally simple. The design gets out of the way, the writing stays central, and the technical foundation is much easier to extend.

This is exactly what I wanted from the fourth iteration: less noise, more clarity, and a codebase that can keep evolving.

Version history summary

VersionReleasedTech stackShort analysis
v12014GitHub Pages + Jekyll 1.5.1, Redcarpet Markdown, Pygments syntax highlighting, Liquid templatesBlog-first static site with simple Jekyll structure and custom CSS. Lean and content-focused (8 posts).
v22015GitHub Pages + Jekyll 3.8.5, Kramdown + Rouge, Sass, Travis CI + html-prooferExpanded from a pure blog into a bilingual business + blog site (en/, services/projects/contact sections), with stronger build/deploy discipline and broader content (14 posts).
v32022Next.js 12.1.5, React 18, TypeScript 4.6, Chakra UI + Emotion, MDX blog pipeline, ESLint + PrettierMajor architecture shift from static Jekyll to a typed React app. Content moved to MDX blog posts (25 files), with modern frontend tooling and richer UI composition.
v42026Next.js 16.1.6 (App Router), React 19, TypeScript 5, Tailwind CSS 4, next-mdx-remote, next-themes, ESLint 9Full modernization of v3: moved from Pages Router + Chakra to App Router + Tailwind, reorganized content into src/content (25 blog posts, 9 work entries), and simplified typed utilities.