diff --git a/AppGCC/AppGCC/templates/challenges.html b/AppGCC/AppGCC/templates/challenges.html
index 4063e57a6d1b816c54f613e8dd6e3aa268ebc838..36f92b5fdf946ab3370dc0bd20edb16a1afc9aed 100644
--- a/AppGCC/AppGCC/templates/challenges.html
+++ b/AppGCC/AppGCC/templates/challenges.html
@@ -33,8 +33,13 @@
         <ul class="space-y-4">
             {% for challenge in challenges %}
             <li class="flex items-center justify-between p-4 bg-gray-100 rounded-lg shadow-lg hover:shadow-xl transition duration-300">
-                <span class="text-lg font-medium text-[#102564]">{{ challenge }}</span>
-                <button onclick="completeChallenge('{{ challenge }}')" class="py-2 px-4 bg-[#102564] text-white font-semibold rounded-lg shadow-md hover:bg-[#000000] transition duration-300">Valider</button>
+                <div class="flex flex-col">
+                    <span class="text-lg font-medium text-[#102564]">{{ challenge.description }}</span>
+                    <span class="text-sm text-gray-500">Niveau: {{ challenge.level }}</span>
+                    <span class="text-sm text-gray-500">Lieu: {{ challenge.lieu }}</span>
+                    <span class="text-sm text-gray-500">Points: {{ challenge.points }}</span>
+                </div>
+                <button onclick="completeChallenge('{{ challenge.id }}')" class="py-2 px-4 bg-[#102564] text-white font-semibold rounded-lg shadow-md hover:bg-[#000000] transition duration-300">Valider</button>
             </li>
             {% endfor %}
         </ul>
@@ -52,29 +57,52 @@
             <h2 class="text-xl font-bold text-[#102564] mb-4">Modifier le Profil</h2>
             <label class="block text-sm text-gray-700">Niveau de difficulté</label>
             <select id="difficulty" class="w-full p-2 border rounded-lg mb-4">
-                <option value="facile">Facile</option>
-                <option value="moyen">Moyen</option>
-                <option value="difficile">Difficile</option>
+                <option value="facile" {% if user_difficulty == "facile" %}selected{% endif %}>Facile</option>
+                <option value="moyen" {% if user_difficulty == "moyen" %}selected{% endif %}>Moyen</option>
+                <option value="difficile" {% if user_difficulty == "difficile" %}selected{% endif %}>Difficile</option>
             </select>
             <button onclick="saveProfileSettings()" class="w-full bg-[#102564] text-white py-2 rounded-lg hover:bg-[#000000] transition duration-300">Enregistrer</button>
             <button onclick="toggleProfilePopup()" class="w-full mt-2 bg-gray-300 py-2 rounded-lg hover:bg-gray-400 transition duration-300">Annuler</button>
         </div>
     </div>
     
+    <!-- Message de confirmation -->
+    <div id="confirmationMessage" class="hidden fixed inset-0 bg-black bg-opacity-50 flex justify-center items-center">
+        <div class="bg-white p-6 rounded-lg shadow-lg w-96">
+            <h2 class="text-xl font-bold text-[#102564] mb-4">Défi validé</h2>
+            <p id="confirmationText" class="text-sm text-gray-700"></p>
+            <button onclick="closeConfirmationMessage()" class="w-full mt-2 bg-gray-300 py-2 rounded-lg hover:bg-gray-400 transition duration-300">OK</button>
+        </div>
+    </div>
+    
     <script>
         function toggleProfilePopup() {
             document.getElementById("profilePopup").classList.toggle("hidden");
         }
 
