diff --git a/documentation/content/docs/_meta.json b/documentation/content/docs/_meta.json index 31cfcb4..395369b 100644 --- a/documentation/content/docs/_meta.json +++ b/documentation/content/docs/_meta.json @@ -1,10 +1,10 @@ { - "index": "Introduction", - "features": "Fonctionnalités", - "stack": "Stack Technologique", - "database": "Modèle de Données", - "api": "API & Intégrations", - "security": "Sécurité", - "compliance": "Conformité (RGPD)", - "deployment": "Déploiement & Tests" + "index": "Introduction", + "features": "Fonctionnalités", + "stack": "Stack Technologique", + "database": "Modèle de Données", + "api": "API & Intégrations", + "security": "Sécurité", + "compliance": "Conformité (RGPD)", + "deployment": "Déploiement & Tests" } diff --git a/documentation/content/docs/features.mdx b/documentation/content/docs/features.mdx new file mode 100644 index 0000000..5d501cb --- /dev/null +++ b/documentation/content/docs/features.mdx @@ -0,0 +1,57 @@ +--- +title: Fonctionnalités Techniques +description: Détails des fonctionnalités clés du projet Memegoat +--- + +## 🚀 Fonctionnalités Techniques + +Le projet Memegoat intègre un ensemble de fonctionnalités avancées pour garantir une expérience utilisateur fluide, sécurisée et performante. + +### 📧 Emailing +Le système intègre un service d'envoi d'emails pour : +- La vérification des comptes lors de l'inscription. +- La récupération de mots de passe. +- Les notifications de sécurité (nouvelles connexions, changements de profil). +- Les alertes de modération. + +### 📦 Stockage S3 (MinIO) +Pour la gestion des médias, Memegoat utilise **MinIO**, une solution de stockage d'objets compatible S3, auto-hébergée. +- **Sécurité** : Le serveur MinIO est isolé dans le réseau interne de Docker et n'est pas exposé directement sur internet. +- **Accès** : Le Backend fait office de proxy ou génère des URLs présignées pour l'accès aux fichiers, garantissant un contrôle total sur la diffusion des contenus. +- **Performance** : Optimisé pour le service rapide de fichiers volumineux comme les GIFs. + +### 🔍 SEO & Partage +La plateforme est optimisée pour le référencement naturel et le partage social : +- **Metatags dynamiques** : Génération de balises OpenGraph et Twitter Cards pour chaque mème. +- **Indexation** : Structure sémantique HTML5 et Sitemap dynamique. +- **Rendus côté serveur (SSR)** : Utilisation de Next.js pour un affichage instantané et une indexation parfaite par les robots. + +### 🔗 URLs de Terminaison +À l'instar de plateformes comme Tenor, Memegoat utilise des structures d'URLs courtes et sémantiques : +- Format : `memegoat.fr/m/[slug-unique]` ou `memegoat.fr/g/[slug-unique]`. +- Les slugs sont générés de manière à être lisibles par l'humain tout en garantissant l'unicité. + +### 🕵️ Audit des Actions +Chaque action sensible sur la plateforme est tracée dans la table `audit_logs` : +- Modification de profil, suppression de contenu, changements de permissions. +- Enregistrement de l'auteur, de l'action, de l'horodatage et des détails techniques (IP hachée, User-Agent). +- Outil essentiel pour la sécurité et la conformité RGPD. + +### 👤 Gestion du Profil +Un système complet de gestion de profil permet aux utilisateurs de : +- Gérer leurs informations personnelles (nom d'affichage, avatar). +- Configurer la **Double Authentification (2FA)**. +- Consulter leurs sessions actives et révoquer des accès. +- Les données sensibles sont protégées par **chiffrement PGP** au repos. + +### 🚩 Gestion des Signalements +Un système de modération intégré permet de maintenir la qualité du contenu : +- Signalement de contenus (mèmes, GIFs) ou de tags inappropriés. +- Workflow de traitement : `pending` -> `reviewed` -> `resolved` / `dismissed`. +- Purge automatique des signalements obsolètes pour respecter la minimisation des données (RGPD). + +### 📤 Publication de Contenu +Le coeur de la plateforme permet la publication de mèmes et de GIFs : +- Support des formats images standards et animés. +- Système de **Tags** pour catégoriser et faciliter la recherche. +- Gestion du cycle de vie des contenus (Publication, Edition, Soft Delete). diff --git a/documentation/package.json b/documentation/package.json index 9951eae..e00c21c 100644 --- a/documentation/package.json +++ b/documentation/package.json @@ -9,6 +9,7 @@ "types:check": "fumadocs-mdx && next typegen && tsc --noEmit", "postinstall": "fumadocs-mdx", "lint": "biome check", + "lint:write": "biome check --write", "format": "biome format --write" }, "dependencies": { diff --git a/documentation/source.config.ts b/documentation/source.config.ts index 1970bed..e47d798 100644 --- a/documentation/source.config.ts +++ b/documentation/source.config.ts @@ -4,7 +4,7 @@ import { frontmatterSchema, metaSchema, } from "fumadocs-mdx/config"; -import {remarkMdxMermaid} from "fumadocs-core/mdx-plugins"; +import { remarkMdxMermaid } from "fumadocs-core/mdx-plugins"; // You can customise Zod schemas for frontmatter and `meta.json` here // see https://fumadocs.dev/docs/mdx/collections diff --git a/documentation/src/components/mdx/mermaid.tsx b/documentation/src/components/mdx/mermaid.tsx index cf7724b..95583f0 100644 --- a/documentation/src/components/mdx/mermaid.tsx +++ b/documentation/src/components/mdx/mermaid.tsx @@ -1,7 +1,7 @@ -'use client'; +"use client"; -import { use, useEffect, useId, useState } from 'react'; -import { useTheme } from 'next-themes'; +import { use, useEffect, useId, useState } from "react"; +import { useTheme } from "next-themes"; export function Mermaid({ chart }: { chart: string }) { const [mounted, setMounted] = useState(false); @@ -16,7 +16,10 @@ export function Mermaid({ chart }: { chart: string }) { const cache = new Map>(); -function cachePromise(key: string, setPromise: () => Promise): Promise { +function cachePromise( + key: string, + setPromise: () => Promise, +): Promise { const cached = cache.get(key); if (cached) return cached as Promise; @@ -28,19 +31,21 @@ function cachePromise(key: string, setPromise: () => Promise): Promise function MermaidContent({ chart }: { chart: string }) { const id = useId(); const { resolvedTheme } = useTheme(); - const { default: mermaid } = use(cachePromise('mermaid', () => import('mermaid'))); + const { default: mermaid } = use( + cachePromise("mermaid", () => import("mermaid")), + ); mermaid.initialize({ startOnLoad: false, - securityLevel: 'loose', - fontFamily: 'inherit', - themeCSS: 'margin: 1.5rem auto 0;', - theme: resolvedTheme === 'dark' ? 'dark' : 'default', + securityLevel: "loose", + fontFamily: "inherit", + themeCSS: "margin: 1.5rem auto 0;", + theme: resolvedTheme === "dark" ? "dark" : "default", }); const { svg, bindFunctions } = use( cachePromise(`${chart}-${resolvedTheme}`, () => { - return mermaid.render(id, chart.replaceAll('\\n', '\n')); + return mermaid.render(id, chart.replaceAll("\\n", "\n")); }), ); @@ -53,4 +58,4 @@ function MermaidContent({ chart }: { chart: string }) { dangerouslySetInnerHTML={{ __html: svg }} /> ); -} \ No newline at end of file +} diff --git a/documentation/src/mdx-components.tsx b/documentation/src/mdx-components.tsx index 99db069..e67868e 100644 --- a/documentation/src/mdx-components.tsx +++ b/documentation/src/mdx-components.tsx @@ -1,6 +1,6 @@ import defaultMdxComponents from "fumadocs-ui/mdx"; import type { MDXComponents } from "mdx/types"; -import {Mermaid} from "@/components/mdx/mermaid"; +import { Mermaid } from "@/components/mdx/mermaid"; export function getMDXComponents(components?: MDXComponents): MDXComponents { return {