Built, measured, evidenced

For every project: the starting point, my role and the outcome — every figure with its source. Where nothing can be evidenced, nothing is claimed.

  1. runningMalex FotografieSpring to June 2026, roughly 50 hours

    Why a photographer stayed invisible despite having an SEO plugin

    Malex Fotografie had an SEO plugin, nine city landing pages and almost no local visibility. The cause was not marketing but the foundation: two plugins cancelling each other out, every section written into the HTML three times, and city pages that were copies of the homepage. Rebuilt across twelve stages and roughly 50 hours, with measurable results.

    • 8.3 s → under 2.5 sLargest Contentful Paint, mobile (field)
    • 11.6 s → 7 sLargest Contentful Paint, mobile (lab)
    • 77 → 12 occurrences (−84%)display:none dead weight in homepage markup
    • WordPress 6.9.4
    • Kadence Theme + Blocks
    • Rank Math
    • W3 Total Cache
    • EWWW Image Optimizer
    • Schema.org / JSON-LD

    Read the case studyVisit the site

    • Home page with the core promise

    Home page with the core promise

    runningSL-01March 2026 to today, ongoing

    Getting a one-person SaaS through the WordPress.org review

    AudioLinter checks podcast and spoken-word recordings against the EBU R128 loudness standard and repairs them in one click — inside the WordPress editor. Behind it sit eight services in production and 36 shipped releases. The hardest part was not the audio processing but the official plugin directory review.

    • 353Downloads via the WordPress directory
    • ~7Days until approval in the directory
    • 36Versions shipped
    • FastAPI
    • Celery
    • PostgreSQL
    • Redis
    • MinIO / S3
    • ClamAV

    Read the case studyVisit the site

    • Home page with the core promise

    Home page with the core promise

    runningSL-02October 2025 to July 2026, three attempts

    Throwing away four months of my own work — and why it was right

    Rackd is a tournament platform where nobody has to install anything. Two discarded attempts as a Flutter app came first. On 11 June 2026 I wrote down the reasoning for abandoning my own codebase and starting over. This case study is about the decision, not the result.

    • 17Teams in the first tournament played
    • 37Players in that tournament
    • 35Matches played out
    • Next.js 16
    • React 19
    • TypeScript
    • Tailwind CSS 4
    • next-intl
    • Supabase (Postgres, Auth, Realtime)

    Read the case studyVisit the site

    • Home page with the course offering

    Home page with the course offering

    runningSL-03Faszienyoga mit MelanieSince July 2026, in operation

    A course platform with payments, protected video, and an audit against myself

    Faszienyoga mit Melanie has its own course platform ready to go: Stripe checkout, protected video delivery, participant data under the GDPR — instead of handing a revenue share and the customer relationship to someone else's platform. Four weeks after launch I audited the running system and found three issues I had built myself.

    • 125Commits
    • 22,640Lines of TypeScript
    • 40Test files
    • Next.js (App Router)
    • TypeScript strict
    • PostgreSQL 16
    • Drizzle ORM
    • better-auth
    • Stripe

    Read the case studyVisit the site

    • Home page with product preview

    Home page with product preview

    runningSL-04February to July 2026

    When the same manual work comes back every week

    Estate agencies maintain their properties in specialist software and then a second time on their own website. ImmoSync reads the standard export files those programs produce and keeps the website in sync automatically — each job in its own container that disappears afterwards.

    • 3Tenants in production
    • 207Processing runs
    • 27 Apr 2026Running continuously since
    • Node.js
    • Vue
    • Docker
    • Nginx
    • OpenImmo (XML)
    • FTP ingest

    Read the case studyVisit the site