Rhetic est une plateforme de discussion communautaire inspirée par Reddit, permettant aux utilisateurs de créer des communautés thématiques (subrhetics), partager du contenu, interagir via des votes et des commentaires, et personnaliser leur expérience avec des fonctionnalités en temps réel.
Le projet est divisé en deux parties principales :
- Frontend : Application Next.js (dossier
/front) - Backend : API Strapi (dossier
/strapi) - Base de données : PostgreSQL serverless via Neon
- Inscription et authentification
- Profils personnalisables avec avatar et biographie
- Système de suivi d'utilisateurs
- Statuts en ligne (👷In Progress)
- Préférences utilisateur (thème, langue, notifications)
- Création de communautés thématiques
- Règles personnalisables (👷In Progress)
- Modération par équipe désignée
- Attributs de communauté (icône, description)
- Catégorisation par thèmes
- Création de posts texte et multimédia
- Système de vote (upvote/downvote)
- Commentaires hiérarchiques
- Flairs pour catégoriser les posts (👷In Progress)
- Option de publication anonyme (👷In Progress)
- Système de votes sur posts et commentaires
- Commentaires imbriqués
- Réactions avec emojis personnalisés par communauté (👷In Progress)
- Messagerie privée (👷In Progress)
- Notifications pour diverses activités (👷In Progress)
- Présence utilisateur (👷In Progress)
- Mise à jour en direct des scores (👷In Progress)
- Notifications instantanées (👷In Progress)
- Discussion en temps réel (👷In Progress)
- Collaboration dans les communautés
- Rôles de modérateurs par communauté
- Outils de modération (suppression, bannissement)
- Système de signalement (👷In Progress)
- Journalisation des actions de modération
- Filtrage automatique du contenu sensible via Censorly (👷In Progress)
- Node.js (v18.0.0 ou supérieure)
- npm ou yarn ou pnpm ou bun
- Compte Neon (base de données PostgreSQL serverless)
- Compte Liveblocks (fonctionnalités temps réel)
# Se placer dans le répertoire du backend
cd strapi
# Installer les dépendances
npm install
# Copier le fichier d'environnement
cp .env.example .env
# Modifier le fichier .env avec vos informations
# Particulièrement les informations de connexion à Neon
# Lancer le développement
npm run developLa première exécution vous permettra de créer un utilisateur administrateur pour accéder au panneau d'administration Strapi sur http://localhost:1337/admin.
# Se placer dans le répertoire du frontend
cd front
# Installer les dépendances
npm install
# Configurer les variables d'environnement
cp .env.example .env.local
# Éditer .env.local avec vos clés, notamment:
# - NEXT_PUBLIC_STRAPI_API_URL=http://localhost:1337
# - NEXT_PUBLIC_LIVEBLOCKS_PUBLIC_KEY=pk_xxx
# Lancer le développement
npm run devL'application sera disponible sur http://localhost:3000
Principales variables à configurer dans .env :
HOST=0.0.0.0
PORT=1337
APP_KEYS="clé1,clé2"
API_TOKEN_SALT=valeur_aléatoire
ADMIN_JWT_SECRET=valeur_aléatoire
TRANSFER_TOKEN_SALT=valeur_aléatoire
JWT_SECRET=valeur_aléatoire
# Base de données (Neon PostgreSQL serverless)
DATABASE_CLIENT=postgres
DATABASE_URL=postgresql://[user]:[password]@[neon-host]/[dbname]
# OU configuration détaillée
DATABASE_HOST=ep-something.eu-central-1.aws.neon.tech
DATABASE_PORT=5432
DATABASE_NAME=rhetic
DATABASE_USERNAME=username
DATABASE_PASSWORD=password
DATABASE_SSL=true
# Modération de contenu (optionnel)
CENSORLY_API_KEY=key_xxx
CENSORLY_PACKAGE=true
Configurez les variables suivantes dans .env.local :
# API Strapi
NEXT_PUBLIC_STRAPI_API_URL=http://localhost:1337
# Liveblocks (temps réel)
NEXT_PUBLIC_LIVEBLOCKS_PUBLIC_KEY=pk_xxx
LIVEBLOCKS_SECRET_KEY=sk_xxx
# Authentification
NEXTAUTH_SECRET=valeur_aléatoire
NEXTAUTH_URL=http://localhost:3000
strapi/
├── config/ # Configuration Strapi
├── database/ # Migrations et données
├── public/ # Fichiers statiques et médias
├── src/
│ ├── admin/ # Configuration admin
│ ├── api/ # Points d'API (modèles, contrôleurs, routes)
│ ├── components/ # Composants réutilisables
│ └── extensions/ # Extensions plugins
├── types/ # Types TypeScript
└── utils/ # Utilitaires
front/
├── public/ # Ressources statiques
├── src/
│ ├── app/ # Pages Next.js (App Router)
│ ├── components/ # Composants React
│ ├── lib/ # Bibliothèques et utilitaires
│ │ ├── api/ # Clients API (Strapi)
│ │ ├── auth/ # Authentification
│ │ └── liveblocks/ # Configuration temps réel
│ ├── store/ # État global (Zustand)
│ ├── types/ # Types TypeScript
│ └── utils/ # Fonctions utilitaires
L'API utilise le framework Strapi avec des points d'entrée REST. Principales ressources :
/api/subrhetics- Communautés/api/posts- Publications/api/comments- Commentaires/api/users- Utilisateurs/api/votes- Votes
Pour plus de détails, consultez la documentation générée automatiquement sur /documentation de l'API Strapi.
Rhetic intègre Liveblocks pour offrir des fonctionnalités en temps réel et une expérience collaborative:
- Présence utilisateur - Voyez quels utilisateurs sont actifs dans une discussion
- Curseurs en temps réel - Visualisez la position des autres utilisateurs
- Discussions instantanées - Communication instantanée sans rechargement de page
- Notifications en temps réel - Soyez informé immédiatement des interactions
- Mise à jour des votes - Les scores s'actualisent sans rafraîchissement
La configuration de Liveblocks est définie dans front/liveblocks.config.ts et inclut:
- Définition des types pour la présence utilisateur
- Métadonnées personnalisées pour les utilisateurs et les salles
- Gestion des événements personnalisés
Pour activer Liveblocks, vous devez:
- Créer un compte sur Liveblocks
- Obtenir une clé API
- Configurer la variable d'environnement
NEXT_PUBLIC_LIVEBLOCKS_PUBLIC_KEYdans le frontend
Le système utilise JWT (JSON Web Tokens) via le plugin Users-Permissions de Strapi, avec:
- Authentification par email/mot de passe
- Sessions persistantes
- Gestion des rôles et permissions
- Extension possible avec Auth.js (NextAuth) pour le frontend
- Strapi - CMS headless
- TypeScript
- Neon - PostgreSQL serverless
- Censorly - Modération de contenu
- Next.js (v15.3.1)
- React (v19.0.0)
- TypeScript
- TailwindCSS (v4)
- Zustand - Gestion d'état
- TanStack Query - Gestion des requêtes
- Liveblocks - Fonctionnalités en temps réel
- Zod - Validation de schémas
- SEO - Pour optimisation moteurs de recherche
- CKEditor - Éditeur de texte riche
- Documentation - API docs automatisées
- Cloud - Intégration cloud et déploiement
# Tests backend
cd strapi
npm run test
# Tests frontend
cd front
npm run testNeon est une solution PostgreSQL serverless hautement évolutive utilisée pour le projet:
- Créez un compte sur Neon
- Créez un nouveau projet
- Obtenez la chaîne de connexion
- Configurez la variable
DATABASE_URLou les variables individuelles dans le fichier.envdu backend
Pour le déploiement en production :
cd strapi
npm run build
npm run startVous pouvez déployer Strapi sur diverses plateformes comme:
Pour le déploiement en production :
cd front
npm run build
npm run startPour un déploiement plus simple, vous pouvez utiliser:
- Vercel (recommandé pour Next.js)
- Netlify
- Cloudflare Pages
Les contributions sont les bienvenues ! Veuillez suivre ces étapes :
- Forker le dépôt
- Créer une branche pour votre fonctionnalité
- Commiter vos changements
- Pousser la branche
- Ouvrir une Pull Request
Ce projet est sous licence Apache 2.0.
Pour toute question ou suggestion, veuillez contacter contact@rhetic.fr .