Activa is the generic sibling of Setpoint. Setpoint runs padel clubs; Activa runs gyms, recovery centres, wellness studios, multi-sport clubs and lifestyle destinations — anything with members, bookable spaces, appointments and events. It replicates Setpoint's proven mechanics under generic nouns, and adds the two structures Setpoint never needed: an organisation above the venue and operators below it.
Two real customers shaped the model: 24 BLVD (one brand, seven venues on Sukhumvit 24, members + events + tickets) and the Sterling-class wellness centre (one address: padel, pickleball, tennis, barre, Muay Thai — plus a recovery clinic run by a partner business).
Every row-level record carries org_id — that is the isolation wall. venue_id narrows within it. Membership lives at org level: one 24 BLVD membership opens all seven venues.
| Setpoint | Activa | What changed | |
|---|---|---|---|
| facilities | → | orgs + venues | brand split from location; multi-venue native |
| courts | → | resources | resource_type + activity_tags[], no sport baked in |
| bookings | → | bookings | same hold → confirm lifecycle, DB-level overlap guard |
| classes + lessons | → | services + appointments | the offering vs. the scheduled instance |
| coaches | → | providers | coach, trainer, therapist, instructor |
| membership_plans / user_memberships | → | plans / memberships | org-level, not per-venue |
| club_credits | → | credits + ledger | same minor-unit ledger |
| user_facility_roles | → | user_org_roles | same pattern, venue/operator scope columns |
| customers | → | members | org-scoped profile over shared auth |
| — none — | + | events + tickets | 24 BLVD's core loop, first-class |
| — none — | + | operators | Sterling's partner businesses, first-class |
user_org_role() helper + per-table role policiesorgsvenuesoperatorsresourcesresource_schedulesuser_org_rolesmembersprovidersplansmembershipscreditscredit_transactionsbookingsservicesappointmentsappointment_attendeeseventsevent_ticketspaymentswaiverswaiver_signaturesapi_keyswebhook_subscriptionswebhook_deliveriesRoles ladder — write access narrows as you go right; members see only their own rows:
Published events are publicly readable — the member-app feed needs no session to render.
/orgs/{slug}, /me)