Design System

Tokens, components, and patterns

Theme

Light and dark themes using Kent-inspired tokens. Toggle from the Navbar.

Light

Background + text

Primary text and secondary text use semantic tokens.

Badge

Card

Card uses surface token.

Link|Active nav
Dark

Background + text

Primary text and secondary text use semantic tokens.

Badge

Card

Card uses surface token.

Link|Active nav

Both columns use the same components; the right column is wrapped with class="dark" so dark tokens apply. Use the Navbar toggle to see the full site in each theme.

Color Palette

Design System Lite tokens. All UI uses these; no hardcoded colors.

Background

background

Foreground

foreground

Muted

muted

Border

border

Accent

accent

Aa

Accent FG

accent-foreground

Primary

primary

Secondary

secondary

Destructive

destructive

Accent Usage

Primary / Secondary

Accent button

Badge

Accent Badge

Active nav

ActiveInactive

Navbar

Auth placement: Sign in is not shown in the navbar (recruiter-friendly). Auth entry points appear only inside blog posts: "Sign in to comment" in the comments section and "Sign in to react" in the reactions block.

Hero & Scroll Arrow

Hero uses min-h-[65dvh] sm:min-h-[80dvh] for scroll affordance (smaller on mobile). ScrollArrow shows a down arrow with subtle bounce animation (hidden on mobile); it hides when the hero scrolls out of view (IntersectionObserver). Click scrolls to Featured Projects. Mobile: overflow-x-hidden, min-w-0 on flex children, viewport-fit=cover + env(safe-area-inset-top) for notch.

Full-Stack Developer

I build modern, performant web applications with TypeScript, React, and Node.js. Based in Munich, open to remote opportunities.

Mobile Navbar Overlay

Kent C. Dodds-style full-screen overlay on mobile. Resize to <768px or use device toolbar to test. The menu does not push page content; it opens as a fixed overlay.

Behavior

  • Fixed overlayfixed inset-0; does not affect page layout
  • Scroll lock — Background page cannot scroll while menu is open
  • Focus trap — Keyboard focus stays inside the menu
  • Close — X button, click outside, Esc key, or click a nav link
  • Thumb-friendlyTheme toggle and close in header (right); Download CV sticky at bottom

Bottom actions

Download CV is sticky at the bottom for easy thumb reach. Nav links use min 44px tap targets with bg-secondary for readability on the transparent overlay. Theme toggle is in the header (right side) for thumb reach.

Footer

Minimal footer: GitHub, LinkedIn, Email, Download CV. Subtle border top, consistent spacing. Optional Imprint/Privacy links can be added when pages exist.

Typography

H1 (heading-1)

The quick brown fox

H2 (heading-2)

The quick brown fox

H3 (heading-3)

The quick brown fox

H4 (heading-4)

The quick brown fox

Body

The quick brown fox jumps over the lazy dog

Small (body-sm)

The quick brown fox jumps over the lazy dog

Spacing Scale

Design System Lite tokens: 8px, 12px, 16px, 24px, 32px (ds-8, ds-12, ds-16, ds-24, ds-32)

ds-88px
ds-1212px
ds-1616px
ds-2424px
ds-3232px

Buttons

ProjectCard

Shows title, problem/solution summary, stack tags, and links. Modern hover/focus states (subtle border, shadow).

Example Project A

Problem: Manual workflow was time-consuming. Solution: Built an automated tool that reduces setup time.

Next.jsTypeScriptTailwind

Example Project B

Problem: Data scattered across multiple sources. Solution: Centralized dashboard with real-time sync.

ReactPostgreSQLPrisma

BlogCard

Shows title, excerpt, tags, date, and read time. Minimal card layout with hover states (subtle border, shadow). Used on /blog list and home Latest Articles.

ValueCard

Icon, title, and description. Used in the Values section.

Value Card

This is an example value card component

TagBadge

Pills for tags and filters. Default (secondary), selected (primary), and accent variants. Used in BlogCard tags and /blog tag filters.

Default

ReactTypeScript

Selected (filter active)

Design

Accent variant

Featured

Reactions

Heart-fill reaction: subtle gradient fill from bottom. Tap-friendly (44px min), minimal scale/opacity transitions. Signed-in users see count; guests see inline prompt.

Be first
12
1.2K
Sign in to react

Post Layout

Editorial, content-first layout: centered hero, meta (date • read time • tags), comfortable reading width (720px), vertical rhythm, and after-content sections.

Example Blog Post Title

5 min readDesignSystem

This block demonstrates the blog prose styling: comfortable line-height (1.7), max-width 720px for optimal reading, and consistent typography. Headings use the design system scale; links use the accent color.

Section Heading

The quick brown fox jumps over the lazy dog. Body text uses the body token with line-height optimized for readability.

const example = "code block";

Found this helpful?

A quick reaction helps others discover useful posts.

Form Elements

Search and text inputs use design tokens: bg-input, border-border, focus:ring-ring. Spacing: px-ds-16 py-ds-12.