-        function completeChallenge(challenge) {
+        function completeChallenge(challengeId) {
             fetch("/complete_challenge/", {
                 method: "POST",
                 headers: { 
                     "X-CSRFToken": "{{ csrf_token }}",
                     "Content-Type": "application/x-www-form-urlencoded"
                 },
-                body: "challenge=" + challenge
-            }).then(() => location.reload());
+                body: "challenge_id=" + challengeId
+            })
+            .then(response => response.json())
+            .then(data => {
+                if (data.status == "success") {
+                    document.getElementById("confirmationText").innerText = data.message + " (" + data.points + " points)";
+                    document.getElementById("confirmationMessage").classList.remove("hidden");
+                } else {
+                    alert(data.message);
+                }
+            });
+        }
+
+        function closeConfirmationMessage() {
+            document.getElementById("confirmationMessage").classList.add("hidden");
+            location.reload();
         }
 
         function saveProfileSettings() {
@@ -86,7 +114,16 @@
                     "Content-Type": "application/x-www-form-urlencoded"
                 },
                 body: "difficulty=" + difficulty
-            }).then(() => toggleProfilePopup());
+            })
+            .then(response => response.json())
+            .then(data => {
+                if (data.status == "success") {
+                    alert("Paramètres enregistrés avec succès");
+                    toggleProfilePopup();
+                } else {
+                    alert(data.message);
+                }
+            });
         }
     </script>
 </body>
diff --git a/AppGCC/AppGCC/templates/ranking.html b/AppGCC/AppGCC/templates/ranking.html
index a6e173bfbe26e1a7143cfaca3f7f39f563bd466a..01dafb40cc6bf986e59b326f1ac5fdf5b6f01ef5 100644
--- a/AppGCC/AppGCC/templates/ranking.html
+++ b/AppGCC/AppGCC/templates/ranking.html
@@ -8,12 +8,17 @@
     <div class="bg-white p-8 rounded-2xl shadow-2xl w-full max-w-3xl">
         <h2 class="text-3xl font-bold text-[#102564] text-center mb-6">Classement</h2>
         <ul class="space-y-4">
-            {% for user, score in scores %}
-            <li class="flex justify-between p-4 bg-gray-100 rounded-lg shadow-md">
-                <span class="text-lg text-[#102564] font-medium">{{ user }}</span>
-                <span class="text-lg font-semibold text-[#102564]">{{ score }} points</span>
+            <!-- Loop through the ranking and display their username and points from [{'username': 'Thibaud', 'score': 49}] and classement far right-->
+            {% for user in ranking %}
+            <li class="flex items-center justify-between p-4 bg-gray-100 rounded-lg shadow-lg hover:shadow-xl transition duration-300">
+                <div class="flex flex-col">
+                    <span class="text-lg font-medium text-[#102564]">{{ user.username }}</span>
+                    <span class="text-sm text-gray-500">Points: {{ user.score }}</span>
+                </div>
+                <span class="text-sm text-gray-500">{{ forloop.counter }}</span>
             </li>
             {% endfor %}
+
         </ul>
     </div>
 
diff --git a/AppGCC/AppGCC/views.py b/AppGCC/AppGCC/views.py
index 0e2ac0b7e054b11e7089e61561b583c3781c14d8..9b5a50e6b2f21dd9768979d4e84a6eb08d24b208 100644
--- a/AppGCC/AppGCC/views.py
+++ b/AppGCC/AppGCC/views.py
@@ -2,106 +2,304 @@ from django.shortcuts import render, redirect
 from django.contrib.auth import login
 from django.contrib.auth.models import User
 from django.contrib.auth import logout
+from django.contrib import messages
 from django.views.decorators.csrf import csrf_exempt
 from django.http import JsonResponse
 import csv
 import os
+import random
+from datetime import datetime
 
 # Fichier CSV pour stocker les scores
 CSV_FILE = "scores.csv"
+USER_FILE = "users.csv"
 DIFFICULTY_FILE = "difficulties.csv"
-
+DAILY_CHALLENGE_FILE = "daily_challenges.csv"
 
 def init_csv():
     if not os.path.exists(CSV_FILE):
         with open(CSV_FILE, 'w', newline='') as file:
             writer = csv.writer(file)
-            writer.writerow(["username", "score"])
+            writer.writerow(["user_id", "score"])
 
-def read_scores():
-    scores = {}
-    try:
-        with open(CSV_FILE, 'r') as file:
-            reader = csv.reader(file)
-            next(reader)  # Ignorer l'en-tête
-            for row in reader:
-                scores[row[0]] = int(row[1])
-    except FileNotFoundError:
-        init_csv()
-    return scores
+def init_user_csv():
+    if not os.path.exists(USER_FILE):
+        with open(USER_FILE, 'w', newline='') as file:
+            writer = csv.writer(file)
+            writer.writerow(["user_id", "username"])
 
