Cahier des charges · v1.0

Blog Network Factory

Plateforme d’analyse de marché, de pilotage d’un réseau de blogs et de suivi de la monétisation par articles sponsorisés. Déploiement sur VPS dédié, sans WordPress.

28 octobre 2026 VPS séparé — décision actée Pilote : 10 sites Statut : à valider avant Lot 0

01Décision d’architecture

Le projet ne partage rien avec la production ÉcosystèmeImmo. Ni serveur, ni base, ni Redis, ni nginx.

Pourquoi un VPS séparé, chiffres à l’appui

Le serveur actuel est à 26 Go de RAM utilisés sur 31, 549 Mo libres, swap de 8 Go saturé à 100 %, disque à 89 % et 19 conteneurs actifs. Un next build consomme 1 à 2 Go : l’y ajouter fait tomber la production existante. Ce n’est pas une précaution de principe, c’est une contrainte mesurée.

Trois conséquences directes

02Infrastructure du VPS

Dimensionnement cible

RessourceMinimumConfortableJustification
vCPU48Builds statiques en parallèle, Postgres, workers
RAM8 Go16 GoUn build Next + 3 builds Astro simultanés ≈ 3 Go
Disque NVMe100 Go200 Gonode_modules, builds, sauvegardes locales, images
SystèmeUbuntu 24.04 LTS, accès SSH par clé uniquementSupport long, Docker natif

Budget indicatif : 25 à 45 €/mois pour la configuration confortable. À confirmer sur l’offre réelle avant commande — non vérifié à ce stade.

Conteneurs

ServiceImagePortExposéRôle
appbuild local Next.js3100via nginxDashboard + API
workerbuild local Node—nonBullMQ : scans, génération, builds, publication
dbpostgres:16-alpine5432nonBase unique du projet
redisredis:7-alpine6379nonFile de jobs + cache
nginxnginx:alpine80/443ouiReverse proxy + vhosts des blogs statiques

Règle de réseau

Postgres et Redis ne publient aucun port sur l’hôte. Uniquement un réseau Docker interne. Aucun 0.0.0.0 sur une base de données, jamais.

Sauvegardes

Secrets

Fichier /etc/blogfactory/env, permissions 0600, propriétaire root, hors dépôt. Le fichier .env.example du dépôt ne contient que des valeurs factices. Validation au démarrage : l’application refuse de démarrer si une variable requise manque.

03Structure du code

Monorepo, un seul langage, un seul déploiement. L’IA écrit du contenu, jamais du code de site.

blogfactory/
├── apps/
│   ├── app/              # Next.js 15 App Router — dashboard + API REST
│   └── worker/           # process BullMQ séparé (pas de job dans l’API)
├── packages/
│   ├── db/               # schéma Drizzle + migrations versionnées
│   ├── core/             # scoring, calculs financiers, règles métier pures
│   ├── ai/               # routeur multi-fournisseurs, prompts, suivi des coûts
│   └── site-template/    # thème Astro + schéma de config par site
├── infra/
│   ├── docker-compose.yml
│   ├── nginx/            # un vhost par domaine de blog
│   └── scripts/          # backup, restore-test, deploy
└── superpowers/          # (option) skills du projet

Stack retenue

CoucheChoixRaison
Dashboard + APINext.js 15, TypeScriptUn framework pour l’UI et l’API, écosystème maximal
Blogs publiésAstro, export statiqueZéro JS, build léger, aucune base par site, aucune surface d’attaque
BasePostgreSQL 16 + DrizzleSQL explicite et typé, adapté à un modèle financier auditable
File de jobsBullMQ + RedisReprise, idempotence, workers isolés
AuthBetter AuthAuto-hébergé, sessions en cookie httpOnly
IAVercel AI SDKFournisseurs interchangeables, coût par appel tracé
ValidationZodSur toutes les entrées, sans exception

La règle non négociable

Un seul template de site, une configuration par domaine. Le pipeline produit du Markdown enrichi et des métadonnées. Si l’IA génère la structure de chaque site, dix bases de code divergent en trois mois et plus rien n’est maintenable. C’est le mode d’échec classique des usines à sites.

04Périmètre fonctionnel v1

Le PRD d’origine proposait neuf modules. Cinq entrent en v1, le reste attend une preuve de revenu.

