Case studyConnected Hair
A hairdressing academy that runs like Netflix.
We moved 100+ video courses for hairdressers off WordPress onto a platform built from scratch: a streaming-style catalog, accounts and plans, protected video, search across course content, and an AI assistant that answers straight from the material.
connectedhair.com
- 105 video courses in the catalog
- 32 educators with their own pages
- 0.19s server response time (~1s on WordPress)
- 3,500+ video moments indexed in search
The Challenge
Connected Hair Academy, Poland's largest online education platform for hairdressers, ran on WordPress: a sprawling stack of plugins for memberships, payments and video, a site getting slower by the month, and an interface that couldn't keep pace with how fast the product was growing. The goal: a streaming-service feel, full control over payments and data, and zero downtime for existing members.
A catalog that feels like Netflix
Members browse courses the way they browse a streaming service: themed rows, hover-to-preview on every tile, a hero banner for new releases. Every course and every educator gets its own public page that works for SEO and sells access. One row, Fundamentals, does not sort itself: courses carry an editorial score for how foundational they are, so what a newcomer starts with is a decision, not a play counter.
- Rows for new releases, featured picks, most watched, and technique categories
- Course pages with a results gallery, chapters and a video preview
- Educator pages with a bio and their full course list
- Continue Watching, My List and ratings, Netflix-style
Course pages built to sell access
Every course gets a rich public page: a hero with a video preview, a results gallery, chapters with thumbnails and running times, and a ‘what you’ll learn’ section. All of it is visible to logged-out visitors, because that's what drives sales. Only members with active access can actually play the videos: every clip sits behind signed, expiring tokens.
Accounts, plans and payments
No passwords: sign in with a link or a code sent by email. Subscription plans, single-course access and a 48-hour course rental all run through one system, and an account is capped at two active devices so a login cannot quietly turn into a shared one. Payments run on Stripe: checkout, invoices and a client portal, and buyers do not have to register first, the account is waiting for them after the purchase. We moved the existing subscriptions across without asking a single customer to re-enter their card.
What a member sees after signing in
One place for everything: active access and what they started watching, the invoice list pulled straight from the accounting system with files to download, payment receipts for the people who do not need an invoice, their own devices, and payment management. The invoice file is served by an endpoint that checks the document belongs to the signed-in person before it sends anything, so swapping a number in the URL gets you nowhere.
Quizzes and certificates
Courses can end with a quiz. Pass it and the certificate issues itself, no admin in the loop. The certificate is a print-ready page members save as a PDF straight from the browser, so nothing has to be generated on a server.
Search and an AI assistant
Search indexes what educators actually say in the courses, not just titles. It understands intent and jumps straight to the exact minute of the exact lesson. On top of that, the Ask the Academy assistant answers questions using course material only and cites its sources, each one a click away from the right moment in the player.
More than courses
Around the academy sits a full content platform: 63 articles, 19 podcast episodes and the magazine archive, every one of them with its own page working for search. There is also a community forum, moved across with its people and its discussion archive, on a single sign-on with the academy. The whole site runs in Polish and English at full parity, 469 pages in total, with structured data for courses and videos and language annotations so search engines know what is what and in which language.
Two panels for the owner
Courses, educators, blog, quizzes and certificates live in one content panel (Payload CMS). Publishing a change automatically rebuilds and redeploys the site, no developer required. Next to it runs an operational panel: find any customer, see their access, plans, payments and invoices, grant or revoke a course, extend access by a set number of days. Every change lands in an audit log, so there is always an answer to who changed what and when.
A move with no downtime
The new platform took over the main domain without a break in access. Over 500 permanent redirects carried the old URLs across, so the Google rankings stayed put, and WordPress was only switched off once everything, from sign-in through payments to invoicing, was already running on the new system. The content came across with the URLs: dozens of blog articles, their images rehosted, and the links inside the text rewritten so nobody lands on a redirect chain.
// Under the hood
How it's all wired together
Every access decision runs off one registry. Payment just updates it, and every channel (video, audio, certificates, invoicing, the forum, both panels) reads from it as the single source of truth for who can watch what. That means adding another product type never complicates the rest.
Simplified diagram. Hover a block to highlight its connections. Every piece runs in production.
Technologies
- Astro
- Payload CMS
- Postgres (Neon)
- Better Auth
- Mux
- Bunny
- Stripe
- Fakturownia
- Discourse
- Resend
- AI / RAG
- Vercel
Planning something similar?
Tell us what your platform needs to do. We'll scope it and send a quote.