Home

Projects

Inside Bars

2025

What's on tonight in Berlin's bars — a live events map.

A web app (plus iOS/Android wrapper) for discovering bar events across Berlin, backed by Supabase and deployed on Vercel.

  • React
  • TypeScript
  • Vite
  • Tailwind
  • shadcn/ui
  • Supabase
  • TanStack Query
  • React Hook Form
  • Zod
  • Vercel
  • Capacitor
Hand-rolled OG previews for a single-page app
SPAs serve one HTML shell, so shared links to individual events all previewed identically. I wrote ~165 lines of Vercel Edge Middleware to inject per-event Open Graph tags at the edge — the exact problem Next.js solves natively, which is part of why I chose Next.js for this site.
Type-safe forms end to end
React Hook Form + Zod share one schema between client validation and the shape written to Supabase, so a field can't drift out of sync between the form and the database.
One codebase, three targets
Capacitor wraps the same React build into iOS and Android without a second codebase — a pragmatic trade-off: faster shipping, at the cost of fully native feel. Store releases are prepared but not yet published.
Live site ↗

BoulderSesh

2025

Log climbing sessions and find people to climb with.

A native iOS/Android app for bouldering: track sessions, and connect with other climbers. Built with Expo and Supabase.

  • React Native
  • Expo
  • React 19
  • TypeScript
  • Expo Router
  • NativeWind
  • TanStack Query
  • Supabase
Native sign-in with Apple and Google
Implemented platform-native authentication flows on top of Supabase Auth — including Apple Sign-In, which Apple requires when you offer any third-party login.
File-based native navigation
Expo Router brings file-system routing to React Native, so the app's navigation structure mirrors the folder structure — the same mental model as this Next.js site.
Styling that matches the web workflow
NativeWind runs Tailwind's utility classes in React Native, so styling stays consistent with how I build for the web.
Live site ↗

Foundations · 42 Berlin

Systems programming in C

42 Berlin is a peer-to-peer coding school with no lectures and no grades — you build everything from the ground up in C. This is where my fundamentals come from: memory management, concurrency, and algorithms, with no framework to hide behind.

minishell
A working Unix shell: parsing, pipes, redirections, env & signals.
philosophers
The dining philosophers problem — threads, mutexes, deadlock avoidance.
push_swap
Sort a stack with a limited instruction set in as few moves as possible.
pipex · get_next_line · ft_printf · libft
Core building blocks: process piping, buffered reading, a printf, a standard library.

All projects are on GitHub.