Multi-tenant fitness franchise platform processing $5M+ annually across 19+ studios in Australia, New Zealand, and Singapore. Stripe Connect payment infrastructure, React Native mobile app, Next.js admin dashboard, and automated billing pipelines.
Role: Technical Lead & Full-Stack Architect

S30 Studios is a boutique fitness franchise operating 30-minute high-intensity workout sessions across Australia, New Zealand, and Singapore. They needed a complete digital platform to replace fragmented manual processes — member management, class booking, recurring billing, franchise reporting, and mobile member experience.
The complexity: each studio operates as an independent business entity with its own Stripe account, pricing, and local regulations, but members expect a unified experience. The platform needed multi-tenant isolation while presenting a seamless single-brand interface.
Critical requirement: payment reliability. The existing system had 30% of members consistently overdue, causing significant cash flow problems across the franchise network.
Four interconnected systems serving members, staff, and franchise operators
React Native 0.76 + Expo 52
61,000+ lines TypeScript
182 reusable components
AES-256 encrypted storage
Real-time class booking
iOS + Android
Next.js 14 App Router
React 18 Server Components
150+ components
Role-based access control
Real-time analytics
Franchise management
Bun runtime + Hono
11 Cloud Functions
Stripe Connect integration
Multi-currency (AUD/NZD/SGD)
Automated billing
AWS ECS Fargate
Supabase PostgreSQL
45+ normalized tables
4,200+ lines of types
Row-Level Security
Real-time subscriptions
Studio-level isolation
Stripe Connect multi-tenant architecture with isolated accounts per studio
Each of the 19+ studios has its own Stripe Connected Account. Payments are processed directly to the studio's account with platform fees automatically deducted. This provides complete financial isolation while maintaining a unified member experience.
Native support for AUD (Australia), NZD (New Zealand), and SGD (Singapore) with country-specific Stripe transaction fee calculations (1.7%-3.9% + flat fees). Supports both credit card and AU BECS Direct Debit payment methods.
Daily batch job processes 1,000+ member billing records. 3-tier retry logic with exponential backoff for failed payments. Automated dunning email campaigns via SendGrid. $10 AUD dishonor fee assessment for repeated failures.
Comprehensive state tracking for payment intents, retry attempts, failure reasons, and recovery status. Critical errors trigger Slack webhooks for immediate ops team notification. Full audit trail for financial reconciliation.
Overdue Rate: 30% → 2.45%
Achieved within 6 months through automated retry logic and dunning campaigns
State machine managing the complete member journey across 19+ locations
Configurable fee assessment, grace period management, automated state transitions, and email notification sequences. 20+ custom SendGrid templates for member communications.
Members can transfer between studios with automated billing updates, Stripe account reassignment, and multi-party notifications (email + push) to all stakeholders.
"Members at risk" predictive detection with automated CRM triggers to GoHighLevel, enabling proactive retention campaigns before members cancel.
Automated marketing campaigns triggered at key lifecycle events — signup anniversaries, attendance thresholds, membership renewals — via CRM integration.
14+ scheduled jobs orchestrating daily operations across the platform
Daily Payment Processing
Midnight UTC
Membership Expirations
Daily
Studio Metrics Aggregation
6 PM daily
Kisi Access Control Sync
Hourly
Payout Report Generation
Weekly
GitHub Actions → Docker build → AWS ECR push → ECS Fargate deployment with stability verification. Fly.io continuous delivery on main branch.
Sentry error tracking (100% transaction sampling), AWS CloudWatch logs, Slack webhooks for critical events, and structured logging throughout.
10+ external services orchestrated into a unified platform
Stripe
Payments
ClassPass
Scheduling
GoHighLevel
CRM
SendGrid
Expo
Push
Kisi
Access
Leads
Clerk
Auth
Sentry
Errors
Supabase
Database
61,000+ lines of production TypeScript serving 7,000+ active members
Class capacity tracking, waitlist management, automatic promotion when spots open, conflict prevention across concurrent bookings.
Leaderboards, attendance streaks, achievement medals. QR check-in with automated ranking updates and milestone notifications.
Social posts, threaded comments, polls with voting, media attachments. Deep-linking from push notifications to specific content.
Custom AES-256-CTR encryption for auth tokens exceeding iOS/Android 2KB secure storage limits. Keys in secure enclave, ciphertext in AsyncStorage.
Stripe React Native SDK integration. Setup Intents for card storage, payment method CRUD, subscription status tracking with real-time sync.
Haversine distance calculation for nearby studio discovery. Studio transfers with automated Stripe account reassignment.
| MOBILE | React Native 0.76, Expo 52, TypeScript 5.3, Jotai, React Navigation 6.x, Clerk |
| DASHBOARD | Next.js 14 App Router, React 18, TypeScript 5.7, Tailwind 3.4, React Query, Recharts |
| BACKEND | Bun v1, Hono 4.6, TypeScript, Zod validation, jsPDF reporting |
| DATABASE | Supabase PostgreSQL, 45+ tables, Row-Level Security, real-time webhooks |
| PAYMENTS | Stripe Connect, multi-currency (AUD/NZD/SGD), BECS Direct Debit, recurring billing |
| DEVOPS | GitHub Actions, Docker, AWS ECR/ECS Fargate, Fly.io, Sentry, CloudWatch |
Note: S30 Studios entered administration in late 2024. The platform operated successfully throughout its deployment, processing millions in transactions and serving thousands of members across the franchise network.
From payment infrastructure to franchise management — let's architect your solution.
GET IN TOUCH