// The technology · in depth · 2026

No WordPress.
Just personalized code.

No page builders, no plugin sprawl, no theme to fight. Every site is a hand-built application on a modern stack I know deep enough to bend. Here's exactly what runs under the hood — and why each piece earns its place.

The template route

WordPress & page builders

  • Plugin stacks you don't control or understand
  • Bloated markup, slow Core Web Vitals
  • Security surface that needs constant patching
  • Design boxed in by someone else's theme
The way I build

Personalized code

  • Every line written, read and owned by me
  • Lighthouse-tuned, fast by construction
  • Locked-down by design — no plugin lottery
  • Pixel-exact design with zero compromise
Nframework · the foundationVercel · 2016 · every site runs on it

Next.js — SSR & SEO, built in.

Every site is a Next.js app. Pages render on the server so the browser — and Google's crawler — receive complete HTML instantly, then only the interactive parts hydrate. I pick the render strategy per route: static where it can be, dynamic where it must be.

  • App Router & Server Components
  • SSG · ISR · SSR per route
  • next/image optimisation
  • Native i18n routing
  • Metadata & structured data
  • Edge-deployed on Vercel
render-strategy.ts
Static (SSG) — rendered once at build time. Served as flat HTML from the edge: the fastest a page can be. Used for marketing & content pages.
// what the crawler actually receives
<title>Nu — clean beauty, Antwerp</title>
<meta name="description"...>
<h1>Skincare, distilled.</h1>
LCP 1.1sCLS 0.00fully indexableOG tags
Sheadless cms · contentSanity.io · the client edits it themselves

Sanity — a dashboard built around the client.

Content lives in a Sanity Studio I tailor per client — decoupled from the front-end entirely. Editors update products, posts and imagery in a real-time interface; I query exactly the shape each page needs with GROQ. No developer in the loop for day-to-day edits.

Nu Studio· content lakePublished
Content
Products
Journal
Pages
Settings
Products · 24
Renew Serum
€48 · in stock
EN · NL
Calm Cleanser
€32 · in stock
Daily SPF 30
€29 · low stock
Night Balm
€54 · in stock
Title *
Renew Serum
Slug
/products/renew-serum
Hero image
drop · 1200×1500 · auto-CDN
Price (EUR)
48.00
Stock
128
Description · Portable Text
A featherweight vitamin-C serum that brightens and renews. Fragrance-free, vegan, made in Belgium.
query.groq
// fetch only what the page renders
*[_type == "product" && stock > 0]{
  title, "slug": slug.current,
  price, "img": image.asset->url
} | order(price asc)
result.json
[
  {
    "title": "Renew Serum",
    "slug":   "renew-serum",
    "price": 48,
    "img":    "cdn.sanity.io/…"
  }
]
Ganimation · the motion layerGreenSock (GSAP) · industry-standard

GSAP — motion on a timeline.

Every reveal, scroll chapter and hover flourish runs on GSAP. ScrollTrigger ties animation to scroll position and pins sticky sections; Draggable and MorphSVG make vector shapes grabbable and shape-shifting. It's the difference between a site that loads and one that moves — performance-budgeted, never gratuitous.

  • ScrollTrigger scenes
  • Sequenced timelines
  • Draggable interactions
  • MorphSVG shape tweens
  • GPU-only transforms
  • Reduced-motion aware
draggable-star.tsx
drag me  ·  tap to morph
// grab it, fling it, morph it Draggable.create("#star", { bounds: "#stage", type: "x,y", onClick: () => gsap.to("#star", { morphSVG: next, ease: "back.inOut(1.7)" }) });
Rui library · componentsCreated at Facebook (Meta) · 2013

React — the component model.

Born at Facebook in 2013, React is how the entire UI is built: small, composable pieces of state-driven interface. Write a component once, reuse it everywhere, and the view always reflects the data. It's the layer everything else plugs into.

  • Composable components
  • Declarative, state-driven UI
  • Hooks for logic reuse
  • Huge, battle-tested ecosystem
App.tsx
└─ <App>
  ├─ <Header>
  ├─ <ProductGrid>
  │  └─ <ProductCard> ×24
  ├─ <Cart>
  └─ <Footer>
3
useState
TSlanguage · type safetyMicrosoft · 2012 · JavaScript that scales

TypeScript — errors caught before they ship.

Every line is typed. The compiler knows the shape of your data, your props and your API responses — so whole classes of bugs are caught in the editor, not in production. It's documentation that can't go stale and a safety net that never sleeps.

  • Static type checking
  • Editor autocomplete & intellisense
  • Self-documenting contracts
  • Safe, confident refactors
cart.ts
type Product = { title: string; price: number; }; function total(items: Product[]) { return items.reduce((n, p) => n + p.price, 0); } // ✗ caught at compile time total([{ title: "Serum", price: "48" }]);
Type 'string'is not assignable to type 'number'.  ts(2322)
Tstyling · design tokensTailwind CSS · utility-first

Tailwind — design tokens, not stylesheets.

Styling happens in the markup with utility classes mapped to a single design system — spacing, color, type all pulled from shared tokens. The result is consistent by default, tiny in production, and impossible to drift because there are no orphaned CSS files to rot.

  • Token-driven utilities
  • Zero unused CSS shipped
  • Consistent spacing & scale
  • Responsive in one place
ProductCard.tsx
<div class="rounded-2xl p-6 bg-gradient border shadow-lg flex flex-col gap-2">
Renew Serum
Brightening vitamin-C, made in Belgium.
Add to cart · €48
// The supporting cast

The rest of the toolbox.

Everything else that ships on a typical build — chosen for the same reason: I know it well enough to own it.

NoNode.jsRuntime · APIs
StStripePayments · Twint
MMongoDBNoSQL · data
RxReduxState · cart
GQGraphQLTyped queries
LnLenisSmooth scroll
VVercelHosting · edge
i18i18nEN · FR · NL

Want this stack
behind your site?

From blank file to shipped product — on the exact tools above. Tell me what you have in mind.