ModuleContenu v1Critère d’acceptation
M1 · Marché Fiches niches, saisie des observations (prix relevés, annonceurs, concurrence), source et date obligatoires Toute donnée affichée porte sa source, sa date et un niveau de confiance
M2 · Plateformes Annuaire, critères d’admission, statut de vérification, suivi des candidatures Aucune plateforme n’apparaît « accessible » sans statut vérifié et daté
M3 · Sites Fiche par site : domaine, niche, réseau, statut, coût prévu, rôle dans le réseau Un site se crée en brouillon, sans achat de domaine ni publication automatique
M4 · Contenus Briefs, génération assistée, revue humaine obligatoire, build et publication Aucune publication sans validation explicite tracée au journal
M5 · Finance Opportunités, commandes, factures, encaissements, dépenses, marge par site Les cinq états sont distincts et jamais fusionnés dans un même total
Transverse Auth, rôles, journal d’audit, quotas, alertes Chaque action sensible est attribuée à un utilisateur et horodatée

Ce que la v1 ne fait pas

05Modèle de données

DomaineTables
Accèsusers, sessions, audit_logs
Marchéniches, networks, market_observations, data_sources, scores
Plateformesplatforms, platform_rules, applications
Sitessites, domains, site_costs
Contenusbriefs, content_items, reviews, publish_jobs
Financeopportunities, orders, invoices, payments, expenses
Systèmejobs, ai_usage, budgets, alerts

Contrainte structurante : orders, invoices, payments et expenses sont quatre tables distinctes. Une commande n’est jamais un revenu. Un tableau de bord qui additionne les quatre est un tableau de bord faux.

06Niches et réseaux

Trois réseaux thématiques, dix sites, deux vagues de cinq. Le critère de sélection est la densité d’annonceurs observée sur les plateformes, pas le volume de recherche.

RéseauSiteAnglePanier / articleRisque principal
A · Habitat & énergie
4 sites
Pompes à chaleur & aidesMaPrimeRénov’, gestes, comparatifs d’installateurs80–150 €YMYL léger, aides qui changent souvent
Isolation & DPEDiagnostics, travaux par type de logement70–120 €Contenu technique à sourcer
Piscine & jardinSaisonnalité assumée, entretien et équipement60–110 €Creux de novembre à février
Aménagement intérieurPetits travaux, budget, avant/après60–100 €Concurrence éditoriale forte
B · Tourisme & terroir
3 sites
Escapades week-end FrancePar région, itinéraires deux jours70–130 €Saisonnalité, contenu à renouveler
ŒnotourismeDomaines, routes des vins, dégustations90–180 €Loi Évin : mentions obligatoires
Randonnée & itinérancesTraces, refuges, équipement60–120 €Peu d’annonceurs locaux
C · B2B pratique
3 sites
Logiciels & outils TPEComparatifs d’outils, cas d’usage métier150–400 €Annonceurs exigeants sur la qualité
Financement PMEAides, subventions, prêts par secteur150–350 €YMYL, sources officielles obligatoires
Création d’entrepriseFormalités, statuts, obligations150–300 €Contenu juridique à faire relire

Fourchettes de prix = ordres de grandeur du marché français des articles sponsorisés, à confirmer par un relevé réel sur Ereferer, Soumettre et Getfluence avant tout engagement. Elles ne sont pas vérifiées à ce stade et ne doivent pas servir de base à un emprunt.

L’arbitrage qui compte le plus

Un article B2B se vend deux à quatre fois plus cher qu’un article grand public, pour un coût de production comparable. Passer de 4 à 7 sites B2B fait monter le prix moyen encaissé de 85 à 130 € et avance le point mort de cinq mois. C’est le levier le plus puissant du modèle, devant le nombre de sites.

Ce qu’il faut relever avant de lancer la vague 1

07Provision de ventes

Dix sites, deux vagues, dix-huit mois. Les hypothèses sont explicites et modifiables ; ce ne sont pas des promesses.

Hypothèses du scénario central

HypothèseValeurNote
Sites lancés105 en M1, 5 en M3
Articles par site au lancement12Base éditoriale minimale pour candidater
Rythme ensuite4 / mois / site40 articles par mois sur le réseau
Coût par article10 €Génération assistée + relecture humaine
Premier site admisM5Les plateformes exigent un historique
Sites admis à M127 / 10Taux d’acceptation 70 % après un an
Commandes par site admis0,8 → 2,5 / moisMontée en charge progressive
Prix moyen encaissé70 → 100 €Commission de plateforme déduite
Charges fixes475 € / moisVPS 35 €, IA 30 €, domaines 10 €, contenu courant 400 €
Investissement initial1 200 €120 articles de lancement

Trajectoire centrale, mois par mois

MoisSites admisCommandesEncaisséChargesTrésorerie cumulée
M1–M4000 €3 100 €−3 100 €
M522112 €475 €−3 463 €
M632168 €475 €−3 770 €
M732168 €475 €−4 077 €
M843224 €475 €−4 328 €
M958562 €475 €−4 241 €
M1069720 €475 €−3 996 €
M1169720 €475 €−3 751 €
M12711892 €475 €−3 334 €
M137181 575 €475 €−2 234 €
M148201 800 €475 €−909 €
M158201 900 €475 €+516 €
M168201 900 €475 €+1 941 €
M178202 000 €475 €+3 466 €
M188202 000 €475 €+4 991 €

