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 a good-looking website with nine pages for individual cities. Still, Google found little more than the homepage. The cause was not the marketing but the foundation: two add-ons cancelled each other out, and the city pages were copies of the homepage. I fixed that in roughly 50 hours. On a phone the page now appears in under 2.5 seconds instead of 8.3.

    • 8.3 s → under 2.5 sTime until the page appears on a phone (real visitors)
    • 11.6 s → 7 sThe same time in a lab test
    • 77 → 12 occurrences (−84%)Invisible dead weight in the homepage code
    For the technically minded: built with
    WordPress 6.9.4 · Kadence Theme + Blocks · Rank Math · W3 Total Cache · EWWW Image Optimizer · Schema.org / JSON-LD · WPCode · Apache Rewrite

    Read the project reportVisit the site

    • Home page with the core promise

    Home page with the core promise

    runningSL-01March 2026 to today, ongoing

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

    AudioLinter checks podcast and spoken-word recordings for even loudness and repairs them in one click, right inside WordPress. I built the product alone and look after it myself, 36 versions so far. The hardest part was not the audio. It was the review every add-on has to pass before it is allowed into the official WordPress directory.

    • 353Downloads via the WordPress directory
    • ~7Days until approval in the directory
    • 36Versions shipped
    For the technically minded: built with
    FastAPI · Celery · PostgreSQL · Redis · MinIO / S3 · ClamAV · Traefik · Docker Compose · Next.js · PHP (WordPress plugin) · FFmpeg

    Read the project reportVisit 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 attempts as an app came first, and I discarded both. On 11 June 2026 I wrote down why I was giving up four months of my own work and starting over. This report is about the decision, not the result.

    • 17Teams in the first tournament played
    • 37Players in that tournament
    • 35Matches played out
    For the technically minded: built with
    Next.js 16 · React 19 · TypeScript · Tailwind CSS 4 · next-intl · Supabase (Postgres, Auth, Realtime) · Docker · Caddy · GitHub Actions

    Read the project reportVisit 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 videos and a review against myself

    Faszienyoga mit Melanie has its own course platform ready to go. Participants pay right there, the videos cannot simply be passed on, and the data stays with the course instructor instead of someone else's platform. Four weeks after launch I reviewed the running system thoroughly. I found three weaknesses I had built in myself.

    • 3 seriousWeaknesses I found and fixed myself
    • 4Basic decisions with written reasons
    • 40Files with automated tests
    For the technically minded: built with
    Next.js (App Router) · TypeScript strict · PostgreSQL 16 · Drizzle ORM · better-auth · Stripe · Bunny Stream · Caddy · Docker Compose · Backblaze B2

    Read the project reportVisit 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 files those programs produce anyway and keeps the website up to date by itself. Every job is processed separately from all others. That way a fault in one agency's data cannot affect another.

    • 3Customers in operation
    • 207Processing runs
    • 27 Apr 2026Running continuously since
    For the technically minded: built with
    Node.js · Vue · Docker · Nginx · OpenImmo (XML) · FTP ingest · GitHub Actions

    Read the project reportVisit the site