-def update_score(username, points):
-    scores = read_scores()
-    scores[username] = scores.get(username, 0) + points
-    with open(CSV_FILE, 'w', newline='') as file:
-        writer = csv.writer(file)
-        writer.writerow(["username", "score"])
-        for user, score in scores.items():
-            writer.writerow([user, score])
+#################
+# Page de Login #
+#################
 
 def login_view(request):
+    # se log ou bien créer un compte si l'utilisateur n'existe pas sans mot de passe 
     if request.method == "POST":
-        username = request.POST["username"]
-        user, created = User.objects.get_or_create(username=username)
+        username = request.POST.get("username")
+        user = User.objects.filter(username=username).first()
+        if user is None:
+            user = User.objects.create_user(username=username, password=None)
+            user.save()
+            add_user_to_csv(username, user.id)
         login(request, user)
+        request.session['user_id'] = user.id
         return redirect("challenges")
     return render(request, "login.html")
+        
+
+def add_user_to_csv(username, django_user_id):
+    """Ajoute un utilisateur avec un ID Django dans le fichier 'users.csv'."""
+    user_id = django_user_id  # Utiliser l'ID Django
+    with open(USER_FILE, 'a', newline='') as file:
+        writer = csv.writer(file)
+        writer.writerow([user_id, username])  # Ajouter l'ID Django et le nom d'utilisateur
+    return user_id
+
+##################
+# Page de Logout #
+##################
+
+def logout_view(request):
+    logout(request)
+    return redirect('login')
+
+##################
+# Page de Result #
+##################
+
+def ranking_view(request):
+    """Afficher le classement des scores avec les nom d'utilisateur."""
+    # Lire les scores depuis le fichier CSV
+    scores = read_scores()
+    
+    # Lire les utilisateurs depuis la base de données Django
+    users = read_users()
+    
+    # Créer le classement en associant le score avec le nom d'utilisateur
+    ranking = []
+    for user_id, score in scores.items():
+        if int(user_id) in users:  # Associer le user_id avec l'utilisateur dans le dictionnaire
+            ranking.append({"username": users[int(user_id)], "score": score})
+    
+    # Trier le classement par score (du plus élevé au plus bas)
+    ranking.sort(key=lambda x: x['score'], reverse=True)
+    
+    print(f"Classement: {ranking}")  # Debug : Afficher le classement
+    
+    # Passer le classement à la vue pour l'afficher
+    return render(request, "ranking.html", {"ranking": ranking})
+
+def read_users():
+    """Lire les utilisateurs depuis django"""
+    users = {}
+    for user in User.objects.all():
+        users[user.id] = user.username
+
+    print(f"Utilisateurs: {users}")
+    return users
+
+#####################
+# Page de Challenge #
+#####################
 
 def challenges_view(request):
+    # Redirection vers la page de login en cas de session non authentifié
     if not request.user.is_authenticated:
         return redirect("login")
