Go to file
soufiane f168f24072 fix: add type assertion for PRIZE_CONFIG access in client page
Add type assertion to handle prize types that may not exist in PRIZE_CONFIG
(PHYSICAL, DISCOUNT, GRAND_PRIZE). This prevents TypeScript compilation errors
when accessing the PRIZE_CONFIG object with dynamic prize types.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 00:29:52 +01:00
app fix: add type assertion for PRIZE_CONFIG access in client page 2025-11-18 00:29:52 +01:00
components dev 2025-11-17 23:38:02 +01:00
contexts dev 2025-11-17 23:38:02 +01:00
docs dev 2025-11-17 23:38:02 +01:00
hooks dev 2025-11-17 23:38:02 +01:00
lib dev 2025-11-17 23:38:02 +01:00
public dev 2025-11-17 23:38:02 +01:00
scripts dev 2025-11-17 23:38:02 +01:00
services dev 2025-11-17 23:38:02 +01:00
types dev 2025-11-17 23:38:02 +01:00
utils dev 2025-11-17 23:38:02 +01:00
.dockerignore Initial commit du frontend The Tip Top 2025-10-30 11:11:59 +00:00
.gitignore feat: initial Next.js frontend 2025-10-28 22:48:49 +00:00
Dockerfile Initial commit du frontend The Tip Top 2025-10-30 11:11:59 +00:00
eslint.config.js dev 2025-11-17 23:38:02 +01:00
eslint.config.mjs feat: initial Next.js frontend 2025-10-28 22:48:49 +00:00
eslint.config.mts Fix Jenkinsfile syntax (clean comments) 2025-11-04 18:50:01 +01:00
Jenkinsfile Fix Jenkinsfile syntax (clean comments) 2025-11-04 18:52:44 +01:00
jest.config.js dev 2025-11-17 23:38:02 +01:00
jest.setup.js dev 2025-11-17 23:38:02 +01:00
middleware.ts dev 2025-11-17 23:38:02 +01:00
next.config.js Initial commit du frontend The Tip Top 2025-10-30 11:11:59 +00:00
package-lock.json dev 2025-11-17 23:38:02 +01:00
package.json dev 2025-11-17 23:38:02 +01:00
postcss.config.js dev 2025-11-17 23:38:02 +01:00
README.md dev 2025-11-17 23:38:02 +01:00
tailwind.config.js dev 2025-11-17 23:38:02 +01:00
test-api.sh dev 2025-11-17 23:38:02 +01:00
tsconfig.json Initial commit du frontend The Tip Top 2025-10-30 11:11:59 +00:00
update-token.html dev 2025-11-17 23:38:02 +01:00

🍵 Thé Tip Top - Jeu Concours Frontend

Application web moderne pour le jeu-concours "Thé Tip Top" avec Next.js 14 et Tailwind CSS.

📋 Description

Site web complet permettant aux utilisateurs de :

  • Se connecter via Google/Facebook OAuth ou formulaire classique
  • Participer au jeu-concours en entrant un code de ticket (10 caractères)
  • Consulter leurs gains et historiques
  • Permettre aux employés de vérifier les gains et marquer comme "remis"
  • Permettre aux administrateurs de visualiser les statistiques globales du jeu

🚀 Technologies utilisées

  • Framework: Next.js 14 (App Router)
  • Styling: Tailwind CSS
  • Gestion d'état: React Context API (AuthContext)
  • Formulaires: React Hook Form + Zod
  • Notifications: React Hot Toast
  • Appels API: Axios
  • Language: TypeScript

📁 Structure du projet

the-tip-top-frontend/
├── app/                          # Pages Next.js 14 (App Router)
│   ├── page.tsx                  # Page d'accueil
│   ├── login/page.tsx            # Connexion
│   ├── register/page.tsx         # Inscription
│   ├── jeux/page.tsx             # Page de jeu
│   ├── client/page.tsx           # Dashboard client
│   ├── employe/page.tsx          # Dashboard employé
│   ├── admin/page.tsx            # Dashboard admin
│   ├── historique/page.tsx       # Historique
│   ├── profile/page.tsx          # Profil
│   ├── layout.tsx                # Layout principal
│   └── globals.css               # Styles globaux
│
├── components/                   # Composants réutilisables
│   ├── Header.tsx                # Header avec navigation
│   ├── Footer.tsx                # Footer complet
│   ├── Button.tsx                # Bouton personnalisé
│   └── ui/                       # Composants UI
│       ├── Card.tsx
│       ├── Input.tsx
│       ├── Badge.tsx
│       ├── Modal.tsx
│       ├── Loading.tsx
│       └── Table.tsx
│
├── contexts/                     # Contextes React
│   └── AuthContext.tsx           # Authentification
│
├── services/                     # Services API
│   ├── api.ts                    # Configuration Axios
│   ├── auth.service.ts           # Auth
│   ├── user.service.ts           # Utilisateur
│   ├── game.service.ts           # Jeu
│   ├── employee.service.ts       # Employé
│   └── admin.service.ts          # Admin
│
├── hooks/                        # Hooks personnalisés
│   └── useGame.ts
│
├── lib/                          # Librairies
│   └── validations.ts            # Schémas Zod
│
├── types/                        # Types TypeScript
│   └── index.ts
│
└── utils/                        # Utilitaires
    ├── constants.ts              # Constantes
    └── helpers.ts                # Helpers

