Files
2026-06-09 18:40:21 +02:00

138 lines
5.2 KiB
Markdown

---
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