05 UI/UX 2026

This Portfolio Dieses Portfolio

The portfolio is the product. Built with a 6-role AI team.Das Portfolio ist das Produkt. Mit einem 6-Rollen-KI-Team gebaut.

Experience Systems + Design Lead + Dev Experience Systems + Design Lead + Dev

Designed and developed using a structured AI team workflow — Researcher, Systems Lead, Experience Systems Lead, Senior Programmer, Critic. Astro 5 with React islands, canvas animations, Framer Motion, bilingual content, and a blog. Mit einem strukturierten KI-Team-Workflow entworfen und entwickelt. Astro 5 mit React-Islands, Canvas-Animationen, Framer Motion, zweisprachigem Inhalt und Blog.

This Portfolio

A portfolio isn't just a showcase — it's an argument. Every design decision should demonstrate UX thinking. The challenge: build something that shows the process, not just the output. Without a client brief — which is the hardest brief of all. Ein Portfolio ist mehr als eine Galerie — es ist ein Argument. Jede Designentscheidung soll UX-Denken demonstrieren. Die Herausforderung: Prozess zeigen, nicht nur Ergebnisse. Ohne Client-Brief — das schwierigste Brief überhaupt.

~/work/lukasandvoss-com/process.md
Used a structured 6-role AI team: Researcher → Systems Lead → Experience Systems Lead → Senior Programmer → Critic. Each role documented its responsibilities and had to reference the previous agent's output. The Critic was required to raise at minimum 3 issues per review — and affected agents revised.

Architecture: static-first Astro 5 for maximum performance, React islands only where interactivity is actually needed. The only SSR exception is the contact form API endpoint. Everything else pre-renders.
6-Rollen-KI-Team: Researcher → Systems Lead → Experience Systems Lead → Senior Programmer → Critic. Jede Rolle referenzierte den Output des Vorgängers. Der Critic musste mindestens 3 Kritikpunkte liefern.

Architektur: statisches Astro 5 für maximale Performance, React Islands nur wo wirklich Interaktivität nötig ist.

Canvas code waterfall — the hero backdrop Canvas-Code-Wasserfall — der Hero-Hintergrund

typescript
// src/components/CodeRainBackdrop.tsx (simplified)
const CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789<>{}[]();=>';

const draw = () => {
  ctx.fillStyle = 'rgba(10,10,10,0.05)';   // trail fade
  ctx.fillRect(0, 0, w, h);

  ctx.fillStyle = '#f57a00';               // brand orange
  ctx.font = `${SIZE}px "JetBrains Mono"`;

  drops.forEach((y, i) => {
    const char = CHARS[Math.floor(Math.random() * CHARS.length)];
    ctx.fillText(char, i * SIZE, y * SIZE);
    // Probabilistic reset — each column resets independently
    if (y * SIZE > h && Math.random() > 0.975) drops[i] = 0;
    drops[i]++;
  });
};

const id = setInterval(draw, 50);
return () => clearInterval(id);

The semi-transparent fill creates the trail effect — each frame partially overwrites the previous, decaying older glyphs. No external library, no canvas framework. Die halbtransparente Füllung erzeugt den Trail-Effekt — jedes Frame überschreibt das vorherige teilweise und lässt ältere Glyphen verblassen. Keine externe Bibliothek.

Middleware: geo-hint cookie from Accept-Language header Middleware: Geo-Hint-Cookie aus Accept-Language-Header

typescript
// src/middleware.ts — runs on every request via Node adapter
function detectGeoLang(acceptLanguage: string | null): 'de' | 'en' {
  if (!acceptLanguage) return 'en';
  const tags = acceptLanguage
    .split(',')
    .map((s) => {
      const [tag, q] = s.trim().split(';q=');
      return { lang: tag.trim().toLowerCase(), q: q ? parseFloat(q) : 1 };
    })
    .sort((a, b) => b.q - a.q);
  for (const { lang } of tags) {
    if (lang.startsWith('de')) return 'de';
    if (lang.startsWith('en')) return 'en';
  }
  return 'en';
}

// Set geo hint cookie on first visit only
if (!existingCookies.includes('luka_geo=')) {
  response.headers.append('Set-Cookie',
    `luka_geo=${geoLang}; Path=/; Max-Age=86400; SameSite=Lax`);
}

German visitors get German by default on first load — before localStorage, before navigator.language. Priority: stored choice → server geo hint → browser language. Deutsche Besucher bekommen beim ersten Laden standardmäßig Deutsch — vor localStorage, vor navigator.language. Priorität: gespeicherte Wahl → Server-Geo-Hint → Browser-Sprache.

Astro 5 static site: canvas code waterfall hero, Framer Motion stagger throughout, bilingual EN/DE, blog with MDX + Shiki code highlighting, onboarding wizard with Resend email, 95+ Lighthouse across all metrics. Astro 5 Static Site: Canvas-Wasserfall-Hero, Framer Motion Stagger, zweisprachig EN/DE, Blog mit MDX + Shiki, Onboarding-Wizard mit Resend, 95+ Lighthouse in allen Metriken.

Audience

Zielgruppe

Founders and product leads evaluating a freelance developer. Also technical collaborators and recruiters from the dev/design community. They read portfolios critically — they know the difference between showing work and showing process.

Gründer und Produktverantwortliche, die einen Freelance-Entwickler evaluieren. Auch technische Kollaboratoren und Recruiter aus der Dev/Design-Community.

Positioning

Positionierung

The portfolio is the product. Every technical and design decision demonstrates the thinking it describes. You are not reading about the process — you are inside it.

Das Portfolio ist das Produkt. Jede technische und gestalterische Entscheidung demonstriert das Denken, das es beschreibt. Du liest nicht über den Prozess — du bist darin.

Tone of Voice

Tonalität

Direct, confident, and self-aware. Talks to a technical audience without excluding non-technical readers. Dry wit where appropriate. No false modesty, no overselling.

Direkt, selbstsicher und selbstreflektiert. Spricht ein technisches Publikum an, ohne Nicht-Techniker auszuschließen. Trockener Witz wo angemessen. Keine falsche Bescheidenheit.

Visual Direction

Visual Direction

Dark-first, code-aesthetic. Canvas animation as hero. Orange brand accent bridging both portfolio sites. Monospace labels for technical signalling. Generous motion without performance compromise.

Dark-first, Code-Ästhetik. Canvas-Animation als Hero. Orange Marken-Akzent als Brücke zwischen beiden Portfolio-Sites. Monospace-Labels für technisches Signaling.

// stack

  • Astro 5
  • React
  • Framer Motion
  • Tailwind CSS v4
  • MDX
  • TypeScript