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