Un jeu de devinettes quotidien basé sur Wikipédia. Chaque jour, une page Wikipédia est sélectionnée, son contenu est découpé en tokens, puis ses mots sont masqués. Le but est de retrouver progressivement l'article jusqu'à révéler son titre.
- Un nouvel article Wikipédia chaque jour
- Masquage intelligent des mots avec ponctuation visible
- Correspondance floue pour accepter les propositions proches
- Indices image progressifs après plusieurs essais
- Authentification Discord via Supabase Auth
- Sauvegarde de progression pour les utilisateurs connectés
- Classements, statistiques de profil et historique
- Mode coopératif en temps réel
| Couche | Technologie |
|---|---|
| Framework | Next.js 16 (App Router) |
| UI | React 19 |
| Langage | TypeScript 5 |
| Style | Tailwind CSS 4 |
| Etat client | React Context + hooks |
| Data fetching | TanStack Query 5 |
| HTTP | Axios |
| Authentification | Supabase Auth + Discord OAuth |
| Base de données | PostgreSQL via Prisma 7 |
| Temps réel | Supabase Realtime |
| Validation | Zod |
| Linter / Formatter | Biome 2.2 |
| Tests | Bun test |
| Package manager | Bun |
- Bun >= 1.0
- Docker et Docker Compose pour PostgreSQL local
- Une application Discord si vous activez l'authentification
git clone https://github.com/Wiibleyde/BetterWikiGuessr.git
cd BetterWikiGuessr
bun installLe script post-install génère automatiquement le client Prisma.
Copier le fichier d'exemple et renseigner les valeurs :
cp .env.example .envLe .env.example contient toutes les variables nécessaires (Supabase self-hosted, PostgreSQL, Discord OAuth, etc.). Les variables propres à l'application Next.js se trouvent dans la section WikiGuessr App du fichier.
# Démarrer PostgreSQL
docker compose up -d postgres
# Appliquer les migrations
bun run db:migrate
# Lancer le serveur Next.js
bun run devL'application est disponible sur http://localhost:3000.
Le dépôt contient un docker-compose.yml qui démarre PostgreSQL et l'application Next.js.
docker compose up --buildL'image applicative génère Prisma, build l'application en mode standalone, puis démarre le serveur via docker-entrypoint.sh.
bun run dev # Serveur de développement
bun run build # Build de production
bun run start # Serveur de production
bun run lint # Vérification Biome
bun run format # Formatage Biome
bun run test # Tests unitaires Bun
bun run test:watch # Tests en mode watch
bun run test:coverage # Couverture de tests
bun run test:e2e # Tests Playwright
bun run db:generate # Générer le client Prisma
bun run db:migrate # Créer/appliquer une migration Prismasrc/app/contient les pages App Router, métadonnées et routes APIsrc/components/contient les composants UI et sous-modules d'interfacesrc/provider/etsrc/context/gèrent les providers et contextes globaux
src/hooks/orchestre le chargement d'article, les soumissions, la synchro et le mode coopsrc/context/centralise les états globaux côté client
src/lib/controllers/valide les requêtes et formate les réponsessrc/lib/services/porte la logique applicativesrc/lib/game/contient la logique métier liée au jeu et aux articles Wikipédiasrc/lib/repositories/encapsule les accès Prisma
| Méthode | Route | Description |
|---|---|---|
| GET | /api/game |
Retourne l'article masqué du jour |
| POST | /api/game/guess |
Vérifie un mot proposé |
| POST | /api/game/complete |
Enregistre une victoire |
| PUT | /api/game/state |
Sauvegarde l'état d'une partie connectée |
| GET | /api/game/state |
Restaure l'état d'une partie connectée |
| POST | /api/game/reveal |
Révèle tous les mots après vérification de victoire |
| GET | /api/game/yesterday |
Retourne le titre de la veille |
| POST | /api/game/hint |
Débloque un indice image |
| GET | /api/game/hint/image |
Sert une image d'indice obfusquée |
| GET | /api/historic |
Retourne l'historique des articles |
| GET | /api/leaderboard |
Retourne les classements |
| GET | /api/profile/stats |
Retourne les statistiques du profil |
| GET | /api/auth/callback/[provider] |
Callback OAuth Supabase |
Le schéma Prisma couvre les modèles applicatifs suivants :
User(profil synchronisé depuisauth.usersvia un trigger)DailyWikiPage,GameResult,GameState
Le client Prisma généré est placé dans generated/prisma/ et ne doit pas être modifié manuellement.
src/
├── app/ # Pages, layouts, métadonnées et routes API
├── components/ # Composants UI et sous-modules d'interface
├── constants/ # Constantes métier
├── context/ # Contextes React
├── hooks/ # Hooks client
├── lib/ # Logique métier, auth, repositories, services
├── provider/ # Providers globaux
├── test/ # Tests Bun
├── types/ # Types partagés
└── utils/ # Utilitaires transverses
prisma/
├── schema.prisma # Schéma Prisma
└── migrations/ # Migrations SQL
generated/
└── prisma/ # Client Prisma généré
Pour vérifier un changement avant ouverture de PR :
bun run lint
bun run test
bun run buildLes contributions se font depuis des branches de feature vers develop.
- Créer une branche depuis
develop - Développer et lancer
bun run lint - Exécuter les tests pertinents
- Ouvrir une pull request vers
develop