Ajoute des raccourcis vers les autres pages sur /leaderboard
Build and deploy / deploy (push) Successful in 36s

L'Agora sert déjà de page d'accueil de fait (/ y redirige) mais n'offrait aucun accès direct aux autres pages sans passer par le menu déroulant du chip. Ajoute une rangée de raccourcis (Icare, Corne d'Abondance, Char, Mur de la Honte, Urne, Crieur) juste au-dessus du classement, responsive (3 colonnes mobile, 6 en ligne sur écran plus large), mêmes icônes que le menu du header pour rester cohérent.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Valentin ROBIN
2026-08-25 17:54:49 +02:00
parent 4532403c95
commit 203afafec2
3 changed files with 37 additions and 1 deletions
+1 -1
View File
@@ -176,7 +176,7 @@ Deuxième volet de l'audit (revue complète de tout le code applicatif, pas seul
| `/` | Redirige vers `/leaderboard` si connecté, sinon `/login` |
| `/login` | Email + mot de passe |
| `/signup` | Email + mot de passe + pseudo + photo (recadrée) ; gère l'attente de confirmation email |
| `/leaderboard` | « L'Agora » — podium top 3 + liste, Realtime, contrôles de points pour les juges, date/décompte du Tribunal en en-tête (`src/lib/tribunal-date.ts`, partagé avec `/calendrier`) |
| `/leaderboard` | « L'Agora » — podium top 3 + liste, Realtime, contrôles de points pour les juges, date/décompte du Tribunal en en-tête (`src/lib/tribunal-date.ts`, partagé avec `/calendrier`). Joue le rôle de page d'accueil (`/` y redirige) : une rangée de raccourcis (`quick-links.tsx`, icônes réutilisées du menu du header) vers les pages d'activité — jeux, Mur, Urne, Crieur — juste au-dessus du classement |
| `/icare` | « Le Vol d'Icare » — Flappy Bird grec, record personnel all-time, scores figés au Tribunal, points attribués automatiquement |
| `/corne` | « La Corne d'Abondance » — jeu de fusion façon Watermelon Game (avatars aléatoires, physique `matter-js`), même mécanique de gloires que Le Vol d'Icare |
| `/char` | « Le Jeu de l'Agora » — format paysage (projeté) : Le Char (2 colonnes de 3, boutons de duel), Le Gardien du Silence (tirage aléatoire, minuteur discret) et La Roulette (tirage au sort animé) |
+3
View File
@@ -1,6 +1,7 @@
import { redirect } from "next/navigation";
import { createClient } from "@/lib/supabase/server";
import { LeaderboardView } from "./leaderboard-view";
import { QuickLinks } from "./quick-links";
import { AgoraLogo } from "@/components/agora-logo";
import { formatCountdown, formatTribunalDateTime } from "@/lib/tribunal-date";
@@ -36,6 +37,8 @@ export default async function LeaderboardPage() {
{tribunalDate && <p className="text-xs text-marble/50">{formatTribunalDateTime(tribunalDate)}</p>}
</div>
<QuickLinks />
{error && (
<p role="alert" className="text-sm text-oxblood">
Impossible de charger le classement pour le moment.
+33
View File
@@ -0,0 +1,33 @@
import Link from "next/link";
import { IconHorn, IconPin, IconScroll, IconSword, IconVote, IconWings } from "@/components/icons";
// L'Agora (/leaderboard) sert de page d'accueil de fait (redirection depuis
// "/" une fois connecté) : ces raccourcis évitent de devoir passer par le
// menu déroulant du chip pour rejoindre les autres pages "d'activité".
// Volontairement sans /profile ni /admin (déjà dans le menu, pas des pages
// d'activité au même titre que les jeux/le Mur/l'Urne/le Crieur).
const LINKS = [
{ href: "/icare", label: "Le Vol d'Icare", icon: IconWings },
{ href: "/corne", label: "La Corne d'Abondance", icon: IconHorn },
{ href: "/char", label: "Le Jeu de l'Agora", icon: IconSword },
{ href: "/mur", label: "Le Mur de la Honte", icon: IconPin },
{ href: "/urne", label: "L'Urne de l'Agora", icon: IconVote },
{ href: "/journal", label: "Le Crieur", icon: IconScroll },
] as const;
export function QuickLinks() {
return (
<nav aria-label="Raccourcis" className="mb-6 grid grid-cols-3 gap-2 sm:grid-cols-6 sm:gap-3">
{LINKS.map(({ href, label, icon: Icon }) => (
<Link
key={href}
href={href}
className="marble-surface flex flex-col items-center gap-1.5 rounded-xl border border-gold/25 px-2 py-3 text-center shadow-sm transition hover:border-gold/50 hover:shadow-md"
>
<Icon className="h-6 w-6 text-gold" />
<span className="text-[0.65rem] leading-tight font-medium text-text-marble sm:text-xs">{label}</span>
</Link>
))}
</nav>
);
}