Aide-mémoire — TrainHub¶
Référence rapide pour TrainHub, la plateforme d'entraînement quotidien au langage C (C-Pool).
Accès rapides¶
| Élément | Lien |
|---|---|
| Repo (org EPITECH) | EpitechAfrik/trainhub |
| Production | https://trainhub.vercel.app (défaut de code — confirmer le domaine réel sur le dashboard Vercel avant toute intervention) |
| Projet Vercel | daily-c-language-training-platform (voir .vercel/project.json en local) |
| Base de données / Auth | Projet Supabase dédié — voir dashboard Supabase de l'équipe |
Repo perso historique
Le code a été développé et versionné pendant longtemps sur le repo personnel YemalinModeste/c-training-abj. Il a été poussé (branches main + development) vers l'org EPITECH sous le nom trainhub pour transmission. Le repo perso reste la source historique, mais le repo EpitechAfrik/trainhub est la référence à jour pour la suite.
Stack en un coup d'œil¶
| Composant | Techno |
|---|---|
| Framework | Next.js 16 (App Router), React 19, TypeScript |
| UI | Tailwind CSS 4, Shadcn UI, éditeur Monaco |
| Auth + DB | Supabase (PostgreSQL + Auth) |
| Exécution de code | Judge0 (auto-hébergé) / Piston — déprécié, repris par devkora (Zeno, Edwin) |
| Emails | Resend |
| Hébergement | Vercel (+ 1 cron quotidien) |
Commandes essentielles¶
Variables d'environnement critiques¶
| Variable | Rôle |
|---|---|
NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_ANON_KEY |
Client Supabase (browser/SSR) |
SUPABASE_SERVICE_ROLE_KEY |
Client admin (routes API privilégiées, cron) |
CRON_SECRET |
Auth du cron Vercel — obligatoire, sinon la route échoue volontairement (fail-closed) |
JUDGE0_API_URL / JUDGE0_API_KEY |
Sandbox d'exécution de code (défaut http://localhost:2358) — legacy, en cours de remplacement par devkora (Zeno) |
RESEND_API_KEY / RESEND_FROM_EMAIL |
Envoi d'emails |
Détail complet : Vue d'ensemble.
Défaut connu — qualité de certaines questions¶
Des étudiants du C-Pool d'Abidjan ont remonté que certaines questions de la banque sont mal rédigées : il arrive qu'un étudiant sélectionne la bonne réponse et qu'elle soit quand même comptée invalide (énoncé/réponse mal renseignés en base, pas un bug applicatif). À corriger au cas par cas dans l'admin — voir Erreurs courantes → Qualité des questions.