Loading
Home About Portfolio Projects Blog Testimonials Contact
Back to projects
PHP WordPress JavaScript Docker Featured

FitMe — Fitness Platform

A subscription-based military fitness platform with a custom WordPress backend, Stripe billing, member dashboards, and a workout-progression engine — handling 50k+ requests/minute with aggressive caching.

Hero Screenshot
Role
Full-stack Developer
Timeline
16 weeks
For
FitMe GmbH
Status
Live — 3400+ users

Architecture

System Design.

The platform needed to serve adaptive workout plans to thousands of concurrent users while keeping the CMS accessible for non-technical trainers. I chose a headless WordPress backend serving a REST API through a Redis-cached layer, with a lightweight JavaScript front-end.

The core stack:

1
WordPress + ACF
Custom post types, flexible blocks
2
Redis + Varnish
Sub-50ms API responses
3
Stripe Connect
Subscriptions + usage billing
4
Docker Compose
CI/CD → DO Droplet

Workout Progression Engine.

The core logic — a PHP class that calculates the next workout volume based on the user's previous performance, fatigue level, and their progression phase.

class WorkoutProgressionEngine {
    private int $volume;
    private float $fatigueFactor;

    public function __construct(
        private array $user,
        private array $previousSession
    ) {
        $this->volume = $previousSession['total_volume'] ?? 0;
        $this->fatigueFactor = $this->calculateFatigue();
    }

    public function nextWorkout(): array
    {
        $multiplier = match ($this->user['phase']) {
            'base_building' => 1.05,
            'intensity'     => 0.90,
            'peak'          => 1.02,
            default         => 1.00,
        };

        return [
            'exercises'     => $this->generateExercises($multiplier),
            'total_volume'  => (int) ($this->volume * $multiplier * $this->fatigueFactor),
            'rest_days'     => $this->fatigueFactor < 0.85 ? 2 : 1,
        ];
    }

    private function calculateFatigue(): float
    {
        $daysSinceLast = (new DateTime())->diff(
            new DateTime($this->previousSession['date'])
        )->days;
        return min(1.0, 0.6 + ($daysSinceLast * 0.08));
    }
}

Results

Performance & Impact.

3400+

Active members

~60ms

Avg. API response

50k/min

Peak throughput