Portfolio Site

Launched March 2026

Preview of this project | View on GitHub
AstroTypeScriptTailwind CSSGSAPCloudflare WorkersMDX

A static-first portfolio at hulsman.dev, built with Astro and hiding a fully interactive terminal behind a scroll animation.

Stack Choices

Astro over Next or Remix because this site has no client-side app state — pages are static HTML with islands of JS where interactivity demands it. GSAP ScrollTrigger over Framer Motion because it works without React and gives fine-grained control over scroll-pinned sequences; all animations degrade gracefully with prefers-reduced-motion. The contact form runs server-side on Cloudflare Workers with the Resend API — no separate backend, no CORS proxy, just an edge function co-deployed with the static assets.

The Terminal

The About section has a terminal card that plays a typing animation on scroll. After the animation finishes, the blinking cursor is real — you can type into it. It implements 42 commands in vanilla TypeScript: filesystem navigation over a virtual filesystem (ls, cd, cat resume), unix staples (grep, head, tail, wc, sort, env), fun stuff (cowsay, sl, matrix, neofetch), and routing commands that actually navigate the site. Pipes work end-to-end (cat resume | grep TypeScript | wc -l), alongside tab completion, command history, and aliases. Mobile input uses a transparent overlay with touch gesture detection to separate taps from scrolls — reliably opening the software keyboard across Android and iOS was the hardest part of the build.