Role
Design and development
Period
2026
Technologies
Astro, TypeScript, WebGL, React, Qwik, Svelte, CSS

Context

I wanted a site that works as a professional showcase and, at the same time, as a place to try the latest web technologies without asking a client for permission. That is why the site itself is part of the proof: it matters as much as the content it shows, from performance to code quality.

The main pages (experience, projects, contact) are sober and almost JavaScript-free. Everything heavy or experimental lives in the /lab, in islands loaded only when needed.

What I did

  • Static HTML by default. Astro generates the pages ahead of time; React, Svelte and Qwik only appear in the interactive islands, loaded when they become visible.
  • Bilingual from day one. Italian without a prefix and English under /en/, using Astro’s i18n routing, translated URLs, typed translation files (a missing key breaks the type-check) and Content Collections for the content.
  • WebGL hero. A hand-written WebGL2 shader, no libraries: contour lines over simplex noise. It loads when the browser is idle, pauses off-screen, respects prefers-reduced-motion and has a pause button; without WebGL2 it falls back to a CSS background.
  • Modern CSS instead of JavaScript. Light and dark themes with light-dark(), scroll-driven animations for the heading width, color-mix() for tints and View Transitions for navigation.
  • Variable typography. Self-hosted fonts (Bricolage Grotesque for headings, Hanken Grotesk for text, Geist Mono for labels), Latin subset and metric-matched fallbacks to avoid layout shift.
  • A lab made of independent pages. Each experiment has its own folder and can be added or removed without touching the rest:
    • a Smart TV demo in the browser, navigable with arrow keys, Enter and Back, with a dependency-free TypeScript spatial navigation engine;
    • the same demo rewritten in Qwik, with a counter of the JavaScript downloaded to compare the two versions;
    • Snake on canvas and Memory in Svelte 5.
  • A contact form without a public email. A serverless function sends the messages with Resend, protected by a honeypot field and an origin check. The address never appears on the site.
  • Hosting on Vercel, as a static site with a single function.