1
0

2 Commity fdb1322c5f ... 74b8e4f87a

Autor SHA1 Správa Dátum
  gpt-engineer-app[bot] 74b8e4f87a Ajouter bannière cookies RGPD 2 týždňov pred
  gpt-engineer-app[bot] 4e13bcc3bb Changes 2 týždňov pred

+ 6 - 0
public/sitemap.xml

@@ -24,4 +24,10 @@
     <changefreq>weekly</changefreq>
     <priority>0.6</priority>
   </url>
+  <url>
+    <loc>https://feeds.duhaz.fr/politique-cookies</loc>
+    <lastmod>2025-11-18T00:00:00+00:00</lastmod>
+    <changefreq>monthly</changefreq>
+    <priority>0.4</priority>
+  </url>
 </urlset>

+ 4 - 0
src/App.tsx

@@ -11,7 +11,9 @@ import NotFound from "./pages/NotFound";
 import Auth from "./pages/Auth";
 import Gone from "./pages/Gone";
 import Changelog from "./pages/Changelog";
+import PolitiqueCookies from "./pages/PolitiqueCookies";
 import LegacyRedirect from "./components/LegacyRedirect";
+import { CookieBanner } from "./components/CookieBanner";
 
 const queryClient = new QueryClient();
 
@@ -28,6 +30,7 @@ const App = () => (
           <Route path="/feed/:feedId" element={<FeedDetail />} />
           <Route path="/auth" element={<Auth />} />
           <Route path="/changelog" element={<Changelog />} />
+          <Route path="/politique-cookies" element={<PolitiqueCookies />} />
           <Route path="/gone" element={<Gone />} />
           
           {/* Legacy URL redirects */}
@@ -37,6 +40,7 @@ const App = () => (
           {/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL "*" ROUTE */}
           <Route path="*" element={<NotFound />} />
         </Routes>
+        <CookieBanner />
       </BrowserRouter>
     </TooltipProvider>
   </QueryClientProvider>

+ 68 - 0
src/components/CookieBanner.tsx

@@ -0,0 +1,68 @@
+import { useState, useEffect } from 'react';
+import { Link } from 'react-router-dom';
+import { Button } from '@/components/ui/button';
+import { Card } from '@/components/ui/card';
+import { X } from 'lucide-react';
+
+export function CookieBanner() {
+  const [isVisible, setIsVisible] = useState(false);
+
+  useEffect(() => {
+    const consent = localStorage.getItem('cookie-consent');
+    if (!consent) {
+      setIsVisible(true);
+    }
+  }, []);
+
+  const handleAccept = () => {
+    localStorage.setItem('cookie-consent', 'accepted');
+    setIsVisible(false);
+  };
+
+  const handleDecline = () => {
+    localStorage.setItem('cookie-consent', 'declined');
+    setIsVisible(false);
+  };
+
+  if (!isVisible) return null;
+
+  return (
+    <div className="fixed bottom-0 left-0 right-0 z-50 p-4 animate-in slide-in-from-bottom-5">
+      <Card className="max-w-4xl mx-auto p-6 shadow-lg border-border bg-card">
+        <div className="flex items-start gap-4">
+          <div className="flex-1">
+            <h3 className="text-lg font-semibold text-foreground mb-2">
+              🍪 Gestion des cookies
+            </h3>
+            <p className="text-sm text-muted-foreground mb-4">
+              Nous utilisons des cookies essentiels pour assurer le fonctionnement de l'authentification 
+              et mémoriser vos préférences d'interface. Aucun cookie de suivi ou publicitaire n'est utilisé.
+            </p>
+            <Link 
+              to="/politique-cookies" 
+              className="text-sm text-primary hover:underline"
+            >
+              En savoir plus sur notre politique de cookies
+            </Link>
+          </div>
+          <Button
+            variant="ghost"
+            size="icon"
+            onClick={handleDecline}
+            className="shrink-0"
+          >
+            <X className="h-4 w-4" />
+          </Button>
+        </div>
+        <div className="flex gap-3 mt-4">
+          <Button onClick={handleAccept} className="flex-1 sm:flex-none">
+            Accepter
+          </Button>
+          <Button onClick={handleDecline} variant="outline" className="flex-1 sm:flex-none">
+            Refuser
+          </Button>
+        </div>
+      </Card>
+    </div>
+  );
+}

+ 168 - 0
src/pages/PolitiqueCookies.tsx

@@ -0,0 +1,168 @@
+import { Link } from 'react-router-dom';
+import { Button } from '@/components/ui/button';
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
+import { ArrowLeft } from 'lucide-react';
+import { SEO } from '@/components/SEO';
+
+export default function PolitiqueCookies() {
+  return (
+    <div className="min-h-screen bg-background">
+      <SEO
+        title="Politique de cookies - Feeds.Duhaz.fr"
+        description="Découvrez quels cookies nous utilisons et comment nous respectons votre vie privée sur Feeds.Duhaz.fr"
+        canonical="https://feeds.duhaz.fr/politique-cookies"
+      />
+      
+      <div className="container mx-auto px-4 py-8 max-w-4xl">
+        <Button
+          variant="ghost"
+          asChild
+          className="mb-6"
+        >
+          <Link to="/">
+            <ArrowLeft className="mr-2 h-4 w-4" />
+            Retour à l'accueil
+          </Link>
+        </Button>
+
+        <div className="space-y-6">
+          <div>
+            <h1 className="text-4xl font-bold text-foreground mb-2">
+              Politique de cookies
+            </h1>
+            <p className="text-muted-foreground">
+              Dernière mise à jour : 18 novembre 2025
+            </p>
+          </div>
+
+          <Card>
+            <CardHeader>
+              <CardTitle>Qu'est-ce qu'un cookie ?</CardTitle>
+            </CardHeader>
+            <CardContent className="space-y-4">
+              <p className="text-muted-foreground">
+                Un cookie est un petit fichier texte stocké sur votre appareil lors de votre visite sur un site web. 
+                Les cookies permettent au site de mémoriser certaines informations sur votre visite.
+              </p>
+            </CardContent>
+          </Card>
+
+          <Card>
+            <CardHeader>
+              <CardTitle>Cookies utilisés sur Feeds.Duhaz.fr</CardTitle>
+              <CardDescription>
+                Nous utilisons uniquement des cookies essentiels au fonctionnement du site
+              </CardDescription>
+            </CardHeader>
+            <CardContent className="space-y-6">
+              <div>
+                <h3 className="font-semibold text-foreground mb-2">
+                  1. Cookies d'authentification (Supabase)
+                </h3>
+                <div className="space-y-2 text-sm text-muted-foreground">
+                  <p><strong>Finalité :</strong> Gérer votre session de connexion et maintenir votre authentification</p>
+                  <p><strong>Durée :</strong> Session ou jusqu'à expiration du token (définie par Supabase)</p>
+                  <p><strong>Type :</strong> Cookie essentiel - requis pour le fonctionnement du site</p>
+                  <p><strong>Données stockées :</strong> Token d'authentification, identifiant de session</p>
+                  <p><strong>Fournisseur :</strong> Supabase (hébergement sécurisé)</p>
+                </div>
+              </div>
+
+              <div>
+                <h3 className="font-semibold text-foreground mb-2">
+                  2. Cookie de préférence d'interface
+                </h3>
+                <div className="space-y-2 text-sm text-muted-foreground">
+                  <p><strong>Nom :</strong> sidebar:state</p>
+                  <p><strong>Finalité :</strong> Mémoriser l'état (ouvert/fermé) de la barre latérale</p>
+                  <p><strong>Durée :</strong> 7 jours</p>
+                  <p><strong>Type :</strong> Cookie fonctionnel - améliore votre expérience utilisateur</p>
+                  <p><strong>Données stockées :</strong> État de la barre latérale (true/false)</p>
+                </div>
+              </div>
+
+              <div>
+                <h3 className="font-semibold text-foreground mb-2">
+                  3. Cookie de consentement
+                </h3>
+                <div className="space-y-2 text-sm text-muted-foreground">
+                  <p><strong>Nom :</strong> cookie-consent</p>
+                  <p><strong>Finalité :</strong> Mémoriser votre choix concernant l'acceptation des cookies</p>
+                  <p><strong>Durée :</strong> Permanent (localStorage)</p>
+                  <p><strong>Type :</strong> Cookie essentiel</p>
+                  <p><strong>Données stockées :</strong> Votre consentement (accepted/declined)</p>
+                </div>
+              </div>
+            </CardContent>
+          </Card>
+
+          <Card>
+            <CardHeader>
+              <CardTitle>Cookies non utilisés</CardTitle>
+            </CardHeader>
+            <CardContent>
+              <p className="text-muted-foreground">
+                Nous <strong>n'utilisons pas</strong> de cookies de :
+              </p>
+              <ul className="list-disc list-inside space-y-1 text-muted-foreground mt-2">
+                <li>Suivi publicitaire</li>
+                <li>Analytics ou statistiques</li>
+                <li>Réseaux sociaux tiers</li>
+                <li>Marketing ou ciblage</li>
+              </ul>
+            </CardContent>
+          </Card>
+
+          <Card>
+            <CardHeader>
+              <CardTitle>Gestion de vos cookies</CardTitle>
+            </CardHeader>
+            <CardContent className="space-y-4">
+              <p className="text-muted-foreground">
+                Vous pouvez à tout moment supprimer les cookies stockés sur votre navigateur via les paramètres de celui-ci :
+              </p>
+              <ul className="list-disc list-inside space-y-1 text-muted-foreground">
+                <li><strong>Chrome :</strong> Paramètres → Confidentialité et sécurité → Cookies</li>
+                <li><strong>Firefox :</strong> Paramètres → Vie privée et sécurité → Cookies</li>
+                <li><strong>Safari :</strong> Préférences → Confidentialité → Gérer les données</li>
+                <li><strong>Edge :</strong> Paramètres → Cookies et autorisations du site</li>
+              </ul>
+              <p className="text-sm text-muted-foreground mt-4">
+                ⚠️ Attention : La suppression des cookies d'authentification vous déconnectera du site.
+              </p>
+            </CardContent>
+          </Card>
+
+          <Card>
+            <CardHeader>
+              <CardTitle>Conformité RGPD</CardTitle>
+            </CardHeader>
+            <CardContent className="space-y-2">
+              <p className="text-muted-foreground">
+                Conformément au Règlement Général sur la Protection des Données (RGPD), nous vous informons 
+                de l'utilisation de cookies essentiels et fonctionnels sur notre site.
+              </p>
+              <p className="text-muted-foreground">
+                Ces cookies étant strictement nécessaires au fonctionnement du service ou améliorant uniquement 
+                votre expérience utilisateur sans tracer votre navigation, leur utilisation ne nécessite pas 
+                de consentement préalable selon l'article 82 de la loi Informatique et Libertés.
+              </p>
+            </CardContent>
+          </Card>
+
+          <Card>
+            <CardHeader>
+              <CardTitle>Contact</CardTitle>
+            </CardHeader>
+            <CardContent>
+              <p className="text-muted-foreground">
+                Pour toute question concernant notre politique de cookies, vous pouvez nous contacter 
+                via les informations disponibles sur notre site.
+              </p>
+            </CardContent>
+          </Card>
+        </div>
+      </div>
+    </div>
+  );
+}