Skip to content

Wiibleyde/WikiGuessr

Repository files navigation

WikiGuessr

Codacy Badge Next.js React TypeScript Tailwind CSS Prisma TanStack Query Supabase Bun License

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.

Aperçu

  • 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

Stack technique

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

Démarrage rapide

Prérequis

  • Bun >= 1.0
  • Docker et Docker Compose pour PostgreSQL local
  • Une application Discord si vous activez l'authentification

Installation

git clone https://github.com/Wiibleyde/BetterWikiGuessr.git
cd BetterWikiGuessr
bun install

Le script post-install génère automatiquement le client Prisma.

Configuration

Copier le fichier d'exemple et renseigner les valeurs :

cp .env.example .env

Le .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.

Lancer en local

# Démarrer PostgreSQL
docker compose up -d postgres

# Appliquer les migrations
bun run db:migrate

# Lancer le serveur Next.js
bun run dev

L'application est disponible sur http://localhost:3000.

Développement avec Docker

Le dépôt contient un docker-compose.yml qui démarre PostgreSQL et l'application Next.js.

docker compose up --build

L'image applicative génère Prisma, build l'application en mode standalone, puis démarre le serveur via docker-entrypoint.sh.

Commandes utiles

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 Prisma

Architecture

Frontend

  • src/app/ contient les pages App Router, métadonnées et routes API
  • src/components/ contient les composants UI et sous-modules d'interface
  • src/provider/ et src/context/ gèrent les providers et contextes globaux

Etat client

  • src/hooks/ orchestre le chargement d'article, les soumissions, la synchro et le mode coop
  • src/context/ centralise les états globaux côté client

Backend

  • src/lib/controllers/ valide les requêtes et formate les réponses
  • src/lib/services/ porte la logique applicative
  • src/lib/game/ contient la logique métier liée au jeu et aux articles Wikipédia
  • src/lib/repositories/ encapsule les accès Prisma

API principale

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

Base de données

Le schéma Prisma couvre les modèles applicatifs suivants :

  • User (profil synchronisé depuis auth.users via un trigger)
  • DailyWikiPage, GameResult, GameState

Le client Prisma généré est placé dans generated/prisma/ et ne doit pas être modifié manuellement.

Structure du projet

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é

Qualité

Pour vérifier un changement avant ouverture de PR :

bun run lint
bun run test
bun run build

Contribution

Les contributions se font depuis des branches de feature vers develop.

  1. Créer une branche depuis develop
  2. Développer et lancer bun run lint
  3. Exécuter les tests pertinents
  4. Ouvrir une pull request vers develop

Packages

 
 
 

Contributors