@lastbrain/module-blog
v0.1.3
Published
> @lastbrain/module-blog
Readme
📦 Module Blog - LastBrain
@lastbrain/module-blog
Module réutilisable pour gérer différents types de contenus publics : blog, FAQ, aide, documentation et tutoriels.
🎯 Objectifs
Ce module permet de créer et gérer du contenu pour plusieurs types de pages publiques, compatible avec toutes les applications du monorepo LastBrain grâce au système de app_scope.
📋 Types de contenu supportés
- Blog : Articles de blog classiques
- FAQ : Questions fréquentes
- Help : Pages d'aide et support
- Docs : Documentation technique
- Tutorial : Tutoriels et guides
🏗️ Architecture
Base de données
5 tables Supabase :
- content_category : Catégories de contenu
- content_post : Posts/Articles
- content_post_category : Table de liaison (many-to-many)
- content_post_stats : Statistiques (vues, likes)
- content_post_comment : Commentaires (optionnel)
Toutes les données sont multi-locales (FR/EN/ES) via des champs jsonb.
Sécurité (RLS)
- Superadmin : Accès complet CRUD
- Anon/Public : Lecture seule des contenus publiés
- Authenticated : Peut créer des commentaires
📄 Pages Disponibles
Pages Publiques (SEO-friendly)
- GET
/blog- Hub Blog (liste catégories + derniers posts) - GET
/faq- Hub FAQ - GET
/help- Hub Aide - GET
/docs- Hub Documentation - GET
/tutorial- Hub Tutoriels
Pages dynamiques :
/[type]/c/[categorySlug]- Posts d'une catégorie/[type]/[postSlug]- Détail d'un post
Toutes les pages incluent :
- React Server Components
generateMetadata()pour le SEO- JSON-LD (BlogPosting, Article, BreadcrumbList)
- Navigation précédent/suivant
- Suggestions de posts similaires
Pages Admin (authentifiées)
- GET
/admin/categories- CRUD catégories - GET
/admin/posts- CRUD posts avec traduction auto - GET
/admin/stats- Statistiques (vues, likes) - GET
/admin/comments- Modération commentaires - GET
/admin/settings- Paramètres
🔌 API Routes
Publiques (anon)
/api/public/content_category
- GET - Liste catégories actives
/api/public/content_post
- GET - Liste posts publiés
- POST - Incrémenter vues
Admin (authentifiées)
/api/admin/content_category
- GET/POST/PUT/DELETE - CRUD catégories
/api/admin/content_post
- GET/POST/PUT/DELETE - CRUD posts
/api/admin/translate
- POST - Traduction automatique via module-ai
🚀 Utilisation
Installation
Le module est automatiquement disponible dans le monorepo :
pnpm installIntégration dans une app
1. Page hub (liste)
// app/blog/page.tsx
import { TypeHubPage, generateTypeHubMetadata } from "@lastbrain/module-blog";
export async function generateMetadata() {
return await generateTypeHubMetadata("blog", "fr");
}
export default function BlogPage() {
return (
<TypeHubPage
type="blog"
appScope="tools"
lang="fr"
baseUrl="/blog"
/>
);
}2. Page catégorie
// app/blog/c/[slug]/page.tsx
import { CategoryPage, generateCategoryMetadata } from "@lastbrain/module-blog";
export async function generateMetadata({ params }) {
return await generateCategoryMetadata("blog", "tools", params.slug, "fr");
}
export default function BlogCategoryPage({ params }) {
return (
<CategoryPage
type="blog"
appScope="tools"
categorySlug={params.slug}
lang="fr"
baseUrl="/blog"
/>
);
}3. Page post
// app/blog/[slug]/page.tsx
import { PostPage, generatePostMetadata } from "@lastbrain/module-blog";
export async function generateMetadata({ params }) {
return await generatePostMetadata("blog", "tools", params.slug, "fr");
}
export default function BlogPostPage({ params }) {
return (
<PostPage
type="blog"
appScope="tools"
postSlug={params.slug}
lang="fr"
baseUrl="/blog"
/>
);
}🌍 Multi-langue
Tous les champs texte sont stockés en JSONB :
{
title: {
fr: "Mon article",
en: "My article",
es: "Mi artículo"
}
}Utilisez les boutons Auto EN et Auto ES dans l'admin pour la traduction automatique.
🗄️ Base de Données
Tables
- content_category : Catégories
- content_post : Posts/Articles
- content_post_category : Liaison posts-catégories
- content_post_stats : Statistiques
- content_post_comment : Commentaires
Migrations
20260126085702_module-blog_init.sql20260126120000_blog_complete_structure.sql
Pour synchroniser :
pnpm db:sync-migrations🎨 Composants réutilisables
import {
CategoryCard,
PostCard,
MarkdownRenderer,
PostNavigation,
buildSEOMetadata,
buildBlogPostingJSONLD,
buildBreadcrumbJSONLD,
} from "@lastbrain/module-blog";📝 TODO
- [ ] Intégration complète module-ai pour traduction
- [ ] Parser Markdown avancé (marked, remark)
- [ ] Système de likes
- [ ] Modération commentaires
- [ ] Pages de statistiques
- [ ] Recherche full-text
- [ ] Pagination
- [ ] Upload images (storage)
📦 Installation
pnpm lastbrain add-module blog
pnpm build:modulesAppliquer les migrations
cd apps/votre-app
supabase migration up💡 Utilisation
Exemple d'utilisation
// Importez les composants depuis le module
import { BlogPage } from "@lastbrain/module-blog";
// Utilisez-les dans votre application
<BlogPage />;Configuration
⚠️ Danger Zone
La suppression du module supprimera toutes les pages, routes API et migrations associées. Cette action est irréversible.
pnpm lastbrain remove-module blog
pnpm build:modules