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

5.2 KiB


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

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)

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 :

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

Pages Liées