Recent Work / Whosurphysio
Trust before contract
2025–2026
A freelance case study about a website I gave away, a client who insisted on paying me anyway, and the three projects that came out of it.
Solo freelance project for whosurphysio, a physiotherapy practice in Frankfurt am Main. Concept, design and full-stack development for the website, plus a custom PDF editor tool built so the client can make his own content.
"I want to pay you for your work, obviously"
We were sitting in his practice in Frankfurt. I had my laptop with me to walk him through what I had built. Before I could open it, Julian Klug said the one sentence I had not prepared for:
“Ich will dich für deine Arbeit natürlich auch bezahlen.”
I want to pay you for your work, obviously.
I had never brought up money. Not once, in a year and a half.
The first website I built for him had been free. Not discounted, not a trial, free. I was starting out as a freelancer and I wanted one real client with one real business depending on the outcome. He was the older brother of a mutual friend, he had just built up a physiotherapy practice, and he needed a site.
A year later he came back with a new brand, a bigger idea of what the site should do, and a number he had decided on himself.
Where it started: four weeks, one page, no invoice
The first version was a one-pager, built in Webflow, about a year and a half ago. Four weeks of work. Its job was modest and I kept it modest: exist, be findable, look like a practice someone would trust with their back.
Working for free was a decision, not a fallback. What I wanted out of it was the thing you cannot get from a self-initiated portfolio project: a deadline someone else cares about, feedback from a person who pays rent with the result, and the experience of handing something over that has to keep working when I am not looking at it.
What it bought him was equally specific. He got to find out how I work before he had any money at stake. How fast I answer. Whether I disappear after launch. Whether I explain things or hide behind vocabulary.
The free site was not a portfolio piece. It was a year-long reference check that neither of us called a reference check.
Then nothing happened for a year. He treated patients, I built other things. That gap matters to the story, because it means the second project was not momentum. It was a decision he made after living with my work for twelve months.
What changed: a new position the old site could not carry
When he came back, the practice had moved. Not physically. Positionally.
He had repositioned away from the clinical, sterile register that most physiotherapy communication defaults to, toward something closer to how his patients actually experience the room: people who feel genuinely comfortable there. He works with self-payers only. His patients skew under 40, a lot of them athletes. A brand designer had already delivered the new identity, and my job started downstream of that: the visual language existed, the website did not match it.
There was a second gap, and this one was about content. He wanted to reach his community with material that goes deeper than a caption. Concretely: content that helps people do their exercises properly at home, between appointments. That is not a format Instagram is built for. It is too long, too structured, and it needs to still be findable in six months.
So the site had three jobs, and they were not equally visible:
- — Carry the new positioning outward, consistently, on every page.
- — Reach more self-paying patients in Frankfurt.
- — Host content with actual depth, published by him, without me in the loop.
That third job is the one that shaped most of the technical decisions further down. A website you have to call your developer about is a website that stops being updated in month four.
The decision that shaped everything: code instead of a subscription
Three options were realistic, and I put all three in front of him.
Stay in Webflow.
Fastest path, and he already had the account. But the ceiling arrives early: the layouts I wanted for the new positioning kept fighting the template logic, and the subscription is a permanent line item on a young practice's cost sheet.
WordPress.
Solves the publishing problem cheaply and everyone knows it. It also brings a plugin surface, an update burden, and a performance baseline I would have spent the whole project fighting.
A custom build.
Slowest to start, and it puts the responsibility for everything on me. It was also the only option that gave him what the repositioning actually required.
I built it in React, Vite and Tailwind, with Supabase as backend, auth, storage and CMS in one, and TipTap as the editor for his articles. Three reasons carried the decision:
- — Freedom. The home page is built around a showreel, which is an unusual front door for a practice site and exactly right for a positioning that is about how the room feels. No template had to agree with that.
- — SEO control. Full control over structure, markup and performance, rather than whatever the platform emits.
- — Cost. The monthly Webflow subscription disappears from his books entirely.
Two decisions inside the build are worth naming, because they are the kind of thing clients never see and always benefit from. The admin area loads only when it is needed, which took the bundle for public traffic from 767 KB down to 420 KB, roughly 117 KB gzipped. And the legal layer is done properly rather than pasted: Impressum under §5 DDG and §18 MStV, a DSGVO privacy policy, and a cookie notice that actually stores consent.
A subscription is a decision someone else makes for you, every month, forever. Owning the code is not about ego. It is about who gets to decide next year.
Real reviews, because a claim is not evidence
The testimonial section could have been ten minutes of work. Copy the nicest Google reviews into a JSON file, done, nobody would ever check.
I connected the Google Places API instead and pulled the reviews live, capped at five because that is what the API returns. Objectively more effort for a result that looks identical in a screenshot.
It is not identical in substance. A typed-out testimonial is a claim the practice makes about itself. A live review is a fact anyone can verify in two clicks, and it keeps updating without either of us touching it. His patients already write reviews. The site should simply stop pretending it curated them.
Honest client communication is not a value you put on the about page. It is a set of small technical decisions nobody asks you to make.
From one freebie to a tool he owns
Partway through, he asked me a small question: could I design the layout for a freebie he wanted to hand out on Instagram, one of those guides that walks people through exercises at home.
I said no, and offered something else instead.
The freebie was not a one-off. It was the first instance of a format he intends to keep producing, because it is the same content strategy as the blog: help people train properly between appointments. If I design the first one, he comes back for the second and the twelfth, and every single one costs him money and waits on my calendar.
So I built him a PDF editor instead. Drag and drop, with a component system, so he assembles the layouts himself in the brand he already paid a designer for. He makes his own freebies now.
Designing one handout would have made me necessary. Building the editor made me useful. Only one of those is worth paying for twice.
He named the price for that one too, the same way he had for the website. Which is, in a way, the whole case in one detail: the second time a client sets your price without being asked, it is not luck anymore.
What I take from this
Three paid pieces of work came out of this client. I never pitched, never sent a cold email, never named a price. That is a nice result and a terrible strategy, and I want to be precise about which part of it actually generalises.
Working for free is not the lesson. Plenty of free work simply ends as free work. What made this one convert was that the first step was small enough for him to say yes before he had any reason to trust me, and finished enough that living with it for a year answered every question he might have had about working with me. Free was my version of that first step, because I had nothing else to offer at the time. A fixed-scope, fixed-price first project does the same job with far less risk on my side, and that is how I run it now.
The second thing I take from it is quieter. I did not design a website here. I designed the conditions under which someone else keeps a website alive: a blog he publishes to himself, a tool that makes his own material, no subscription to cancel, no agency to phone.
The cheapest client to win is the one you already have. I did not plan that. I just did not send an invoice for the first one.
whosurphysio, physiotherapy practice in Frankfurt am Main · Role: concept, design and development · Scope: website plus a custom PDF editor tool · React, Vite, Tailwind CSS, Supabase, TipTap, Google Places API · Brand identity by an external brand designer, 2025 to 2026.