Example Blog Post
This is an example blog card component with excerpt, tags, date, and read time.
Tokens, components, and patterns
Light and dark themes using Kent-inspired tokens. Toggle from the Navbar.
Background + text
Primary text and secondary text use semantic tokens.
Card
Card uses surface token.
Background + text
Primary text and secondary text use semantic tokens.
Card
Card uses surface token.
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.
Design System Lite tokens. All UI uses these; no hardcoded colors.
Background
background
Foreground
foreground
Muted
muted
Border
border
Accent
accent
Accent FG
accent-foreground
Primary
primary
Secondary
secondary
Destructive
destructive
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 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.
I build modern, performant web applications with TypeScript, React, and Node.js. Based in Munich, open to remote opportunities.
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.
fixed inset-0; does not affect page layoutDownload 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.
Minimal footer: GitHub, LinkedIn, Email, Download CV. Subtle border top, consistent spacing. Optional Imprint/Privacy links can be added when pages exist.
H1 (heading-1)
H2 (heading-2)
H3 (heading-3)
H4 (heading-4)
Body
The quick brown fox jumps over the lazy dog
Small (body-sm)
The quick brown fox jumps over the lazy dog
Design System Lite tokens: 8px, 12px, 16px, 24px, 32px (ds-8, ds-12, ds-16, ds-24, ds-32)
Shows title, problem/solution summary, stack tags, and links. Modern hover/focus states (subtle border, shadow).
Problem: Manual workflow was time-consuming. Solution: Built an automated tool that reduces setup time.
Problem: Data scattered across multiple sources. Solution: Centralized dashboard with real-time sync.
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.
Icon, title, and description. Used in the Values section.
This is an example value card component
Pills for tags and filters. Default (secondary), selected (primary), and accent variants. Used in BlogCard tags and /blog tag filters.
Default
Selected (filter active)
Accent variant
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.
Editorial, content-first layout: centered hero, meta (date • read time • tags), comfortable reading width (720px), vertical rhythm, and after-content sections.
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.
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";A quick reaction helps others discover useful posts.
Search and text inputs use design tokens: bg-input, border-border, focus:ring-ring. Spacing: px-ds-16 py-ds-12.