--- title: SparkyFitness created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, fitness, nutrition, tracker, typescript, react, node] confidence: high contested: false sources: [https://selfh.st/apps/?tag=fitness, https://github.com/CodeWithCJ/SparkyFitness] --- # SparkyFitness ⚡ > Application web complète de **suivi fitness, nutrition et santé** pour la famille, écrite en TypeScript/React et Node.js, avec interface moderne et support multi-utilisateurs. | Métadonnée | Valeur | | :--- | :--- | | **Site web** | https://sparkyfitness.com/ | | **GitHub** | https://github.com/CodeWithCJ/SparkyFitness | | **License** | MIT | | **Langage** | TypeScript (React + Node.js) | | **Étoiles** | ⭐205 (selfh.st rank) | | **Dernière MAJ** | 2026-05-30 | | **Catégorie** | [[cat-fitness]] | ## Description SparkyFitness (anciennement **SparkyRecipes** puis renommé pour englober le fitness) est une application web **moderne et auto-hébergeable** qui combine suivi nutritionnel, entraînement et mesures de santé dans une seule interface cohérente. Pensée pour un usage familial ou de petit coach, elle permet à plusieurs utilisateurs de partager le même déploiement tout en gardant leurs données isolées. Côté fonctionnalités, SparkyFitness propose un **journal alimentaire** avec gestion des recettes composées (cumul nutritionnel automatique), un **tracker d'exercices** avec bibliothèque d'activités, un **suivi du poids et des mesures corporelles** avec graphiques d'évolution, un **planificateur de repas** hebdo, et un **tableau de bord** synthétisant calories, macros et activité. L'UI en React avec **TailwindCSS** est particulièrement soignée comparée à [[app-wger]] qui est plus daté visuellement. L'**architecture client/serveur** sépare clairement le frontend (Vite + React 18) du backend (Node.js + Express + PostgreSQL). Une **API REST documentée** permet l'intégration avec des wearables ou des automatisations. Le projet est encore jeune (release v1.x) mais le rythme de commit est soutenu et la documentation est claire. ## Installation ### Via Docker Compose ```yaml services: sparkyfitness-db: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_USER: sparky POSTGRES_PASSWORD: ${SPARKY_DB_PASSWORD:-changeme} POSTGRES_DB: sparkyfitness volumes: - sparky_db:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U sparky"] interval: 10s timeout: 5s retries: 5 sparkyfitness-backend: image: codewithcj/sparkyfitness:latest restart: unless-stopped depends_on: sparkyfitness-db: condition: service_healthy environment: DATABASE_URL: postgres://sparky:${SPARKY_DB_PASSWORD:-changeme}@sparkyfitness-db:5432/sparkyfitness JWT_SECRET: ${SPARKY_JWT_SECRET:-changez-moi} NODE_ENV: production PORT: 3001 ports: - "3001:3001" sparkyfitness-frontend: image: codewithcj/sparkyfitness-frontend:latest restart: unless-stopped depends_on: - sparkyfitness-backend environment: VITE_API_URL: http://localhost:3001 ports: - "3000:80" volumes: sparky_db: ``` ### Installation manuelle (Debian/Ubuntu) ```bash sudo apt install -y postgresql nodejs npm git git clone https://github.com/CodeWithCJ/SparkyFitness.git cd SparkyFitness # Backend cd backend && npm install && npm run build # Frontend cd ../frontend && npm install && npm run build ``` ## Configuration Les variables d'environnement principales du backend : - `DATABASE_URL` : connexion PostgreSQL - `JWT_SECRET` : secret pour l'authentification JWT (32+ caractères) - `PORT` : port d'écoute (défaut 3001) À la première connexion, créer un compte administrateur via l'interface web. Les utilisateurs supplémentaires sont gérables depuis l'admin. Les **recettes composées** se créent depuis l'onglet « Recettes » et permettent d'agréger automatiquement les valeurs nutritionnelles. ## Alternatives **Open source** : - [[app-wger]] : référence plus mature, Python/Django, plus austère - [[app-fittrackee]] : français, focus activité sportive pure - [[app-workout-cool]] : TypeScript, plus simple, sans nutrition - [[app-endurain]] : si focus cyclisme/course type Strava **Propriétaire** : - **MyFitnessPal** : leader mondial, base alimentaire géante, payant premium - **Cronometer** : précision nutritionnelle, freemium - **Yazio** : interface moderne, freemium agressif ## Sécurité - Changer absolument `SPARKY_DB_PASSWORD` et `SPARKY_JWT_SECRET` avant déploiement - Mettre en place un **reverse proxy** (Traefik, Nginx Proxy Manager) avec HTTPS (Let's Encrypt) - Sauvegarder régulièrement le volume `sparky_db` (`pg_dump` quotidien) - Les mots de passe sont hashés côté serveur (bcrypt par défaut) ## Ressources - **GitHub** : https://github.com/CodeWithCJ/SparkyFitness - **Site officiel** : https://sparkyfitness.com/ - **Issue tracker** : https://github.com/CodeWithCJ/SparkyFitness/issues - **selfh.st** : https://selfh.st/apps/?tag=fitness ## Pages Liées - [[cat-fitness]] - [[recettes-docker-compose]] - [[app-wger]] — alternative mature Python - [[app-workout-cool]] — autre tracker TypeScript - [[app-fittrackee]] — tracker d'activités français