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",
|
"index": "Introduction",
|
||||||
"features": "Fonctionnalités",
|
"features": "Fonctionnalités",
|
||||||
"stack": "Stack Technologique",
|
"stack": "Stack Technologique",
|
||||||
"database": "Modèle de Données",
|
"database": "Modèle de Données",
|
||||||
"api": "API & Intégrations",
|
"api": "API & Intégrations",
|
||||||
"security": "Sécurité",
|
"security": "Sécurité",
|
||||||
"compliance": "Conformité (RGPD)",
|
"compliance": "Conformité (RGPD)",
|
||||||
"deployment": "Déploiement & Tests"
|
"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",
|
"types:check": "fumadocs-mdx && next typegen && tsc --noEmit",
|
||||||
"postinstall": "fumadocs-mdx",
|
"postinstall": "fumadocs-mdx",
|
||||||
"lint": "biome check",
|
"lint": "biome check",
|
||||||
|
"lint:write": "biome check --write",
|
||||||
"format": "biome format --write"
|
"format": "biome format --write"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import {
|
|||||||
frontmatterSchema,
|
frontmatterSchema,
|
||||||
metaSchema,
|
metaSchema,
|
||||||
} from "fumadocs-mdx/config";
|
} 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
|
// You can customise Zod schemas for frontmatter and `meta.json` here
|
||||||
// see https://fumadocs.dev/docs/mdx/collections
|
// see https://fumadocs.dev/docs/mdx/collections
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
'use client';
|
"use client";
|
||||||
|
|
||||||
import { use, useEffect, useId, useState } from 'react';
|
import { use, useEffect, useId, useState } from "react";
|
||||||
import { useTheme } from 'next-themes';
|
import { useTheme } from "next-themes";
|
||||||
|
|
||||||
export function Mermaid({ chart }: { chart: string }) {
|
export function Mermaid({ chart }: { chart: string }) {
|
||||||
const [mounted, setMounted] = useState(false);
|
const [mounted, setMounted] = useState(false);
|
||||||
@@ -16,7 +16,10 @@ export function Mermaid({ chart }: { chart: string }) {
|
|||||||
|
|
||||||
const cache = new Map<string, Promise<unknown>>();
|
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);
|
const cached = cache.get(key);
|
||||||
if (cached) return cached as Promise<T>;
|
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 }) {
|
function MermaidContent({ chart }: { chart: string }) {
|
||||||
const id = useId();
|
const id = useId();
|
||||||
const { resolvedTheme } = useTheme();
|
const { resolvedTheme } = useTheme();
|
||||||
const { default: mermaid } = use(cachePromise('mermaid', () => import('mermaid')));
|
const { default: mermaid } = use(
|
||||||
|
cachePromise("mermaid", () => import("mermaid")),
|
||||||
|
);
|
||||||
|
|
||||||
mermaid.initialize({
|
mermaid.initialize({
|
||||||
startOnLoad: false,
|
startOnLoad: false,
|
||||||
securityLevel: 'loose',
|
securityLevel: "loose",
|
||||||
fontFamily: 'inherit',
|
fontFamily: "inherit",
|
||||||
themeCSS: 'margin: 1.5rem auto 0;',
|
themeCSS: "margin: 1.5rem auto 0;",
|
||||||
theme: resolvedTheme === 'dark' ? 'dark' : 'default',
|
theme: resolvedTheme === "dark" ? "dark" : "default",
|
||||||
});
|
});
|
||||||
|
|
||||||
const { svg, bindFunctions } = use(
|
const { svg, bindFunctions } = use(
|
||||||
cachePromise(`${chart}-${resolvedTheme}`, () => {
|
cachePromise(`${chart}-${resolvedTheme}`, () => {
|
||||||
return mermaid.render(id, chart.replaceAll('\\n', '\n'));
|
return mermaid.render(id, chart.replaceAll("\\n", "\n"));
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import defaultMdxComponents from "fumadocs-ui/mdx";
|
import defaultMdxComponents from "fumadocs-ui/mdx";
|
||||||
import type { MDXComponents } from "mdx/types";
|
import type { MDXComponents } from "mdx/types";
|
||||||
import {Mermaid} from "@/components/mdx/mermaid";
|
import { Mermaid } from "@/components/mdx/mermaid";
|
||||||
|
|
||||||
export function getMDXComponents(components?: MDXComponents): MDXComponents {
|
export function getMDXComponents(components?: MDXComponents): MDXComponents {
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user