Case 02 / Three

A site that
fills classes.

A Brazilian Jiu-Jitsu academy I co-own and teach at, which makes it the one portfolio piece where I carry the consequences of my own decisions. The site has a single job: turn a curious visitor into a booked intro class.

socabjj.com·2026·wordpress · design system · live data
01

The brief

My own academy: the piece where I live with every decision I made.

Role
Owner-operator and lead instructor; also the person who built it
Surface
Ground-up WordPress rebuild on an 18-component system
Constraint
Everything on it has to survive contact with a real gym
02

The decisions

The constraintA stale schedule destroys trust faster than a bad design

One source of truth, read live

Class times on a gym website are the single thing a visitor will act on, and the single thing that rots. The site reads its hours from the system that actually runs the academy rather than from a page someone remembers to update. Change the room, and the website has already changed.

The constraintStock photography reads as a gym that does not exist

The academy's own library, made searchable

Every image is from the mats. The archive is captioned by machine vision and queried in plain English, so pulling the right frame for a program card takes seconds instead of an afternoon. No stock, no filler. The site looks like the room feels, because it is literally the room.

The constraintSites drift the moment more than one person touches them

Eighteen components, no eighteenth button

An 18-component design system underneath the theme, so a new program page or a seasonal promotion is assembled from parts that already agree with each other. Growth stops being a redesign risk. This is the difference between a website and a site that is still coherent two years later.

The constraintA first-timer is nervous, not shopping

One unmistakable path

Walking into a jiu-jitsu gym for the first time is intimidating, and a page full of equal-weight options makes it worse. There is one obvious next step from anywhere on the site. Everything else (lineage, instructors, the article library) is available, but it never competes with the booking.

The constraintOff-the-shelf gym software fit badly and rented my own data back to me

Run the back office on hardware I own

Members, schedule and the daily operational glue run on a self-hosted hub rather than on a per-seat subscription, which is also the reason the website can read live data at all. The site is the visible surface of the system that actually runs the academy. That is the whole explanation for why its schedule is never wrong, and it is not a thing you can buy.

03

The method

What was decided, in the order it was decided. The how stays on my bench — but the reasoning is the part worth showing anyway.

socabjj — decision log
goal one booked intro class # every other metric is downstream of this one
data hours from the system of record # never a number typed twice
media the academy's own archive # searchable in plain english
system 18 components, one vocabulary # so it can grow without drifting
path one obvious next step # the nervous first-timer is the design target
WordPressReact / TypeScriptDesign systemsLive data integrationJSON-LD / schemaMachine-vision media pipelineConversion designSEO
04

Evidence

programs, mid-page
programs, mid-page

What do you
need built?

Start a conversation →