Initial vault setup
This commit is contained in:
@@ -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é
|
||||
Reference in New Issue
Block a user