OpenAthlete
AGPLv3 endurance training platform: EU-oriented hosting, transparent CTL/ATL/TSB logic in code, self-hosting, and full export. Built in Grenoble.
Application d'entraîneur — alignements, résultats, meetings et rapports quotidiens.
Translation pending
Sports & fitnessTypeScript · CSSGitHub @AsQcAAAOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
As de Québec M17 AAA — App d'entraîneur Application web pour gérer l'équipe : semaine actuelle avec vue du jour (alignement, horaire, meetings individuels, pratique), résultats, calendrier, rapport quotidien cumulé, réunions individuelles/collectives (avec rappels), cumulatif des combinaisons de trios/paires les plus efficaces, et export d'une image du jour à caster sur un téléviseur. 1. Installer Node.js (si pas déjà fait) Télécharge la version LTS sur https://nodejs.org (ou brew install node sur Mac). 2. Créer le projet Supabase (base de données + authentification)Read the full README ↗
Application web pour gérer l'équipe : semaine actuelle avec vue du jour (alignement, horaire, meetings individuels, pratique), résultats, calendrier, rapport quotidien cumulé, réunions individuelles/collectives (avec rappels), cumulatif des combinaisons de trios/paires les plus efficaces, et export d'une image du jour à caster sur un téléviseur.
Télécharge la version LTS sur https://nodejs.org (ou brew install node sur Mac).
Project URL → NEXT_PUBLIC_SUPABASE_URLanon public key → NEXT_PUBLIC_SUPABASE_ANON_KEYservice_role key → SUPABASE_SERVICE_ROLE_KEY (garde-le secret, jamais dans le frontend)supabase/schema.sql et exécute-le.
Ça crée toutes les tables (entraîneurs, joueurs, horaire, alignements, matchs, réunions, rapports
quotidiens, gabarit de pratique) avec des politiques RLS qui exigent d'être connecté.
3bis. (Optionnel) Colle ensuite le contenu de supabase/seed_calendar.sql
et exécute-le — ça pré-remplit l'horaire et les matchs de la saison 2026-2027 à partir du Google
Sheets de planification. Vérifie d'abord le récapitulatif envoyé en chat (matchs à l'écriture
ambiguë comme « M17 AAA : 15h30 Saguenay » n'ont pas été ajoutés automatiquement aux Résultats —
ajoute-les toi-même si besoin). Les noms d'adversaires viennent des abréviations du Sheets (SSF,
COR, TR, SAG, etc.) — renomme-les dans l'onglet Résultats si tu veux les noms complets.L'app n'a pas d'inscription publique (les données concernent des mineurs). Le tout premier compte doit être créé manuellement :
insert into coach_profiles (id, full_name, role)
values ('COLLE-L-UUID-ICI', 'Ton nom', 'head_coach');
cp .env.local.example .env.local
Remplis .env.local avec :
CRON_SECRET : une chaîne aléatoire longue (ex: générée avec openssl rand -hex 32) — protège
l'appel automatique hebdomadaire des rappels.RESEND_API_KEY, et configure COACH_EMAIL (déjà pré-rempli avec ton
courriel) et REMINDER_FROM_EMAIL.cd as-quebec-m17
npm install
npm run dev
Ouvre http://localhost:3000 — tu devrais voir l'écran de connexion (courriel + mot de passe), puis la semaine actuelle.
.env.local (mêmes noms).https://ton-app.vercel.app/definir-mot-de-passe) sinon les liens
d'invitation par courriel ne fonctionneront pas en production.vercel.json configure déjà une tâche automatique (Vercel Cron) qui
appelle /api/reminders chaque lundi à 9h (heure de l'Est) pour vérifier les joueurs sans
rencontre individuelle depuis 3 semaines et t'envoyer un courriel. Vercel ajoute automatiquement
l'en-tête Authorization: Bearer $CRON_SECRET à cet appel — assure-toi que CRON_SECRET est
bien défini dans les variables d'environnement Vercel./jour/[date]) :
/jour/[date]/tv) : affichage plein écran noir/or à ouvrir sur un navigateur de
téléviseur, avec un bouton pour exporter la page en image PNG./jour/[date]/alignement) : reproduit la structure des feuilles
d'alignement du club (deux groupes de couleur « Gris »/« Jaune », lignes de joueurs). Glisse un
chandail (ou tape-le puis tape la case cible — fonctionne aussi au toucher) pour l'assigner.
Bouton « Répliquer le dernier alignement » pour copier la dernière composition utilisée.auth.role() = 'authenticated' — un utilisateur non connecté ne peut rien lire ni écrire.service_role key) et
n'ajoute pas d'inscription publique à l'app.