🎨 Fonctionnalités

Pages publiques

  • Page d'accueil : Présentation du jeu-concours
  • Connexion/Inscription : Authentification complète avec OAuth
  • Navigation responsive : Header et Footer professionnels

Espace Client (/client)

  • Statistiques personnelles (participations, gains, en attente)
  • Historique des tickets joués
  • Accès rapide au jeu

Page de jeu (/jeux)

  • Saisie de code ticket avec validation
  • Résultat instantané avec modal
  • Protection : utilisateurs connectés uniquement

Espace Employé (/employe)

  • Recherche de ticket par code
  • Liste des tickets en attente
  • Validation des gains
  • Protection : rôle "employee" requis

Espace Admin (/admin)

  • Statistiques globales du jeu
  • Distribution des lots
  • Aperçu des statuts
  • Derniers utilisateurs et tickets
  • Protection : rôle "admin" requis

⚙️ Installation

  1. Cloner le projet
git clone <repo-url>
cd the-tip-top-frontend
  1. Installer les dépendances
npm install
  1. Configurer les variables d'environnement Créer un fichier .env.local :
NEXT_PUBLIC_API_URL=http://localhost:5000/api
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=your-secret-key
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
FACEBOOK_CLIENT_ID=your-facebook-client-id
FACEBOOK_CLIENT_SECRET=your-facebook-client-secret
  1. Lancer le serveur de développement
npm run dev

Le site sera accessible sur http://localhost:3000

🔗 Routes principales

Route Description Protection
/ Page d'accueil Publique
/login Connexion Publique
/register Inscription Publique
/jeux Participer au jeu Authentifié
/client Dashboard client Client
/employe Dashboard employé Employé
/admin Dashboard admin Admin
/historique Historique Authentifié
/profile Profil utilisateur Authentifié

🎯 Backend requis

Le frontend se connecte à un backend Express sur http://localhost:5000 (configurable).

Endpoints attendus :

Authentification

  • POST /api/auth/login
  • POST /api/auth/register
  • POST /api/auth/google
  • POST /api/auth/facebook
  • GET /api/auth/me
  • POST /api/auth/logout

Jeu

  • POST /api/game/play

Utilisateur

  • GET /api/user/tickets
  • GET /api/user/profile

Employé

  • GET /api/employee/pending-tickets
  • POST /api/employee/validate/:id

Admin

  • GET /api/admin/statistics
  • GET /api/admin/users
  • GET /api/admin/tickets

🏗️ Build de production

# Créer le build
npm run build

# Démarrer en production
npm start

🎨 Thème et design

Le projet utilise un thème personnalisé avec Tailwind CSS :

  • Couleur primaire : Vert (thème du thé)
  • Couleur secondaire : Jaune/Or
  • Design : Moderne, responsive, accessible
  • Composants : Réutilisables et modulaires

📱 Responsive

L'application est entièrement responsive :

  • 📱 Mobile : < 768px
  • 💻 Tablet : 768px - 1024px
  • 🖥️ Desktop : > 1024px

Accessibilité

  • Labels ARIA sur tous les éléments interactifs
  • Navigation au clavier
  • Contrastes de couleurs respectés
  • Messages d'erreur descriptifs

🧪 Scripts disponibles

npm run dev      # Développement
npm run build    # Build production
npm start        # Démarrer en production
npm run lint     # Linter

📄 License

Ce projet est sous licence privée - Thé Tip Top © 2024

👥 Auteur

Développé pour Thé Tip Top - Jeu Concours 2024


Note: Assurez-vous que le backend est démarré avant de lancer le frontend.