尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Site du concours national d'éloquence et de plaidoirie organisé par l'AJ3C (Association des Jeunes Communicateurs pour le Changement de Comportement) : éditions, candidats, établissements, inscriptions, vote du public, palmarès, galerie, vidéothèque, actualités et administration.
Contenus réels : logos, photos de l'édition précédente (
public/photos, deux albums « 5e édition »), les 17 partenaires & sponsors du visuel officiel (public/partenaires), les coordonnées de l'AJ3C ([email protected], +228 97 07 57 07, @aj3c), la devise de la chaîne YouTube et une vidéo de la chaîne. Contenus de démonstration : l'édition en cours (« 6e édition »), ses candidats, établissements, dates, témoignages, articles et dossiers sont fictifs et portent un badge « Démo ». Le thème, les dates et le palmarès de la 5e édition sont laissés vides, à compléter dans l'administration.
Charte : dégradé bleu du logo (#035cfc → #10338b), orange du pupitre (#ff8d18 → #ff33aa) et blanc ; Montserrat (la police du logo) pour les titres, Plus Jakarta Sans pour le texte ; cartes blanches arrondies, grandes photos, boutons pilule.
Prérequis : Node.js 20.9 ou plus récent (22 recommandé).
npm install
npm run dev
Ouvrez http://localhost:3000.
Au premier lancement, une base PostgreSQL embarquée (PGlite, dossier .data/pglite) est créée, migrée puis remplie avec les données de démonstration.
[email protected] / Demo-Orathon-2026| Commande | Rôle |
|---|---|
npm run dev | serveur de développement |
npm run build puis npm start | build et serveur de production |
npm test | tests automatisés (vote, permissions, inscriptions) |
npm run typecheck | vérification TypeScript |
npm run check | typecheck + tests + build |
npm run db:migrate | applique les migrations (PostgreSQL ou base locale) |
npm run db:seed | charge les données de démonstration dans une base vide |
npm run db:reset | efface la base locale (recréée au prochain lancement) |
npm run admin:create -- email "Nom" super_admin | crée ou met à jour un compte d'administration |
Le projet se déploie sur Vercel sans saisir de clé à la main :
npm run vercel-build (scripts/vercel-setup.ts) :
applique les migrations, verrouille l'API publique de Supabase, crée les buckets de stockage
et charge les données de démonstration si la base est vide. Les variables de l'intégration
(POSTGRES_URL, NEXT_PUBLIC_SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY, SUPABASE_JWT_SECRET) sont reprises
automatiquement (src/lib/platform-env.ts) ; APP_SECRET en est dérivé s'il n'est pas défini.ADMIN_EMAIL et ADMIN_PASSWORD
(12 caractères minimum), puis redéployer.Tant qu'aucun fournisseur d'e-mail (RESEND_API_KEY) ni de SMS n'est configuré, le vote reste en mode démonstration :
le code de vérification s'affiche à l'écran. Pour la version officielle : configurer Resend, définir DEMO_MODE=false,
un APP_SECRET fixe, Turnstile, puis relier le nom de domaine (Settings → Domains).
Le plan gratuit Hobby de Vercel est réservé à un usage personnel : passer au plan Pro pour le site officiel.
.env.example en .env.local (ou dans les réglages de l'hébergeur) et renseignez au minimum :
DATABASE_URL : chaîne de connexion PostgreSQL (pooler en mode transaction, port 6543) ;APP_SECRET : 32 caractères aléatoires. Ne plus le changer une fois le vote ouvert ;SUPABASE_URL et SUPABASE_SERVICE_ROLE_KEY : stockage des photos et des pièces ;NEXT_PUBLIC_SITE_URL : l'adresse définitive du site ;DEMO_MODE=false.npm run db:migrate.supabase/securite-supabase.sql dans le SQL Editor. Ce script active la RLS sans aucune politique pour anon et authenticated, et crée les buckets public-media (public) et dossiers (privé).npm run admin:create -- [email protected] "Votre Nom" super_admin (mot de passe demandé, 12 caractères minimum).npm run db:seed. Aucun compte de démonstration n'est créé sur PostgreSQL.npm run build && npm start).| Service | Variable | Sans configuration |
|---|---|---|
| E-mail (codes de vote, confirmations) | RESEND_API_KEY, MAIL_FROM | en démo : code affiché à l'écran ; en production : vote par e-mail refusé |
| SMS | SMS_WEBHOOK_URL (+ SMS_WEBHOOK_TOKEN) | idem. Le webhook reçoit {"to","text"} : à brancher sur l'agrégateur SMS de votre choix |
| Anti-robot | NEXT_PUBLIC_TURNSTILE_SITE_KEY, TURNSTILE_SECRET_KEY | vote « léger » refusé en production |
| Stockage | SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY | fichiers dans .data/uploads (local) |
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