DEMO — this is a mock of a gym's OWN website (imagine Wix/WordPress) with the FitProTracker class-signup widget embedded. The widget below is the same clickable mock, running inside an <iframe>.

Train harder. Book instantly.

Chandler's strength & conditioning home. See this week's classes and grab your first session below.

On this gym's own page
Our class schedule

Everything below lives on zone6fitness.com — but the schedule & join-class flow is the embedded FitProTracker widget. A new lead never leaves the gym's site to book.

↓ embedded FPT widget (iframe) ↓
For gyms
How a gym adds this to their site

Paste one snippet — no developer needed. The location key tells the widget which gym/location to show (it can't read that from the gym's own domain, so we pass it in).

Option 1 · iframe embed M

Simplest & sandbox-safe. Works on Wix / Squarespace / WordPress. Auto-resizes to fit — no inner scrollbar (the widget reports its height; the 1-line listener sets it).

<!-- paste anywhere — auto-sizes to content, no scrollbar --> <iframe id="fpt" src="https://book.fitprotracker.com/embed/calendar?location=zone6-chandler" width="100%" style="border:0"></iframe> <script>onmessage=e=>e.data.fptHeight&&(fpt.style.height=e.data.fptHeight+'px')</script>

Option 2 · script insert XL

Renders inline (no iframe box). Mirrors our existing fpt-journey.js loader.

<!-- 1 · where it renders --> <div id="fpt-classes"></div> <!-- 2 · the loader --> <script src="https://book.fitprotracker.com/widget.js" data-location="zone6-chandler" data-target="#fpt-classes"></script>
OptionGym dropsEffortReuses todayNet-new
1 · iframe (recommended)<iframe>M · ~1–1.5dcalendar (anonymous), single-route SPA/embed/calendar route (strip chrome) · location+token param · CORS · iframe auto-resize
2 · script insert<script>XL · ~2–3dfpt-journey.js precedentstandalone widget bundle (AngularJS single-app-per-page friction) · UMD loader
3 · hosted pagea linkS · ~0.5dsubdomain multi-tenant already worksbook.fitprotracker.com/{gym}/calendar route — no embed, just link to it

Key constraint: on the gym's own domain we can't derive the tenant from the URL (no *.fitprotracker subdomain), so the location key (+ signed token) is passed in the snippet. Payment stays PCI-safe by using the hosted-iframe checkout (SAQ) — card data never touches the gym's page. Height/scroll is handled by iframe-resizer (v4 MIT here; v5 needs a paid commercial license for closed-source embeds) — works on desktop & mobile, no inner scrollbar. Feasibility detail: build spec §I.