·7 min read

Fitness app development case study: MorfoFit, from website to App Store

Fitness app development case study: site, subscriptions and iOS/Android app for a Pilates video platform. What I built, with dates, and what I'd change.

Case studyFitness app developmentWeb development

Abstract render on a black background: a glass tile with a neon phone and play button linked by light lines to smaller tiles for a padlock, a card, a video and a renewal arrow

Short answer

This is a fitness app development case study: MorfoFit, Elena Magoula's Pilates subscription platform with a video library, built in Greece between 30 July and 22 September 2026. I built the website, the payment system and the admin panel, and I took the app into the App Store and Google Play. Every date below comes from the project files. I don't publish sales figures, because they belong to the client.

At a glance

ClientMorfoFit, morfofit.gr
Duration30/07/2026 to 22/09/2026
WorkWebsite, admin panel, card subscriptions, video protection, server move, iOS and Android release
WebsiteNext.js, TypeScript, custom admin
BackendNode.js, Express, PostgreSQL (existing, extended)
AppFlutter, iOS and Android (existing, finished and released)
PaymentsViva Wallet on the web, Apple and Google Play in the app
HostingDocker on a dedicated server, site behind Cloudflare

The problem

When I started on 30 July 2026, two pieces already existed, written by another developer: an Express backend on PostgreSQL and a Flutter app. The app wasn't in any store. There was no public website.

Before design or payments, I reviewed what was there. A few issues turned up in the old code, and I fixed those first.

Fitness app development: what I built

Content locked on the server

The server checks the subscription before it returns a workout, a recipe or an article. Without one, you see the title and cover, not the material. On 24 August 2026 I moved all 56 videos that existed then to encrypted HLS streaming with AES-128, with a link signed on every request. Open the file straight in a browser and the server answers 403.

A Next.js site with a library by level

The site has a training library (beginners, more advanced, pregnancy), nutrition with recipes, and psychology articles. A fourth section, a 24-chapter guide, went in on 21 September. Titles, categories and prices come from the database. The site went public on 1 September 2026 at 14:00.

An admin panel so Elena doesn't need me

Elena uploads videos, writes articles and changes page images from /admin. The editor only accepts what the app can also show, so an article looks the same on the site and on a phone. Since 3 September new material publishes itself every Tuesday at 08:00 unless she picks another time.

Card subscriptions and my own renewal engine

On the website, payment runs through Viva Wallet. Renewals, plan upgrades and refunds update access automatically. If a card fails, the subscription gets three days' grace with one charge attempt a day. Live payments opened on 14 August, after I'd tested every path with real money. I also set up Stripe as a second provider in test mode. Today only Viva charges.

One subscription, three checkouts

A subscriber can pay on the website, in the App Store or in Google Play. Every purchase lands in one table, and the server verifies each Apple and Google Play Billing receipt before it opens access. Someone who paid on the site gets into the app with the same account.

Moving off Railway

On 30 August I moved the backend and database from Railway to the dedicated server on Docker where the site already ran. The same day I ran the full path in production with a real card: buy, upgrade, cancel, refund, buy again. Everything passed.

The app in the stores

On 10 September I took over all the app work, store submission included. I added push notifications, Greek on the screens, and a paywall that shows the price the store returns. Apple approved the app on 15 September. It went public on Google Play on 22 September.

The MorfoFit app's notification settings in a store screenshot, in Greek: toggles for notifications, meal and workout reminders with their times, weekly progress and new content Each kind of reminder switches off on its own, so a subscriber keeps only the ones she wants. The app is in Greek.

Timeline

DateWhat happened
30/07/2026Code review of backend and app, proposal
31/07/2026Approved
02/08/2026First fixes to the existing code
03/08/2026First site pages running on real data
05/08/2026Viva subscription end to end in the sandbox, with automatic renewal
14/08/2026Live payments open
24/08/2026Encrypted streaming on all 56 videos
30/08/2026Backend and database off Railway, full production test
01/09/2026Site public, 14:00
03/09/2026Scheduled publishing of new material
10/09/2026Took over the app
13/09/2026First push notification on an iPhone
14/09/2026Apple and Google purchases verified end to end
15/09/2026Apple approves the app
17/09/2026Renewal engine charges a real card in production
22/09/2026App public on Google Play

What worked

The most useful thing I did was review the code I inherited before writing my own. Whatever was off got fixed before I built anything on top of it.

Testing with real money was worth every euro. Viva's sandbox doesn't show everything, and a real card caught problems the first customer would otherwise have found.

One table for every subscription was the right call. When Apple, Google and Viva all write to the same place, "does she have access?" has one answer.

And the admin does its job: material goes up and gets scheduled without anyone calling me.

What I'd do differently

More checks before launch

A few issues around the site launch and the first store submission were found and fixed. Next time the site gets its own account from day one, and I read the store rules before I send the app in.

Start the store paperwork with the code

Apple verifies the developer account before it makes an app available in the EU. That step has nothing to do with code, and it took longer than all the app work. It's the part I underestimated most. Next time I start it the day the developer account opens.

An alert when something stops quietly

On 22 September I found that if the renewal engine stopped, we wouldn't know. I added a heartbeat that logs what each pass did. That belonged there from the first charge.

FAQ

How long did the build take?

33 days from the code review on 30 July 2026 to the public site on 1 September. The app went public on Google Play on 22 September.

Do you need an app, or is a website enough?

A website is enough to start. An app adds notifications and in-app purchase, but it also brings Apple's and Google's rules and fees. Here the site shipped first and the app followed.

Why Viva Wallet and not just Stripe?

Viva is Greek and takes the cards and Apple Pay that subscribers here use. Stripe is in the code as a second provider, switched off, in case it's needed.

Can someone share the videos?

Not easily. Each video plays over an encrypted stream, and the link is signed with the token of the account that asked for it. The file won't open straight in a browser.

Summary

MorfoFit, a Pilates subscription platform with a video library: a Next.js website, Viva Wallet, Apple and Google Play payments, and a Flutter app for iOS and Android, by Panagiotis Karampetsos. The site went public on 1 September 2026 and the app on Google Play on 22 September 2026.

If you're thinking about something similar for your own material, tell me what you have today. More builds are on the portfolio page, and the blog has the write-ups. For how the video streaming works, see Apple's HTTP Live Streaming documentation.

PK
Web developer, SEO consultant, and AI automation specialist based in Heraklion, Crete.

Got something to automate?

AI agents, chatbots, websites, or SEO. One email gets you a straight answer about scope and pricing.

Get in touch