DEPLOYMENTS / GLOWINFACE
STUDIO · TRAINING · SHOPGlowinface
One Next.js codebase running three businesses under two brands: the Glowin Studio physical clinic site (treatments, workshops, masterclasses), the Glowinface digital training platform (Vimeo lessons, membership, teacher-training), and a full Stripe + GLS + Minimax e-commerce shop. 632 commits, 500+ deployments, still shipping weekly.
CLIENT
Glowin Studio
YEAR
2025 — ongoing
SYSTEMS
WEB
STATUS
DEPLOYED
632
commits of continuous delivery
500
production deployments
10
external integrations, one codebase
[ THE BRIEF ]
The challenge we walked into.
The client didn't want three websites, three CMSes and three invoicing setups. They wanted one platform that could sell an in-studio treatment, an online training subscription, a physical product with GLS shipping, and issue a proper Slovenian invoice — all from the same customer account. Off-the-shelf platforms couldn't span the surface without a plugin stack that would rot within a year.
[ TOPOLOGY ]
How the system is wired.
// SYSTEM TOPOLOGY
[ WHAT WE SHIPPED ]
Feature by feature.
Two brands, one codebase.
Route groups (glowinface) and (glowinstudio) let both brands share every component, cart and auth flow while presenting themselves as distinct sites — different navigation, different content, different SEO. Adding a new brand later is a route group and a theme, not a fork.
- ▸(glowinface) — training platform + shop
- ▸(glowinstudio) — physical clinic + workshops
- ▸Shared cart, auth, checkout
- ▸Independent nav + SEO per brand
[ APPROACH ]
How it came together.
01 — ONE CODEBASE, THREE BUSINESSES
Route groups let two brands share every wire.
The (glowinface) route group hosts the training platform and product shop; the (glowinstudio) route group hosts the physical clinic's site — treatments, workshops, masterclasses. They share every component, the cart, the auth model and the checkout — but present as distinct brands. This is why a bugfix ships to both sites at once, and why adding a new brand later is a route group, not a fork.
02 — EXTERNAL SERVICES AS THE BOUNDARY
Payments, video, shipping, invoicing, marketing — each has one entry point.
Every third-party integration lives behind exactly one /api route. Stripe is payment-intent-secret + subscription-paid. Shipping is gls. Invoicing is minimax. Marketing is klaviyo. This keeps the surface small: if the courier changes tomorrow, we touch one file — not the whole codebase.
03 — CONTINUOUS DELIVERY CADENCE
500+ production deploys and still shipping weekly.
Glowinface isn't a launch-and-leave build. Every week ships new products, new lessons, translation fixes, conversion tweaks and new promos. The pipeline was built to sustain that: preview-per-PR, typed integration boundaries, and idempotent cron so re-running never hurts.
04 — SEO AS ENGINEERING
Rankings come from clean HTML, not tags.
Structured data, per-locale metadata, ISR for near-static pages, sitemap.ts and Search Console verification files ship as part of the build. Both brands earn organic traffic; neither is renting attention.
[ DELIVERY ]
What the build looked like.
01 ▊
[ TECH STACK ]
What’s under the hood.
HOVER FOR ROLE
[ IMPACT ]
What changed.
One platform now runs three businesses under two brands: the physical clinic, the online training program and the product shop. New products ship in minutes; new lessons in an hour; every paid order becomes a compliant invoice without a bookkeeper touching a keyboard. 632 commits later, the site is faster, better-translated and more automated than at launch — that's what continuous delivery looks like when the stack was built to sustain it.