feat(docs): add technical features documentation and apply consistent formatting
Added a detailed technical features section to the documentation, covering key functionalities of Memegoat. Improved consistency in formatting across documentation and source files.
This commit is contained in:
@@ -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"
|
||||
}
|
||||
|
||||
57
documentation/content/docs/features.mdx
Normal file
57
documentation/content/docs/features.mdx
Normal file
@@ -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).
|
||||
@@ -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": {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<string, Promise<unknown>>();
|
||||
|
||||
function cachePromise<T>(key: string, setPromise: () => Promise<T>): Promise<T> {
|
||||
function cachePromise<T>(
|
||||
key: string,
|
||||
setPromise: () => Promise<T>,
|
||||
): Promise<T> {
|
||||
const cached = cache.get(key);
|
||||
if (cached) return cached as Promise<T>;
|
||||
|
||||
@@ -28,19 +31,21 @@ function cachePromise<T>(key: string, setPromise: () => Promise<T>): Promise<T>
|
||||
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 }}
|
||||
/>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user