fitness & wellness
GFV Training: Backend API & Admin Platform
I built the backend for GFV Training from scratch using Laravel and Filament. It supports training programs, workout tracking, coach bookings, and memberships. I also handled the integrations, deployment, and CI/CD.
The brief
GFV Training brings several parts of the fitness experience into one platform: following structured programs, recording workouts, finding coaches, arranging training sessions, and accessing gym memberships.
The backend needed to support these connected workflows for users, coaches, gym owners, and administrators. Alongside the API, the platform needed an admin interface for managing training content and reviewing service providers, plus an automated deployment process.
What was built
-
Training programs and workout tracking
- Structured training programs organised into blocks, days, and exercise assignments
- Program enrolment, daily completion, leaving, and restarting
- Exercise library with categories, muscle groups, and exercise details
- Workout sessions with exercise logging and completion tracking
- Ad hoc workouts for training outside a prescribed program
- Video delivery through Mux with protected playback tokens
-
Coach discovery and session booking
- Coach profiles with specialisations, experience, packages, and training locations
- Availability management
- Coach discovery and individual profile endpoints
- Session requests with proposals, counteroffers, acceptance, and rejection
- Session quotes and payment integration
- Cancellation, check-in, check-out, completion confirmation, and no-show reporting
- Event history for tracking changes throughout a session request
-
Gyms and memberships
- Gym discovery, profiles, facilities, and membership plans
- Gym owner tools for managing listings, images, plans, and members
- Membership purchase and billing workflows
- Stripe connected-account onboarding and dashboard access
-
Accounts and service provider onboarding
- Email and password authentication alongside Google sign-in
- Email verification and password recovery using verification codes
- User profile management and account deletion
- Service provider applications with identity and supporting-document uploads
- Coach, physical therapist, and gym-related onboarding workflows
- User blocking and notification preferences
-
Admin panel
- Filament resources for managing users and service providers
- Coach profile and gym management
- Training program, exercise, category, and muscle management
- Structured forms for maintaining training content
- Legal page management
- Shared business services for domain actions used by the API and admin panel
-
Integrations and notifications
- Stripe for payment and connected-account workflows
- RevenueCat for app subscription status
- Mux for video processing and playback
- Firebase Cloud Messaging for push notifications
- Resend for transactional email
- Webhook endpoints for receiving provider updates
Technical notes
-
Booking as a controlled workflow
A training session involves more than creating a booking record. Participants can propose changes, accept terms, cancel, check in, and confirm completion. The backend handles these transitions through dedicated services, with server-side checks for the acting participant, current state, availability, and permitted action. Transactions and row locking protect state changes, while related event records preserve the session history.
-
Separate billing responsibilities
The platform combines session payments, gym memberships, and app subscriptions. Stripe handles payment-related workflows, while RevenueCat provides the source of truth for app subscriptions. Session-request services use a payment gateway interface, keeping booking rules separate from the Stripe integration.
-
API and admin architecture
The API separates request validation, business logic, and JSON responses through Form Requests, focused services, and API Resources. The Filament admin panel follows the same backend rules for domain actions, so administrative changes use shared services rather than a second implementation of the workflow.
-
Background processing and webhooks
Media processing, notifications, and other asynchronous work run through queued jobs. Provider webhooks verify incoming requests before processing updates, with duplicate-event handling where providers may retry delivery.
-
Deployment and CI/CD
configured Docker-based deployment on a VPS behind Traefik, with separate staging and production environments. GitHub Actions builds and deploys the corresponding application image when changes reach the staging or production branch. The runtime includes dedicated services for the application, queue workers, scheduler, real-time connections, PostgreSQL, and Redis.
-
Code quality
The backend uses Pest for automated tests, Pint for formatting, and Larastan for static analysis. Architecture tests enforce project conventions as the codebase grows.
Screenshots
More projects
Let's talk
Tell me about your project. I reply to all messages within 24 hours.
let's make something together
What happens next
Message sent
I'll get back to you within 24 hours.
While you wait, you can browse my work or read about my services.