-    challenges = ["Monter les escaliers", "1h de bureau debout", "Faire 5000 pas"]
-    return render(request, "challenges.html", {"challenges": challenges})
+    
+    user_id = request.session.get('user_id')  # Utiliser l'ID stocké en session
+    today = datetime.today().strftime('%Y-%m-%d')  # Récupérer la date du jour
+
+    # Vérifier si l'utilisateur a déjà généré ses défis pour aujourd'hui
+    user_challenges = read_user_daily_challenges(user_id, today)
+
+    if user_challenges:
+        # Si les défis existent déjà pour aujourd'hui, on les récupère depuis le fichier
+        selected_challenges = user_challenges
+        print(f"Défis récupérés pour aujourd'hui: {len(selected_challenges)} défis")
+    else:
+        # Sinon, générer de nouveaux défis pour cet utilisateur
+        print("Aucun défi généré pour aujourd'hui, génération de nouveaux défis.")
+        selected_challenges = generate_daily_challenges(user_id)  # Générer et enregistrer de nouveaux défis
+
+    # Rechercher la difficulté de l'user connecté
+    user_difficulty = get_user_difficulty(user_id)
+    print(f"Difficulté de l'utilisateur {user_id}: {user_difficulty}")
+
+    selected_challenges = read_challenges_from_ids(selected_challenges)
+    # Passer les défis du jour à la vue
+    return render(request, "challenges.html", {"challenges": selected_challenges, "user_difficulty": user_difficulty})
+
+def get_user_difficulty(user_id):
+    """Récupérer la difficulté de l'utilisateur à partir du fichier 'difficulties.csv'."""
+    difficulty = "moyen"  # Valeur par défaut
+    if os.path.exists(DIFFICULTY_FILE):
+        with open(DIFFICULTY_FILE, "r", newline="", encoding="utf-8") as file:
+            reader = csv.reader(file)
+            for row in reader:
+                if len(row) >= 2 and row[0] == str(user_id):  # Vérifier l'ID utilisateur
+                    difficulty = row[1]  # Récupérer la difficulté
+                    break
+    return difficulty
+
+def read_user_daily_challenges(user_id, today):
+    """Lire les défis du jour pour un utilisateur donné depuis le fichier daily_challenges.csv."""
+    user_challenges = []
+    if os.path.exists(DAILY_CHALLENGE_FILE):
+        with open(DAILY_CHALLENGE_FILE, 'r', newline='', encoding='utf-8') as file:
+            reader = csv.reader(file)
+            for row in reader:
+                if len(row) >= 3 and row[1] == str(user_id) and row[0] == today:
+                    user_challenges = row[2:]  # Extraire les IDs des défis du jour
+                    break
+    return user_challenges
+
+def generate_daily_challenges(user_id):
+    """Génère et enregistre les défis du jour pour l'utilisateur."""
+    challenges = read_challenges()
+    user_difficulty = get_user_difficulty(user_id)
+    user_difficulty = user_difficulty.capitalize()
+    daily_challenges = []
+    categories = ["Au bureau (poste)", "Au bureau (espaces communs)", "Extérieur"]
+    random.shuffle(categories)  # Mélanger les catégories
+    for category in categories:
+        challenges_in_category = [c for c in challenges[user_difficulty] if c["lieu"] == category]
+        if challenges_in_category:
+            challenge = random.choice(challenges_in_category)
+            daily_challenges.append(challenge["id"])
+
+    save_daily_challenges_to_csv(user_id, daily_challenges)  # Enregistrer les défis du jour
+    return daily_challenges
+
+def save_daily_challenges_to_csv(user_id, challenge_ids):
+    """Sauvegarder les défis du jour dans un fichier CSV"""
+    today = datetime.today().strftime('%Y-%m-%d')
+    with open(DAILY_CHALLENGE_FILE, 'a', newline='', encoding='utf-8') as file:
+        writer = csv.writer(file)
+        writer.writerow([today, user_id] + challenge_ids)
+
+def update_score(user_id, points):
+    """Mettre à jour le score d'un utilisateur."""
+    scores = read_scores()
+    if str(user_id) in scores:
+        scores[str(user_id)] += points
+    else:
+        scores[str(user_id)] = points
+
+    with open(CSV_FILE, 'w', newline='') as file:
+        writer = csv.writer(file)
+        writer.writerow(["user_id", "score"])  # En-tête
+        for user_id, score in scores.items():
+            writer.writerow([user_id, score])
 
 def complete_challenge(request):
     if request.method == "POST":
-        challenge_points = {
-            "Monter les escaliers": 100,
-            "1h de bureau debout": 50,
-            "Faire 5000 pas": 200
-        }
-        challenge = request.POST.get("challenge")
-        if challenge in challenge_points:
-            update_score(request.user.username, challenge_points[challenge])
-        return JsonResponse({"success": True})
+        challenge_id = request.POST.get("challenge_id")
+        user_id = request.session.get('user_id')  # Récupérer l'ID utilisateur depuis la session
+        points = get_challenge_points(challenge_id)
 
