diff --git a/documentation/content/docs/_meta.json b/documentation/content/docs/_meta.json index 395369b..87e801a 100644 --- a/documentation/content/docs/_meta.json +++ b/documentation/content/docs/_meta.json @@ -1,10 +1,27 @@ { "index": "Introduction", + "---core---": { + "type": "separator", + "label": "Architecture Core" + }, "features": "Fonctionnalités", "stack": "Stack Technologique", "database": "Modèle de Données", - "api": "API & Intégrations", + "---security---": { + "type": "separator", + "label": "Sécurité & Conformité" + }, "security": "Sécurité", "compliance": "Conformité (RGPD)", + "---api---": { + "type": "separator", + "label": "Intégrations & API" + }, + "api": "API & Intégrations", + "api-reference": "Référence API", + "---ops---": { + "type": "separator", + "label": "Opérations" + }, "deployment": "Déploiement & Tests" } diff --git a/documentation/content/docs/api-reference.mdx b/documentation/content/docs/api-reference.mdx new file mode 100644 index 0000000..5aaa090 --- /dev/null +++ b/documentation/content/docs/api-reference.mdx @@ -0,0 +1,191 @@ +--- +title: Référence API +description: Documentation détaillée de tous les points de terminaison de l'API Memegoat. +--- + +## 📖 Référence API + +Cette page documente tous les points de terminaison disponibles sur l'API Memegoat. L'URL de base de l'API est `https://api.memegoat.fr`. + + + L'authentification est gérée via des **cookies HttpOnly sécurisés** (`iron-session`). Les tokens ne sont pas exposés dans le corps des réponses après connexion pour une sécurité maximale. + + +### 🔐 Authentification (`/auth`) + + + + Inscrit un nouvel utilisateur. + + **Corps de la requête (JSON) :** + - `username` (string) : Nom d'utilisateur unique. + - `email` (string) : Adresse email valide. + - `password` (string) : Mot de passe (min. 8 caractères). + + ```json + { + "username": "goat_user", + "email": "user@memegoat.fr", + "password": "strong-password" + } + ``` + + + + Authentifie un utilisateur et retourne les jetons de session. Si la 2FA est activée, retourne un indicateur. + + **Corps de la requête :** + - `email` (string) + - `password` (string) + + **Réponse (Succès) :** + ```json + { + "message": "User logged in successfully", + "userId": "uuid-v4" + } + ``` + *Note: L'access_token et le refresh_token sont stockés dans un cookie HttpOnly chiffré.* + + **Réponse (2FA requise) :** + ```json + { + "message": "2FA required", + "requires2FA": true, + "userId": "uuid-v4" + } + ``` + + + + Finalise la connexion si la 2FA est requise. + + **Corps de la requête :** + - `userId` (uuid) : ID de l'utilisateur. + - `token` (string) : Code TOTP à 6 chiffres. + + + + Obtient un nouvel `access_token` à partir du `refresh_token` stocké dans la session. + Met à jour automatiquement le cookie de session. + + + + Invalide la session actuelle. + + + +### 👤 Utilisateurs (`/users`) + + + + Récupère les informations détaillées de l'utilisateur connecté. Requiert l'authentification. + + + + Extrait l'intégralité des données de l'utilisateur au format JSON (Conformité RGPD). + Contient le profil, les contenus et les favoris. + + + + Met à jour les informations du profil. + - `displayName` (string) + + + + Marque le compte pour suppression (Soft Delete). + + Les données sont définitivement purgées après un délai légal de 30 jours. + + + + + - `POST /users/me/2fa/setup` : Génère un secret et QR Code. + - `POST /users/me/2fa/enable` : Active après vérification du jeton. + - `POST /users/me/2fa/disable` : Désactive avec jeton. + + + + Liste tous les utilisateurs. Réservé aux administrateurs. + **Params :** `limit`, `offset`. + + + +### 🖼️ Contenus (`/contents`) + + + + Recherche et filtre les contenus. Ces endpoints sont mis en cache (Redis + Navigateur). + + **Query Params :** + - `sort` : `trend` | `recent` (uniquement sur `/explore`) + - `tag` (string) + - `category` (slug ou id) + - `author` (username) + - `query` (titre) + - `favoritesOnly` (bool) + + + + Récupère un contenu par son ID ou son Slug. + + **Détection de Bots (SEO) :** + Si l'User-Agent correspond à un robot d'indexation (Googlebot, Twitterbot, etc.), l'API retourne un rendu HTML minimal contenant les méta-tags **OpenGraph** et **Twitter Cards** pour un partage optimal. Pour les autres clients, les données sont retournées en JSON. + + + + Upload un fichier avec traitement automatique. + **Type :** `multipart/form-data` + + **Champs :** + - `file` (binary) : png, jpeg, webp, webm, gif. + - `type` : `meme` | `gif` + - `title` : string + - `categoryId`? : uuid + - `tags`? : string[] + + + + Incrémente les statistiques de vue ou d'utilisation. + + + + Supprime un contenu (Soft Delete). Doit être l'auteur. + + + +### 📂 Catégories, ⭐ Favoris, 🚩 Signalements + + + + - `GET /categories` : Liste toutes les catégories. + - `POST /categories` : Création (Admin uniquement). + + + + - `GET /favorites` : Liste les favoris de l'utilisateur. + - `POST /favorites/:contentId` : Ajoute un favori. + - `DELETE /favorites/:contentId` : Retire un favori. + + + + - `POST /reports` : Signale un contenu ou un tag. + - `GET /reports` : Liste (Modérateurs). + - `PATCH /reports/:id/status` : Gère le workflow. + + + +### 🔑 Clés API & 🏷️ Tags + + + + - `POST /api-keys` : Génère une clé `{ name, expiresAt? }`. + - `GET /api-keys` : Liste les clés actives. + - `DELETE /api-keys/:id` : Révoque une clé. + + + + - `GET /tags` : Recherche de tags populaires ou récents. + **Params :** `query`, `sort`, `limit`. + + diff --git a/documentation/content/docs/api.mdx b/documentation/content/docs/api.mdx index 4429ca6..59f3a84 100644 --- a/documentation/content/docs/api.mdx +++ b/documentation/content/docs/api.mdx @@ -7,14 +7,18 @@ description: Documentation des API et services tiers ### Documentation API -Documentation MDX. +L'API Memegoat est documentée de manière exhaustive dans notre [Référence API](/docs/api-reference). +Vous y trouverez la liste de tous les points de terminaison, les formats de requête et de réponse, ainsi que les niveaux d'autorisation requis. ### Authentification -Le système utilise plusieurs méthodes d'authentification sécurisées : -- **Sessions (JWT)** : Utilisation de JSON Web Tokens signés pour les sessions utilisateurs via le web. Les sessions sont persistées en base de données (`sessions`) pour permettre la révocation (Logout) et le suivi des appareils connectés. -- **API Keys** : Pour les intégrations programmatiques. Les clés sont hachées en base de données (`key_hash`) et associées à un utilisateur. Elles peuvent être nommées et révoquées individuellement. -- **Double Authentification (2FA)** : Support natif (TOTP) avec secret chiffré en base de données. +Le système utilise plusieurs méthodes d'authentification sécurisées pour répondre à différents besoins : + + + + + + ### Webhooks / Services Externes diff --git a/documentation/content/docs/compliance.mdx b/documentation/content/docs/compliance.mdx index e50df44..192f051 100644 --- a/documentation/content/docs/compliance.mdx +++ b/documentation/content/docs/compliance.mdx @@ -9,9 +9,11 @@ Le projet Memegoat s'inscrit dans une démarche de respect de la vie privée et ### 🛡️ Principes Fondamentaux -- **Minimisation des données** : Seules les données strictement nécessaires au fonctionnement du service sont collectées. -- **Transparence** : Les utilisateurs sont informés de la finalité des traitements de leurs données. -- **Sécurité** : Mise en œuvre de mesures techniques et organisationnelles pour protéger les données. + + + + + ### 🔒 Mesures Techniques de Protection @@ -20,19 +22,35 @@ Conformément à la section [Sécurité](/docs/security), les mesures suivantes - **Hachage aveugle** : Pour permettre les opérations sur données chiffrées sans compromettre la confidentialité. - **Hachage des mots de passe** : Utilisation de l'algorithme **Argon2id**. - **Communications sécurisées** : Utilisation de **TLS 1.3** via Caddy. +- **Suivi des Erreurs (Sentry)** : Configuration conforme avec désactivation de l'envoi des PII (Personally Identifiable Information) et masquage des données sensibles. ### 👤 Droits des Utilisateurs -Conformément au RGPD, les utilisateurs disposent des droits suivants, facilités par l'architecture technique : -- **Droit à l'effacement (droit à l'oubli)** : Mis en œuvre via un mécanisme de **Soft Delete** (`deleted_at`), suivi d'une purge définitive des données après un délai de conservation légal. -- **Droit d'accès et portabilité** : L'utilisation de schémas structurés (Drizzle/PostgreSQL) permet l'extraction facile des données d'un utilisateur sur demande. -- **Gestion du consentement** : Suivi rigoureux des versions de CGU et de politique de confidentialité acceptées (`terms_version`, `privacy_version`, `gdpr_accepted_at`). +Conformément au RGPD, les utilisateurs disposent des droits suivants : + + + Mis en œuvre via un mécanisme de **Soft Delete** (`deleted_at`), suivi d'une purge définitive après 30 jours. + + + + Route dédiée `GET /users/me/export` permettant l'extraction immédiate au format JSON. + + + + Suivi des versions de CGU et politique de confidentialité (`terms_version`, `privacy_version`). + ### ⏳ Conservation et Purge -- **Purge Automatique** : Les données liées aux signalements (`reports`) disposent d'une date d'expiration (`expires_at`) pour garantir qu'elles ne sont pas conservées au-delà du nécessaire. -- **Anonymisation technique** : Les adresses IP stockées dans les tables `audit_logs` et `sessions` sont hachées (`ip_hash`), ce qui permet d'identifier des comportements malveillants tout en protégeant l'identité réelle de l'utilisateur. -- **Logs d'Audit** : Les journaux d'audit sont conservés pendant une période glissante pour répondre aux obligations de sécurité tout en respectant la minimisation. +- **Purge Automatique (Jobs Cron)** : Un service de purge planifiée s'exécute régulièrement pour : + - Supprimer définitivement les comptes et contenus marqués pour suppression depuis plus de 30 jours. + - Nettoyer les sessions expirées ou révoquées. + - Supprimer les signalements (`reports`) ayant atteint leur date d'expiration. + + + Les adresses IP sont hachées (`ip_hash`) via SHA-256 dans les logs d'audit et de session. + +- **Logs d'Audit** : Les journaux d'audit sont conservés pour répondre aux obligations de sécurité tout en respectant la minimisation. ### 📍 Hébergement des Données diff --git a/documentation/content/docs/database.mdx b/documentation/content/docs/database.mdx index b9f0b12..efee022 100644 --- a/documentation/content/docs/database.mdx +++ b/documentation/content/docs/database.mdx @@ -17,12 +17,16 @@ erDiagram USER ||--o{ SESSION : "detient" USER ||--o{ API_KEY : "genere" USER ||--o{ AUDIT_LOG : "genere" + USER ||--o{ FAVORITE : "ajoute" CONTENT ||--o{ CONTENT_TAG : "possede" TAG ||--o{ CONTENT_TAG : "est_lie_a" CONTENT ||--o{ REPORT : "est_signale" + CONTENT ||--o{ FAVORITE : "est_mis_en" TAG ||--o{ REPORT : "est_signale" + CATEGORY ||--o{ CONTENT : "catégorise" + ROLE ||--o{ USER_ROLE : "attribue_a" ROLE ||--o{ ROLE_PERMISSION : "possede" PERMISSION ||--o{ ROLE_PERMISSION : "est_lie_a" @@ -93,15 +97,32 @@ erDiagram contents { uuid id PK uuid user_id FK + uuid category_id FK content_type type varchar title varchar storage_key varchar mime_type integer file_size + integer views + integer usage_count timestamp created_at timestamp updated_at timestamp deleted_at } + categories { + uuid id PK + varchar name + varchar slug + varchar description + varchar icon_url + timestamp created_at + timestamp updated_at + } + favorites { + uuid user_id PK, FK + uuid content_id PK, FK + timestamp created_at + } tags { uuid id PK varchar name @@ -182,6 +203,9 @@ erDiagram timestamp created_at } + users ||--o{ favorites : "user_id" + contents ||--o{ favorites : "content_id" + categories ||--o{ contents : "category_id" users ||--o{ contents : "user_id" users ||--o{ users_to_roles : "user_id" roles ||--o{ users_to_roles : "role_id" diff --git a/documentation/content/docs/deployment.mdx b/documentation/content/docs/deployment.mdx index 62fbf92..ab9099a 100644 --- a/documentation/content/docs/deployment.mdx +++ b/documentation/content/docs/deployment.mdx @@ -9,10 +9,67 @@ description: Procédures de déploiement et stratégie de tests Un conteneur **Caddy** est utilisé en tant que reverse proxy pour fournir le TLS et la gestion du FQDN. -### Pré-requis +### Pré-requis Système -Liste des outils nécessaires (Node.js, pnpm, Docker). + + + + + + -## 🧪 Tests +### Procédure de Déploiement -- **Unitaires** : sur le backend + + +### Configuration de l'environnement +Copiez le fichier `.env.example` vers `.env` et configurez les variables essentielles (clés PGP, secrets JWT, accès S3). + + + +### Installation des dépendances +Utilisez pnpm pour installer les packages dans le monorepo : +```bash +pnpm install +``` + + + +### Initialisation de la base de données +Exécutez les migrations Drizzle pour créer les tables et les types nécessaires. +```bash +pnpm --filter backend db:migrate +``` + + + +### Lancement des services +Utilisez Docker Compose pour lancer l'infrastructure complète ou démarrez les services individuellement. +```bash +docker-compose up -d +``` + + + +## 🧪 Tests & Qualité + + + + Exécutez la suite de tests unitaires avec Jest : + ```bash + pnpm test + ``` + + + Vérifiez la conformité du code avec Biome : + ```bash + pnpm lint + ``` + + + Validez la compilation de tous les modules : + ```bash + pnpm build + ``` + + diff --git a/documentation/content/docs/features.mdx b/documentation/content/docs/features.mdx index 5d501cb..df49bdd 100644 --- a/documentation/content/docs/features.mdx +++ b/documentation/content/docs/features.mdx @@ -3,55 +3,73 @@ title: Fonctionnalités Techniques description: Détails des fonctionnalités clés du projet Memegoat --- -## 🚀 Fonctionnalités Techniques +# 🚀 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. +## 🏗️ Infrastructure & Médias + +### 📤 Publication & Traitement +Le coeur de la plateforme permet la publication sécurisée de mèmes et de GIFs avec un pipeline de traitement complet : + + + + + + + +#### Détails du Pipeline : +- **Transcodage Haute Performance** : + - **Images & GIFs** : Conversion vers **WebP** (via `sharp`). Support de l'**AVIF** intégré. + - **Vidéos** : Conversion vers **WebM** (VP9/Opus via `ffmpeg`). Support de l'**AV1** implémenté. +- **Validation Stricte** : + - Limites de taille configurables (par défaut : 512 Ko pour les images, 1024 Ko pour les GIFs). +- **Gestion du Cycle de Vie** : Support du **Soft Delete** (Droit à l'oubli) et de la restauration temporaire. ### 📦 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. +Pour la gestion des médias, Memegoat utilise **MinIO**, une solution de stockage d'objects compatible S3, auto-hébergée. + + + Le serveur MinIO est isolé dans le réseau interne de Docker et n'est pas exposé directement sur internet. Le Backend fait office de proxy ou génère des URLs présignées. + + +--- + +## 🔍 Expérience Utilisateur ### 🔍 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. +- **Metatags dynamiques** : Le Backend détecte les robots (Twitter, Facebook, Google) et sert un rendu HTML spécifique avec les balises OpenGraph et Twitter Cards. +- **URLs Sémantiques** : Chaque mème possède un slug unique généré à partir de son titre (ex: `memegoat.fr/contents/mon-super-meme`). - **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. +- **Rendus côté serveur (SSR)** : Utilisation de Next.js pour un affichage instantané pour les utilisateurs. -### 🔗 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é. +### ⚡ Performance & Cache +Pour garantir une réactivité maximale, Memegoat utilise plusieurs niveaux de cache : +- **Cache Redis** : Les résultats des requêtes fréquentes (tendances, exploration) sont stockés dans un cache Redis côté serveur. +- **Directives HTTP** : Utilisation rigoureuse des headers `Cache-Control` pour permettre la mise en cache par les navigateurs et les CDNs. + +--- + +## 🛡️ Gouvernance & Sécurité ### 🕵️ 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 + + Toutes les données sensibles du profil sont protégées par **chiffrement PGP** au repos. + + +### 🚩 Modération & 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`. +- Signalement de contenus ou de tags inappropriés. +- Workflow : `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/content/docs/index.mdx b/documentation/content/docs/index.mdx index 36594a6..1c0b9bd 100644 --- a/documentation/content/docs/index.mdx +++ b/documentation/content/docs/index.mdx @@ -5,15 +5,13 @@ description: Détails techniques du projet Memegoat # 🐐 Détails Techniques - Memegoat -Ce document regroupe l'ensemble des spécifications techniques du projet Memegoat. +Bienvenue dans la documentation technique de Memegoat. Ce portail centralise toutes les spécifications, modèles et guides nécessaires à la compréhension et à l'évolution de la plateforme. ## 🏗️ Architecture Globale -### Vue d'ensemble +Memegoat repose sur une architecture **monorepo** moderne, garantissant une cohérence forte entre le frontend, le backend et l'infrastructure. -Description de l'architecture en monorepo et des interactions entre les services. - -### Diagrammes +### Interaction des Services ```mermaid graph TD @@ -22,22 +20,48 @@ graph TD Frontend[Frontend: Next.js] Backend[Backend: NestJS] DB[(Database: PostgreSQL)] - Storage[Storage: S3 Compatible] + Storage[Storage: S3/MinIO] + Cache[(Cache: Redis)] + Monitoring[Monitoring: Sentry] User <--> Caddy Caddy <--> Frontend Caddy <--> Backend Backend <--> DB Backend <--> Storage + Backend <--> Cache + Backend --> Monitoring ``` -### Navigation +### Navigation Rapide -Consultez les différentes sections pour plus de détails : -- [Fonctionnalités Techniques](/docs/features) -- [Stack Technologique](/docs/stack) -- [Modèle de Données](/docs/database) -- [Sécurité](/docs/security) -- [Conformité RGPD](/docs/compliance) -- [API & Intégrations](/docs/api) -- [Déploiement](/docs/deployment) +Explorez les sections clés pour approfondir vos connaissances techniques : + + + + + + + + +--- + + + Cette documentation est destinée aux développeurs et aux administrateurs système. Pour toute question sur l'utilisation du site, merci de consulter l'aide en ligne sur [memegoat.fr](https://memegoat.fr). + diff --git a/documentation/content/docs/security.mdx b/documentation/content/docs/security.mdx index 6e65ee4..17638ff 100644 --- a/documentation/content/docs/security.mdx +++ b/documentation/content/docs/security.mdx @@ -7,7 +7,12 @@ description: Mesures de sécurité implémentées ### Protection des Données (At Rest) -- **Chiffrement PGP Natif** : Les données identifiantes (PII) comme l'email, le nom d'affichage et le **secret 2FA** sont chiffrées dans PostgreSQL via `pgcrypto` (`pgp_sym_encrypt`). Les clés de déchiffrement ne sont jamais stockées en base de données. +- **Chiffrement PGP Natif** : Les données identifiantes (PII) comme l'email, le nom d'affichage et le **secret 2FA** sont chiffrées dans PostgreSQL via `pgcrypto` (`pgp_sym_encrypt`). + + + Les clés de déchiffrement ne sont jamais stockées en base de données. Elles sont injectées via les variables d'environnement au démarrage du service. + + - **Hachage aveugle (Blind Indexing)** : Pour permettre la recherche et l'unicité sur les données chiffrées (comme l'email), un hash non réversible (SHA-256) est stocké séparément (`email_hash`). - **Hachage des mots de passe** : Utilisation d'**Argon2id** (via `@node-rs/argon2`), configuré selon les recommandations de l'ANSSI pour résister aux attaques par force brute et par table de correspondance. @@ -15,12 +20,18 @@ description: Mesures de sécurité implémentées - **TLS 1.3** : Assuré par le reverse proxy **Caddy** avec renouvellement automatique des certificats Let's Encrypt. - **Protocoles d'Authentification** : - - **Sessions (JWT)** : Les jetons de rafraîchissement (`refresh_token`) sont stockés de manière sécurisée en base de données. L'IP de l'utilisateur est hachée (`ip_hash`) pour concilier sécurité et respect de la vie privée. + - **Sessions (iron-session)** : Utilisation de cookies sécurisés, `HttpOnly`, `Secure` et `SameSite: Strict`. Les tokens (JWT) sont stockés dans ces cookies chiffrés côté serveur, empêchant tout accès via JavaScript (XSS). - **API Keys** : Les clés API sont hachées en base de données (**SHA-256**) via la colonne `key_hash`. Seul un préfixe est conservé en clair pour l'identification. -### Infrastructure & Défense +### Infrastructure & Surveillance -- **Rate Limiting** : Protection contre le brute-force et le déni de service (DoS). -- **CORS Policy** : Restriction stricte des origines autorisées. -- **RBAC (Role Based Access Control)** : Gestion granulaire des permissions avec une structure complète de rôles et de permissions liées (`roles`, `permissions`, `roles_to_permissions`). + + + + + + + +- **CORS Policy** : Restriction stricte des origines autorisées, configurée dynamiquement selon l'environnement. +- **Security Headers** : Utilisation de `helmet` pour activer les protections standards des navigateurs (XSS, Clickjacking, etc.). - **Audit Logs** : Traçabilité complète des actions sensibles via la table `audit_logs`. Elle enregistre l'action, l'entité concernée, les détails au format JSONB, ainsi que l'IP hachée et le User-Agent pour l'imputabilité. diff --git a/documentation/content/docs/stack.mdx b/documentation/content/docs/stack.mdx index 33ff088..98008e8 100644 --- a/documentation/content/docs/stack.mdx +++ b/documentation/content/docs/stack.mdx @@ -7,22 +7,39 @@ description: Technologies utilisées dans le projet Memegoat ### Frontend -- **Framework** : NextJS -- **Gestion d'état** : Zustand -- **Style** : Tailwind CSS -- **Composants UI** : Shadcn/ui + + + + + + ### Backend -- **Framework** : NestJS -- **Langage** : TypeScript -- **Base de données** : PostgresQL -- **ORM** : DrizzleORM + + + + + + + + +### Sécurité & Monitoring + + + + + + + + + ### Infrastructure & DevOps -- **Conteneurisation** : Docker / Docker Compose -- **Reverse Proxy & TLS** : Caddy -- **Stockage d'objets** : MinIO (compatible S3) -- **CI/CD** : Gitea Actions -- **Hébergement** : Hetzner Dedicated Server + + + + + +