Trésorerie cumulée, scénario central — 18 mois. Creux max −4 328 € (M8), point mort M15, pic +4 991 € (M18).

0 M1M4M8 M12M15M18
Trésorerie négative Trésorerie positive Point mort : mois 15

Les trois scénarios

PrudentCentralOptimiste
Coût par article25 €10 €6 €
Premier site admisM7M5M4
Sites admis à M123 / 107 / 108 / 10
Commandes / site / mois à M121,01,52,2
Prix moyen encaissé75 €85 €105 €
CA mensuel à M18540 €2 000 €3 080 €
Trésorerie cumulée la plus basse−12 000 €−4 328 €−1 260 €
Retour sur investissementjamais à 18 moisM15M11

Le scénario prudent ne finance pas le projet

Avec de la rédaction humaine à 25 € l’article, les charges montent à 1 065 € par mois pour un CA de 540 € à M18 : le projet perd 500 € par mois au bout d’un an et demi, indéfiniment. Ce n’est pas un pessimisme de précaution, c’est le calcul. La viabilité du modèle repose entièrement sur un coût de contenu inférieur à 12 € l’article.

08Coûts et seuil de rentabilité

Investissement maximal, central

4 328 €

Trésorerie à financer avant retour positif

Point mort, central

Mois 15

Trois mois plus tôt en mix B2B renforcé

Charges fixes mensuelles

475 €

Contenu courant inclus, hors investissement initial

Seuil de viabilité du contenu

≤ 12 €

Coût par article au-delà duquel la marge disparaît

Sensibilité

Si…Alors…
Le coût par article passe de 10 à 15 €+200 € de charges/mois, point mort repoussé d’environ 4 mois
5 sites B2B au lieu de 3Prix moyen +45 €, point mort avancé de 4 à 5 mois
Le taux d’admission plafonne à 50 %CA divisé par 1,4, point mort au-delà de M20
Une plateforme disparaît ou suspend le réseauPerte de 40 à 60 % du CA selon la dépendance
Deux sites sont pénalisés par GooglePerte du trafic, donc de l’admission : ces sites sortent du modèle

09Risques et arbitrages

Le risque de fond, à trancher explicitement

Les plateformes visées vendent des articles avec lien suivi. La politique anti-spam de Google classe l’achat et la vente de liens comme manipulation. Les deux ne peuvent pas être vrais en même temps : soit les liens sont marqués rel="sponsored" et le prix baisse fortement, soit ils sont suivis et chaque site porte un risque de pénalité qui peut annuler l’actif. Ce choix n’est pas technique, il est commercial. Il doit être écrit noir sur blanc avant le Lot 1, parce qu’il détermine le prix moyen, donc toute la provision de ventes ci-dessus.

RisqueImpactParade
Pénalité moteur sur un ou plusieurs sitesPerte du trafic et de l’admissionQualité éditoriale réelle, pas de liens croisés, diversification des niches
Refus d’admission sur les plateformesZéro revenu malgré les coûtsTester l’admission dès le mois 4 sur les 2 sites les plus avancés
Dépendance à une seule plateformeArrêt brutal du CAMinimum trois plateformes actives par site admis
Coût du contenu qui dérapeMarge nulleSuivi du coût réel par article, alerte au-delà de 12 €
Dérive du périmètre techniqueLe projet devient un produit, pas un revenuCinq modules en v1, pas neuf ; le reste après preuve de revenu
Perte du VPSArrêt de la plateforme, blogs statiques toujours en ligneSauvegardes hors serveur, restauration testée chaque mois

10Planning par lots

LotLivrableDuréeCondition de passage
0VPS provisionné, Docker, nginx, sauvegardes, monitoring1 sem.Restauration testée avec succès
1Socle : base, auth, fiche site, annuaire plateformes2 sem.Un site se crée en brouillon, aucune publication possible
2Marché : niches, observations sourcées, scoring explicable2 sem.Chaque score affiche ses sous-scores et ses données manquantes
3Template Astro, build, publication sur domaine2 sem.Un site publié, statique, sans base de données
4Finance : commandes, factures, encaissements, dépenses2 sem.Les quatre états restent distincts dans tous les écrans
5Contenus : brief, génération, revue, coût par article3 sem.Aucune publication sans validation tracée

Total : environ 12 semaines pour la v1 complète. Les lots 1 et 3 peuvent être menés en parallèle pour publier un premier site en cinq semaines et tester l’admission plus tôt.