-def ranking_view(request):
-    scores = read_scores()
-    sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True)
-    return render(request, "ranking.html", {"scores": sorted_scores})
+        if points:
+            update_score(user_id, points)  # Mettre à jour le score de l'utilisateur
+            return JsonResponse({"status": "success", "points": points})
 
-def logout_view(request):
-    logout(request)  # This logs out the user
-    return redirect('login')
+    return JsonResponse({"status": "error", "message": "Invalid request"}, status=400)
+
+def read_challenges():
+    """Lire tous les défis depuis un fichier CSV avec des colonnes séparées par des virgules."""
+    challenges = {"Facile": [], "Moyen": [], "Difficile": []}
+    if os.path.exists("challenges.csv"):
+        with open("challenges.csv", 'r', newline='', encoding='utf-8') as file:
+            reader = csv.reader(file)
+            for row in reader:
+                if len(row) >= 6:
+                    challenge = {
+                        "id": row[0],
+                        "description": row[1],
+                        "level": row[2],
+                        "lieu": row[3],
+                        "points": row[4],
+                        "icon": row[5]
+                    }
+                    challenges[challenge["level"]].append(challenge)
+    return challenges
+
+def read_challenges_from_ids(challenge_ids):
+    """Récupérer les défis à partir de leurs IDs."""
+    challenges = read_challenges()
+    selected_challenges = []
+    for level in challenges:
+        for challenge in challenges[level]:
+            if challenge["id"] in challenge_ids:
+                selected_challenges.append(challenge)
+    return selected_challenges
+
+def get_challenge_points(challenge_id):
+    """Récupérer les points associés à un défi donné."""
+    challenges = read_challenges()
+    for level in challenges:
+        for challenge in challenges[level]:
+            if challenge["id"] == challenge_id:
+                return int(challenge["points"])
+    return None
 
 @csrf_exempt
 def update_difficulty(request):
     if request.method == "POST":
-        difficulty = request.POST.get("difficulty", "moyen")  # Valeur par défaut
-        user = request.user.username if request.user.is_authenticated else "guest"  # Utilisateur authentifié ou invité
-
-        scores = []
-        user_found = False
-
-        if os.path.exists(DIFFICULTY_FILE):
-            with open(DIFFICULTY_FILE, "r", newline="", encoding="utf-8") as file:
-                reader = csv.reader(file)
-                for row in reader:
-                    if len(row) < 2:
-                        continue  # Ignorer les lignes mal formées, on s'attend à [username, difficulty]
-                    
-                    if row[0] == user:
-                        row[1] = difficulty  # Modifier uniquement la difficulté (plus de score)
-                        user_found = True
-                    scores.append(row)
-
-        if not user_found:
-            scores.append([user, difficulty])  # Ajouter utilisateur avec difficulté choisie (sans score)
-
-        with open(DIFFICULTY_FILE, "w", newline="", encoding="utf-8") as file:
-            writer = csv.writer(file)
-            writer.writerows(scores)
+        user_id = request.session.get('user_id')
+        difficulty = request.POST.get("difficulty")
+        if difficulty in ["Facile", "Moyen", "Difficile"]:
+            save_user_difficulty(user_id, difficulty)
+            return JsonResponse({"status": "success"})
+    return JsonResponse({"status": "error", "message": "Invalid request"}, status=400)
+
+#####################
+# Page de Mise à jour difficulty #
+#####################
 
-        return JsonResponse({"status": "success", "difficulty": difficulty})
+@csrf_exempt
+def update_difficulty(request):
+    if request.method == "POST":
+        user_id = request.session.get('user_id')
+        difficulty = request.POST.get("difficulty")
+        if difficulty in ["facile", "moyen", "difficile"]:
+            # Save user difficulty in file or database
+            save_user_difficulty(user_id, difficulty)
+            return JsonResponse({"status": "success"})
+        else:
+            return JsonResponse({"status": "error", "message": "Invalid difficulty"})
+    return JsonResponse({"status": "error", "message": "Invalid request"}, status=400)
 
