LiveSL-03Faszienyoga mit Melanie

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.

Visit the project

SL-03Live

Faszienyoga

3 serious · Weaknesses I found and fixed myself

4 · Basic decisions with written reasons

Verified numbers

Weaknesses I found and fixed myself
3 seriousSource: docs/audit/, review of 4 Aug 2026
Basic decisions with written reasons
4Source: docs/adr/ — video provider, backend, deployment, payments
Files with automated tests
40Source: Project code, as of 11 Aug 2026
Individual changes to the software
125Source: git log, 5 Jul 2026 to 11 Aug 2026
Lines of code
22,640Source: Project code excluding third-party parts, as of 11 Aug 2026

Starting point

A course instructor wanted to offer her fascia yoga courses online. She did not want to use someone else's platform, which keeps part of the revenue and takes over the contact with her customers. So she needed her own shop with her own payment. Plus videos that cannot simply be passed on, and an admin area she can run herself.

Outcome

A running platform that is ready to sell. Every video plays through an address that is only valid for a short time. The data is backed up automatically to a second location. And the instructor can delete a customer's data herself when that customer asks for it. Before my review that was not possible.

Why not just use a ready-made platform

There are platforms where you can sell courses online. They keep part of the revenue for it. And they place themselves between the instructor and her customers. The customer data belongs to the platform, and the messages run through it. The better it goes, the more it costs.

With regular but modest revenue that is a constant burden. For a course instructor, the contact with her customers is also the most valuable thing she has. Hence her own platform.

This is explicitly not a recommendation for everyone. If demand is unclear or there are only very few sales, the ready-made platform is the cheaper answer.

Four decisions that determined everything else

Four decisions came before the build. For each I wrote down what the options were and why I decided the way I did. They were about the videos, the foundation of the platform, how new versions are rolled out, and the payment.

The most interesting one is about the videos. You can deliver videos yourself. In practice that is a bad idea. Every video has to exist in several qualities and also play on a weak mobile connection. So a provider that specialises in this takes care of it. It is located in Frankfurt.

The real question was protection. Copy protection can be bypassed and annoys the customers who paid. The solution is simpler: every playback gets an address that is only valid for a short time. Whoever forwards it forwards something that soon stops working.

For the technically minded: the technology behind it

Next.js with TypeScript strict, PostgreSQL with Drizzle, better-auth, Stripe Checkout, Bunny Stream with short-lived, server-signed URLs. Deployed with Docker Compose behind Caddy, database backups to Backblaze B2. Four architecture decisions are recorded as ADRs in the repository.

Four weeks after launch: the review against myself

On 4 August 2026 I reviewed the running system thoroughly. I did not look at what I had meant to build. I looked at what actually happens in operation.

I found three weaknesses I had built in myself:

There was no way to delete a customer. Not a single one. If a customer asks for her data to be deleted, the instructor could not have done that without me. An email like that can arrive at any time. It is fixed, and in a way that lets her do it herself.

The backups contained customer data in readable form. The automatic backups ran to a second location as planned. But email addresses and purchases were in them unencrypted.

A price change would have overwritten the past. Raising a course from €49 to €79 would also have changed old sales after the fact. For bookkeeping and refunds that is a real problem.

For every finding I wrote down what its consequences are, how sure I am, and which change fixes it.

Why I write this down publicly

Because it is the most honest part of this report. You can tell it as though everything was right from the start. Then nobody believes it, because nobody works that way. Or you tell how the mistakes were found.

Whether you can trust someone with a system is not decided by the number of mistakes. It is decided by whether they look for them themselves. Reviewing your own system like this again four weeks after launch is not a given. Precisely because the result is uncomfortable.

I worked the same way on the website of Malex Fotografie. There too the final review found a mistake I had built in myself. That is no coincidence, it is how I work.

What is left open

User numbers and revenue are deliberately not here. They belong to the client, not to me. What I can show: the platform runs, it is ready to sell, and the instructor can operate it without me.

Frequently asked

How do you stop purchased videos from being passed around?
Not with copy protection. It can be bypassed and annoys the customers who paid. Instead the videos sit with a provider that specialises in this. They only play through an address that is valid for a short time. If someone forwards that address, it soon stops working. That stops most people without getting in the way of normal use.
What does data protection mean in practice for a sales platform?
Above all, that someone can really delete a customer's data when she asks for it. That sounds obvious. But in the first version there was not a single way to do it. Beyond that: contracts with every service involved, locations in the EU where possible, and backups in which no customer data is openly readable.
Why your own platform instead of a ready-made course platform?
Because ready-made platforms keep part of the revenue and place themselves between the instructor and her customers. Even with few sales that quickly adds up to three figures a month. And the contact with customers stays where it belongs. If the maths works out differently, I recommend the ready-made platform. And I say so.
Why review a system you built yourself?
Because otherwise you never find your own blind spots. Four weeks after launch I reviewed the running system thoroughly. Can data get lost? Are the data protection duties met? Are the payments right? For every finding I wrote down the consequences and the fix. Three serious findings came out of it.

All work