Files
wiki/Catalogue-Self-Hosted/apps/app-workout-challenge.md
2026-06-09 18:40:21 +02:00

4.6 KiB


title: Workout Challenge created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, fitness, challenge, gamification, typescript, react, social] confidence: medium contested: false sources: [https://selfh.st/apps/?tag=fitness, https://github.com/MarcusJellinghaus/ChallengeTimer]

Workout Challenge 🏆

Application de défis sportifs gamifiés écrite en TypeScript. Créez des challenges (nombre de répétitions, durée, fréquence), suivez votre progression et comparez-vous à vos amis.

Métadonnée Valeur
Site web https://workout-challenge.app/
GitHub https://github.com/MarcusJellinghaus/ChallengeTimer
License MIT
Langage TypeScript (React + Node.js)
Étoiles 8 (selfh.st rank)
Dernière MAJ 2026-02-14
Catégorie cat-fitness

Description

Workout Challenge met l'accent sur la gamification de l'entraînement. Plutôt que de suivre passivement ses routines, l'application propose des défis (challenges) à objectif mesurable : « faire 1000 pompes en 30 jours », « courir 100 km en un mois », « tenir une planche 5 minutes ». Chaque challenge a un tableau de progression, des badges, et peut être partagé.

Fonctionnalités :

  • Défis prédéfinis ou création personnalisée
  • Tableau de bord avec progression en temps réel
  • Badges et récompenses au franchissement d'étapes
  • Partage entre amis (lien, pas de réseau social centralisé)
  • Timer intégré pour certains types de défis (planche, burpees)
  • Statistiques globales

L'architecture est simple : frontend React + TypeScript, backend Node.js + Express + SQLite. L'app est légère, facile à auto-héberger, et fonctionne aussi bien en solo (défis personnels) qu'en petit groupe familial. Le projet a une petite communauté de contributeurs et reste en évolution lente mais régulière.

Note

: peu d'étoiles (8) reflète un projet de niche mais maintenu. Idéal pour qui veut quelque chose de simple et gamifié sans la complexité des gros trackers.

Installation

Via Docker Compose

services:
  challenge-db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: challenge
      POSTGRES_PASSWORD: ${DB_PASSWORD:-changeme}
      POSTGRES_DB: challenge
    volumes:
      - challenge_db:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U challenge"]
      interval: 10s
      timeout: 5s
      retries: 5

  challenge-api:
    image: workout-challenge/api:latest
    restart: unless-stopped
    depends_on:
      challenge-db:
        condition: service_healthy
    environment:
      DATABASE_URL: postgres://challenge:${DB_PASSWORD:-changeme}@challenge-db:5432/challenge
      JWT_SECRET: ${JWT_SECRET:-changez-moi}
    ports:
      - "4000:4000"

  challenge-web:
    image: workout-challenge/web:latest
    restart: unless-stopped
    depends_on:
      - challenge-api
    ports:
      - "3000:80"

volumes:
  challenge_db:

Installation manuelle

git clone https://github.com/MarcusJellinghaus/ChallengeTimer.git
cd ChallengeTimer
npm install
# Backend
cd backend && npm run db:migrate && npm start
# Frontend (autre terminal)
cd ../frontend && npm install && npm run dev

Configuration

  • DATABASE_URL : PostgreSQL ou SQLite
  • JWT_SECRET : authentification
  • Pas de fichier de configuration : tout se configure dans l'UI
  • Les défis se créent depuis l'interface, avec règle de validation (quotidien, hebdomadaire, total)

Alternatives

Open source :

Propriétaire :

  • Fitbit Challenges : si vous avez une Fitbit
  • Strava Challenges : liés à l'écosystème Strava
  • Nike Run Club : challenges running saisonniers

Sécurité

  • Changer DB_PASSWORD et JWT_SECRET
  • HTTPS obligatoire via reverse proxy
  • Sauvegarder le volume challenge_db régulièrement
  • Si usage multi-utilisateurs ouvert : rate-limit sur l'API

Ressources

Pages Liées