Initial vault setup

This commit is contained in:
2026-06-09 18:40:21 +02:00
commit bda02d587f
3692 changed files with 402457 additions and 0 deletions
@@ -0,0 +1,153 @@
---
title: Workout.cool
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, fitness, workout, coaching, typescript, nextjs, prisma]
confidence: high
contested: false
sources: [https://selfh.st/apps/?tag=fitness, https://github.com/Snouzy/workout-cool, https://workout.cool/]
---
# Workout.cool 🏋️
> Plateforme **moderne de coaching fitness open source** (TypeScript/Next.js) — création de programmes d'entraînement personnalisés, suivi de progression et base de données d'exercices avec vidéos. Successeur communautaire de workout.lol.
| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | https://workout.cool/ |
| **GitHub** | https://github.com/Snouzy/workout-cool |
| **License** | MIT |
| **Langage** | TypeScript (Next.js, React, Prisma) |
| **Étoiles** | ⭐7.9k (GitHub) / ⭐665 (selfh.st rank) |
| **Dernière MAJ** | 2025-12-07 (v1.3.2) |
| **Catégorie** | [[cat-fitness]] |
## Description
**Workout.cool** est une plateforme de **coaching fitness open source moderne**, écrite en TypeScript avec Next.js (App Router), Prisma et PostgreSQL. Le projet est né de la volonté de son créateur (Snouzy / Mat B.) de proposer une ré-implémentation communautaire de **workout.lol**, après l'abandon du projet originel suite à des problèmes de licence de vidéos d'exercices. La devise : *« I'm not building this for profit. This isn't just a revival: it's an evolution. »*
L'application permet de **créer des plans d'entraînement personnalisés**, d'accéder à une **base de données d'exercices** détaillée (avec descriptions multilingues, vidéos YouTube, attributs muscles/équipement), de **suivre sa progression** via des graphiques (Recharts), et offre un système d'authentification moderne (Better Auth) avec support natif mobile via **Expo**. L'**architecture suit le pattern Feature-Sliced Design (FSD)** : `app/``processes/``widgets/``features/``entities/``shared/`.
Côté monétisation, le projet intègre **RevenueCat** pour les abonnements premium (coachs Pro, statistiques avancées), mais le code reste 100% open source et self-hostable. Les **thèmes UI** utilisent Tailwind CSS + shadcn/ui + Radix UI pour un rendu moderne et accessible. L'import d'exercices se fait par **CSV** avec un script fourni, et un prompt ChatGPT est même fourni pour générer des datasets d'exercices à partir de zéro.
## Installation
### Via Docker (recommandé)
```yaml
# docker-compose.yml
services:
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: workout
POSTGRES_PASSWORD: workout-secret
POSTGRES_DB: workout_cool
volumes:
- workout-db:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U workout"]
interval: 10s
timeout: 5s
retries: 5
app:
build:
context: https://github.com/Snouzy/workout-cool.git
dockerfile: Dockerfile
container_name: workout-cool
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
ports:
- "3000:3000"
environment:
DATABASE_URL: postgresql://workout:workout-secret@postgres:5432/workout_cool
BETTER_AUTH_SECRET: change-me-with-openssl-rand-32
BETTER_AUTH_URL: https://workout.example.com
NEXT_PUBLIC_APP_URL: https://workout.example.com
NODE_ENV: production
volumes:
workout-db:
```
```bash
# Démarrage
docker compose up -d
# Migrations Prisma (premier lancement)
docker compose exec app npx prisma migrate deploy
```
### Installation manuelle (développement)
1. **Pré-requis** : Node.js 18+, pnpm 8+, PostgreSQL 14+ (ou via `docker compose up postgres`).
2. **Cloner** : `git clone https://github.com/Snouzy/workout-cool && cd workout-cool`.
3. **Deps** : `pnpm install`.
4. **Env** : `cp .env.example .env` puis ajuster `DATABASE_URL`, `BETTER_AUTH_SECRET`, etc.
5. **DB** : `createdb -h localhost -U postgres workout_cool` puis `npx prisma migrate dev`.
6. **Seed (optionnel)** : `npx prisma db seed` pour données de démo.
7. **Dev** : `pnpm dev` → http://localhost:3000.
8. **Import CSV** : `pnpm run import:exercises-full ./data/sample-exercises.csv` pour charger des exercices.
## Configuration
- **Auth** : Better Auth supporte email/password, OAuth (Google, GitHub), et mobile via Expo.
- **Base d'exercices** : importer via CSV (colonnes : id, name, name_en, description, full_video_url, full_video_image_url, etc.).
- **Programmes** : créer des templates d'entraînement, planifier sur le calendrier.
- **Thème** : dark/light natif, customisable via Tailwind.
- **Mobile** : l'app Expo pointe vers le même backend (variables `EXPO_PUBLIC_*`).
- **HTTPS obligatoire** via reverse proxy.
- **Backups** : `pg_dump workout_cool` quotidien + rotation hors-ligne.
- **Migrations** : `npx prisma migrate deploy` à chaque release.
## Alternatives
### Open Source
- [[app-wger]] — Workout manager Python/Django (plus mature)
- [[app-sparkyfitness]] — Fitness + nutrition + IA (famille)
- [[app-workout-tracker]] — Tracker GPX + musculation (Go)
- [[app-wingfit]] — Fitness minimaliste (Angular + FastAPI)
- **FitTrackee** — Tracker outdoor Python
- **Hevy clone** — projets dérivés de workout.lol
### Propriétaires
- **Strong** (iOS/Android) — app muscu fluide, 10$/mois premium
- **Hevy** — moderne, social, 10$/mois
- **JEFIT** — routines muscu avec bibliothèque
- **Freeletics** — coaching IA, 30$/mois
- **Fitbod** — programmes adaptatifs IA
- **Nike Training Club** — gratuit, plans Nike
## Sécurité
- **Better Auth** : bibliothèque moderne, support MFA, OAuth, passkeys (TOTP 2FA possible).
- **HTTPS obligatoire** via reverse proxy (Traefik/Caddy).
- **JWT secrets** : `BETTER_AUTH_SECRET` doit être long et rotaté (32+ caractères).
- **CSRF/XSS** : protégés par Next.js Server Components.
- **Uploads** : pas d'upload d'image utilisateur direct (URLs YouTube uniquement) → surface d'attaque réduite.
- **Rate limiting** : à configurer au niveau reverse proxy.
- **Backups** : `pg_dump` quotidien, tester le restore régulièrement.
- **MIT** : permissive, permet fork commercial (mais respecter la marque Workout.cool).
- **Migrations Prisma** : toujours via `migrate deploy` en prod, jamais `db push`.
## Ressources
- Site officiel : https://workout.cool/
- Code source : https://github.com/Snouzy/workout-cool
- Documentation : https://workout.cool/docs (à venir)
- Démo live : https://workout.cool/
- Discord communautaire : https://discord.gg/workout-cool
- selfh.st : https://selfh.st/apps/?tag=fitness
- TrueNAS SCALE app : https://github.com/Snouzy/workout-cool/issues/184 (en cours)
## Pages Liées
- [[cat-fitness]] — Catégorie parente
- [[app-wger]] — Alternative Python plus mature
- [[app-sparkyfitness]] — Alternative avec nutrition
- [[app-workout-tracker]] — Alternative Go simple
- [[app-wingfit]] — Alternative FR minimaliste
- [[recettes-docker-compose]] — Templates de déploiement
- [[securisation-home-lab]] — Bonnes pratiques sécurité