-    return JsonResponse({"status": "error", "message": "Invalid request"}, status=400)
\ No newline at end of file
+##########
+# Commun #
+##########
+
+def read_scores():
+    """Lire les scores depuis un fichier CSV."""
+    scores = {}
+    if os.path.exists(CSV_FILE):
+        with open(CSV_FILE, 'r', newline='') as file:
+            reader = csv.reader(file)
+            next(reader)  # Ignorer l'en-tête
+            for row in reader:
+                if len(row) >= 2:
+                    scores[row[0]] = int(row[1])  # Ajouter le score à un dictionnaire
+    return scores
+
+def save_user_difficulty(user_id, difficulty):
+    """Remplace si l'user à déjà sauvegarder sa difficulté sinon sauvegarde la le tout dans un fichier CSV."""
+    data = []
+    if os.path.exists(DIFFICULTY_FILE):
+        with open(DIFFICULTY_FILE, "r", newline="", encoding="utf-8") as file:
+            reader = csv.reader(file)
+            for row in reader:
+                if len(row) >= 2 and row[0] == str(user_id):
+                    data.append([user_id, difficulty])
+                else:
+                    data.append(row)
+
+    with open(DIFFICULTY_FILE, "w", newline="", encoding="utf-8") as file:
+        writer = csv.writer(file)
+        for row in data:
+            writer.writerow(row)
+        if [user_id, difficulty] not in data:
+            writer.writerow([user_id, difficulty])
diff --git a/AppGCC/challenges.csv b/AppGCC/challenges.csv
new file mode 100644
index 0000000000000000000000000000000000000000..20f81087a8d98fa62fd95e4826279e27794cad0b
--- /dev/null
+++ b/AppGCC/challenges.csv
@@ -0,0 +1,45 @@
+1,Étirements des bras et épaules (2 min),Facile,Au bureau (poste),5,arrows-move
+2,Se tenir droit et contracter les abdos (5 min),Facile,Au bureau (poste),5,user
+3,S'asseoir et se lever de sa chaise (10 fois),Facile,Au bureau (poste),6,arrow-up-circle
+4,Tenir 30 sec en équilibre sur un pied,Facile,Au bureau (poste),5,accessibility
+5,Rotations poignets et épaules (1 min),Facile,Au bureau (poste),5,refresh
+6,Prendre les escaliers toute la journée,Facile,Au bureau (espaces communs),8,stairs
+7,Marcher 5000 pas dans la journée,Facile,Au bureau (espaces communs),10,footprints
+8,Marcher 5 min après chaque réunion,Facile,Au bureau (espaces communs),8,clock
+9,Flexions des genoux (10 fois),Facile,Au bureau (espaces communs),6,arrow-down-circle
+10,Respiration profonde (5 fois),Facile,Au bureau (espaces communs),5,wind
+11,Marche rapide (10 min) pause déjeuner,Facile,Extérieur,10,walk
+12,Descendre un arrêt plus tôt,Facile,Extérieur,10,bus
+13,Aller voir un collègue au lieu d’un e-mail,Facile,Extérieur,5,mail-opened
+14,Balade autour du bureau,Facile,Extérieur,9,trees
+15,20 montées de marches en extérieur,Facile,Extérieur,10,stairs
+16,10 squats sans quitter son bureau,Moyen,Au bureau (poste),10,run
+17,Gainage sur chaise (30 sec),Moyen,Au bureau (poste),10,grip-horizontal
+18,20 extensions de mollets,Moyen,Au bureau (poste),10,walk
+19,30 contractions abdos assis,Moyen,Au bureau (poste),10,user
+20,Alterner assis/debout toutes les 30 min (2h),Moyen,Au bureau (poste),12,clock
+21,Escaliers 3 jours d’affilée,Moyen,Au bureau (espaces communs),15,stairs
+22,Se lever et marcher 5 min toutes les heures,Moyen,Au bureau (espaces communs),12,clock
+23,10 montées de marches,Moyen,Au bureau (espaces communs),12,stairs
+24,15 squats en salle de repos,Moyen,Au bureau (espaces communs),12,dumbbell
+25,10 rotations de chevilles assis,Moyen,Au bureau (espaces communs),10,refresh
+26,Marche rapide (15 min),Moyen,Extérieur,12,walk
+27,10 flexions jambes en attendant métro,Moyen,Extérieur,10,bus
+28,Aller au travail à pied/vélo (1x/semaine),Moyen,Extérieur,15,bike
+29,7500 pas dans la journée,Moyen,Extérieur,15,footprints
+30,Balade de 20 min en fin de journée,Moyen,Extérieur,14,trees
+31,Gainage contre mur (1 min),Difficile,Au bureau (poste),15,grip-horizontal
+32,20 squats en plusieurs fois,Difficile,Au bureau (poste),15,run
+33,50 extensions de mollets,Difficile,Au bureau (poste),15,walk
+34,Planche sur chaise (2 min),Difficile,Au bureau (poste),18,grip-horizontal
+35,50 contractions abdos assis,Difficile,Au bureau (poste),15,user
+36,Escaliers uniquement (5 jours consécutifs),Difficile,Au bureau (espaces communs),20,stairs
+37,Marche 10 min après déjeuner (3 jours),Difficile,Au bureau (espaces communs),20,walk
+38,Défi collectif avec 3 collègues,Difficile,Au bureau (espaces communs),15,users
+39,Se lever et marcher toutes les 30 min,Difficile,Au bureau (espaces communs),18,clock
+40,3 min de montées de genoux salle de repos,Difficile,Au bureau (espaces communs),18,run
+41,10000 pas dans la journée,Difficile,Extérieur,20,footprints
+42,Balade de 30 min après le travail,Difficile,Extérieur,20,trees
+43,Aller au travail à vélo (3x/semaine),Difficile,Extérieur,25,bike
+44,Marcher/courir 5 km en dehors du bureau,Difficile,Extérieur,25,footprints
+45,Séance collective sportive extérieure,Difficile,Extérieur,22,users
diff --git a/AppGCC/daily_challenges.csv b/AppGCC/daily_challenges.csv
new file mode 100644
index 0000000000000000000000000000000000000000..3cb403f3377c41ef130e14b1c756eea95551de3c
--- /dev/null
+++ b/AppGCC/daily_challenges.csv
@@ -0,0 +1,10 @@
+2025-03-12,2,6,13,2
+2025-03-12,,27,25,20
+2025-03-12,,27,18,23
+2025-03-12,,16,22,26
+2025-03-12,,21,18,30
+2025-03-12,,17,30,25
+2025-03-12,,28,23,18
+2025-03-12,,20,27,21
+2025-03-12,17,18,21,30
+2025-03-12,18,16,22,30
diff --git a/AppGCC/db.sqlite3 b/AppGCC/db.sqlite3
index f21d9ca5db21335b19df8d003f88b2e3ea556a4d..eb72f9af66c28b8622af1470cdf392b46c5d79fa 100644
Binary files a/AppGCC/db.sqlite3 and b/AppGCC/db.sqlite3 differ
diff --git a/AppGCC/difficulties.csv b/AppGCC/difficulties.csv
new file mode 100644
index 0000000000000000000000000000000000000000..832a26c83832183e9382ceb7bfe89207c0d2199e
--- /dev/null
+++ b/AppGCC/difficulties.csv
@@ -0,0 +1,2 @@
+2,difficile
+17,difficile
diff --git a/AppGCC/scores.csv b/AppGCC/scores.csv
new file mode 100644
index 0000000000000000000000000000000000000000..786a23c5fd658bf122cd595b1be93ef1ce911e97
--- /dev/null
+++ b/AppGCC/scores.csv
@@ -0,0 +1,4 @@
+user_id,score
+2,49
+17,10
+18,26
diff --git a/AppGCC/users.csv b/AppGCC/users.csv
new file mode 100644
index 0000000000000000000000000000000000000000..aa3eb09c046fcb82b4d9a042275965cbb7939982
--- /dev/null
+++ b/AppGCC/users.csv
@@ -0,0 +1,6 @@
+12,Bonjour
+13,qqqqq
+14,dffsd
+15,uuuuuuuu
+17,oiewuytourytyretyutyttyrtyruryturyturtyruty
+18,yyyyy