Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
876f48c
feat: init new content structure + CLAUDE.md + docs architecture
juthing Jun 2, 2026
def9dac
feat: add Eleventy data scripts (articles, authors, labels, legal, i18n)
juthing Jun 2, 2026
ee7eec2
feat: add HTML layouts + updated default template (no sidebar, framed…
juthing Jun 2, 2026
4d1b13b
feat: add pagination templates (articles, collections, authors, legal…
juthing Jun 2, 2026
e0fd49c
feat: complete CSS overhaul (framed design, i18n, article/author/labe…
juthing Jun 2, 2026
8411323
feat: add Lit components (language-switcher, docs-search, article-car…
juthing Jun 2, 2026
202f5eb
feat: update eleventy.config + vercel.json redirects + build scripts
juthing Jun 2, 2026
8f52460
chore: remove old legal/privacy.md (replaced by new legal pagination …
juthing Jun 2, 2026
2914608
chore: remove old Material Catalog about/ files (not relevant to Modd…
juthing Jun 2, 2026
1514c8b
chore: remove old Material Catalog about/ files
juthing Jun 2, 2026
ea959c7
chore: remove old Material Catalog about/ files
juthing Jun 2, 2026
586ac6a
chore: remove old Material Catalog about/ files
juthing Jun 2, 2026
e63c9d7
chore: remove old Material Catalog about/ files
juthing Jun 2, 2026
49eeb1b
feat: add test articles (v1 changelog, moderation, tickets, premium) …
juthing Jun 2, 2026
6fa1016
docs: add TODO list with remaining tasks
juthing Jun 2, 2026
ec11f86
fix: remove unused esbuild-plugin-minify-html-literals (peer dep conf…
juthing Jun 2, 2026
9ac7017
feat: reading time in articles.js, error handling, generateToc filter
juthing Jun 2, 2026
75d3ce5
fix: TS errors — rename private lang→activeLang, fix CustomEvent cast…
juthing Jun 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
161 changes: 161 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
# Moddy Docs — CLAUDE.md

Documentation de référence pour les sessions Claude Code sur ce dépôt.

## Stack technique

- **Eleventy (11ty) v2** — SSG
- **Nunjucks** — templates HTML
- **Lit + TypeScript** — web components
- **@material/web** — composants Material Design 3
- **esbuild** — bundler TypeScript
- **wireit** — orchestration du build
- **Vercel** — hébergement (vercel.json à la racine)

## Structure du dépôt

```
/
├── content/ ← Contenu (articles, auteurs, labels, légal)
│ ├── articles/ ← {id}/meta.json · fr.md · en.md · assets/
│ ├── authors/ ← {discord-id}/meta.json
│ ├── labels/ ← {id}/meta.json
│ └── legal/ ← {id}/meta.json · fr.md · en.md
├── docs/ ← Documentation technique du projet
├── guide-syntaxe/ ← Guide syntaxe Moddy (référence)
├── site/ ← Projet Eleventy
│ ├── eleventy.config.cjs
│ ├── esbuild.config.mjs
│ ├── package.json
│ ├── src/
│ │ ├── components/ ← Composants Lit custom
│ │ ├── hydration-entrypoints/ ← Entrypoints pour lit-island
│ │ ├── pages/ ← Scripts JS par page
│ │ ├── inline/ ← Scripts inlinés dans <head>
│ │ └── utils/ ← Utilitaires partagés
│ └── site/ ← Dossier d'entrée Eleventy
│ ├── _includes/ ← Layouts Nunjucks
│ ├── _data/ ← Données globales Eleventy
│ ├── css/ ← Feuilles de style
│ ├── images/ ← Assets statiques
│ ├── articles/ ← Templates de pagination articles
│ ├── collections/ ← Templates de pagination labels
│ ├── authors/ ← Templates de pagination auteurs
│ └── legal/ ← Templates pages légales
└── vercel.json ← Config Vercel (hébergement + redirections)
```

## URLs

| Type | URL |
|------|-----|
| Article | `/articles/{article-id}` |
| Label/Collection | `/collections/{label-id}` |
| Auteur | `/authors/{author-id}` |
| Page légale | `/legal/{id}` |
| Raccourci | `/{id}` → redirige vers la bonne URL (vercel.json) |

## Format du contenu

### Articles (`content/articles/{id}/`)

- `meta.json` — métadonnées (titre, auteurs, date, résumé, bannière, visibilité, labels)
- `fr.md` — contenu Markdown français
- `en.md` — contenu Markdown anglais
- `assets/` — assets spécifiques à l'article

**Niveaux de visibilité :**
1. Indexation normale (apparaît partout)
2. Restreint (barre de recherche + pages label/auteur uniquement)
3. Lien direct uniquement (exclu de l'index, noindex meta)

**Format `meta.json` :**
```json
{
"id": "quick-start",
"title": { "fr": "...", "en": "..." },
"authors": ["discord_id_1"],
"created_at": "2025-12-29",
"abstract": { "fr": "...", "en": "..." },
"banner": null,
"visibility": 1,
"labels": ["documentation"]
}
```

### Auteurs (`content/authors/{discord-id}/`)

- `meta.json` — profil auteur

Lorsque `avatar`, `banner_url`, ou `avatar_decoration` vaut `"DISCORD"`, la valeur est auto-récupérée depuis `api.moddy.app/users/{discord_id}` au moment du build.

**Format `meta.json` :**
```json
{
"id": "123456789012345678",
"discord_id": "123456789012345678",
"username": "johndoe",
"avatar": "DISCORD",
"post": { "fr": "Product Manager", "en": "Product Manager" },
"bio": { "fr": "...", "en": "..." },
"banner_color": "#FF5733",
"links": [
{ "name": "Twitter", "url": "https://twitter.com/johndoe", "icon": "<svg>...</svg>" }
]
}
```

### Labels (`content/labels/{id}/`)

- `meta.json` — nom bilingue et couleur hex

**Format `meta.json` :**
```json
{
"id": "documentation",
"name": { "fr": "Documentation", "en": "Documentation" },
"color": "#4285F4"
}
```

### Légal (`content/legal/{id}/`)

- `meta.json` — métadonnées
- `fr.md` — contenu français
- `en.md` — contenu anglais

## i18n

Langues supportées : `fr` (français) et `en` (anglais). Défaut : `fr`.

La langue est détectée depuis le navigateur (`navigator.language`) et stockée dans `localStorage` sous la clé `moddy-docs-lang`. L'utilisateur peut changer via le sélecteur de langue dans la barre du haut.

Le script `site/src/inline/apply-saved-lang.ts` est inliné dans `<head>` et applique la langue **avant** le rendu du corps de page (pas de flash).

Côté CSS : `[data-lang="fr"] .lang-en { display: none }` et vice versa.

## Thème

Le site utilise le thème dynamique Material Design 3. La couleur seed génère une palette M3 complète via `@material/material-color-utilities`.

- **Modes** : Light / Dark / Auto
- **Mode neutre** : palette neutral prédéfinie (seed `#607D8B`), non personnalisée
- **Thèmes** : Moddy par défaut (`#ECAA2E`) + personnalisé + neutre
- Stocké dans `localStorage` sous la clé `material-theme`

## Build

```bash
cd site
npm install
npm run build:prod # Build de production
npm run dev # Serveur de développement
```

## Ajouter du contenu

Voir `docs/CONTENT-GUIDE.md`.

## Redirections Vercel

Les URLs raccourcies `/{id}` sont configurées dans `vercel.json` à la racine. Ajouter une redirection pour chaque nouvel article, auteur ou label.
110 changes: 110 additions & 0 deletions content/articles/moderation-setup/en.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# Setting Up Auto-Moderation

Moddy's auto-moderation allows you to protect your server from spam, inappropriate messages, and more.

## Prerequisites

- Moddy must be invited to your server
- You need the **Manage Server** permission
- Moddy needs **Timeout Members**, **Manage Messages**, and **Kick Members** permissions

## Enabling Auto-Moderation

To enable auto-moderation:

```
/automod enable
```

To disable it:

```
/automod disable
```

## Rule Configuration

### Anti-Spam

Anti-spam automatically blocks users who send too many messages in a short time.

```
/automod spam sensitivity:medium action:mute duration:5m
```

Available sensitivity levels: `low`, `medium`, `high`, `extreme`

### Word Filter

Add words or phrases to block:

```
/automod words add word:"bad-word" action:delete
```

Available actions:

| Action | Description |
|--------|-------------|
| `delete` | Deletes the message |
| `warn` | Warns the user |
| `mute` | Mutes the user |
| `kick` | Kicks the user |
| `ban` | Bans the user |

### Discord Invite Filter

Automatically block Discord invites from other servers:

```
/automod invites enable action:delete
```

Add exceptions for partner servers:

```
/automod invites whitelist server-id:123456789
```

## Moderation Logs

Set up a channel to receive auto-moderation logs:

```
/logs setup type:automod channel:#mod-logs
```

## Test Mode

Before enabling sanctions, test your configuration in observation mode:

```
/automod mode:observation
```

In observation mode, Moddy logs violations without applying sanctions.

## Premium Features

> These features require a Moddy Premium subscription.

- **AI Anti-toxicity**: detects toxic messages using artificial intelligence
- **Malicious link detection**: blocks phishing and malware links
- **Point system**: automatic sanction point assignment
- **Extended history**: 90 days of moderation history

## Troubleshooting

**Moddy isn't sanctioning despite configuration?**

1. Check that Moddy has the necessary permissions
2. Check that automod is enabled with `/automod status`
3. Make sure Moddy's role is above the roles of members to be sanctioned

**Administrators are being sanctioned?**

Add roles to exclude:

```
/automod exempt role:@Admin
```
110 changes: 110 additions & 0 deletions content/articles/moderation-setup/fr.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# Configurer la modération automatique

La modération automatique de Moddy vous permet de protéger votre serveur contre le spam, les messages inappropriés et bien plus encore.

## Prérequis

- Moddy doit être invité sur votre serveur
- Vous devez avoir la permission **Gérer le serveur**
- Moddy doit avoir les permissions **Modérer les membres**, **Gérer les messages** et **Expulser des membres**

## Activer la modération automatique

Pour activer la modération automatique, utilisez la commande :

```
/automod enable
```

Pour la désactiver :

```
/automod disable
```

## Configuration des règles

### Anti-spam

L'anti-spam bloque automatiquement les utilisateurs qui envoient trop de messages en peu de temps.

```
/automod spam sensitivity:moyen action:mute duree:5m
```

Niveaux de sensibilité disponibles : `faible`, `moyen`, `eleve`, `extreme`

### Filtre de mots

Ajoutez des mots ou expressions à bloquer :

```
/automod words add mot:"mauvais-mot" action:delete
```

Les actions disponibles sont :

| Action | Description |
|--------|-------------|
| `delete` | Supprime le message |
| `warn` | Avertit l'utilisateur |
| `mute` | Mute l'utilisateur |
| `kick` | Expulse l'utilisateur |
| `ban` | Bannit l'utilisateur |

### Filtre d'invitations Discord

Bloquez automatiquement les invitations Discord provenant d'autres serveurs :

```
/automod invites enable action:delete
```

Vous pouvez ajouter des exceptions pour vos serveurs partenaires :

```
/automod invites whitelist serveur-id:123456789
```

## Logs de modération

Configurez un salon pour recevoir les logs de modération automatique :

```
/logs setup type:automod salon:#logs-mod
```

## Mode test

Avant d'activer les sanctions, testez votre configuration en mode observation :

```
/automod mode:observation
```

En mode observation, Moddy journalise les infractions sans appliquer de sanctions.

## Fonctionnalités Premium

> Ces fonctionnalités nécessitent un abonnement Moddy Premium.

- **IA Anti-toxicité** : détecte les messages toxiques grâce à l'intelligence artificielle
- **Détection de liens malveillants** : bloque les liens de phishing et malware
- **Système de points** : attribution automatique de points de sanction
- **Historique étendu** : accès à 90 jours d'historique de modération

## Dépannage

**Moddy ne sanctionne pas malgré la configuration ?**

1. Vérifiez que Moddy a les permissions nécessaires
2. Vérifiez que l'automod est activé avec `/automod status`
3. Assurez-vous que le rôle de Moddy est au-dessus des rôles des membres à sanctionner

**Les administrateurs sont sanctionnés ?**

Ajoutez les rôles à exclure avec :

```
/automod exempt role:@Admin
```
Loading