🌱 SeedForge — Demo Data Generator

Avatar
Posts 428 1580

🌱 SeedForge — Demo Data Generator

Version: 1.1.2
Compatibility: Flatboard Pro ≥ 5.0.0
Storage: JSON & SQLite (transparent)
License: GPL3
Download: in resources management


What it does

SeedForge is an admin plugin that populates your Flatboard forum with realistic fake data in one click. Useful for development, design reviews, load testing, and demos.

It generates:

  • Fake users — random names, emails, and unguessable passwords (they cannot log in)
  • Fake categories — with names, descriptions and Font Awesome icons
  • Fake discussions — realistic titles and opening posts in the chosen language
  • Fake replies — threaded posts inside each discussion

All generated entities are tracked in a local registry (seedforge_ids.json) so they can be removed cleanly without touching real data.

Installation

  1. Copy the SeedForge/ folder into your Flatboard plugins/ directory.
  2. Activate it from Admin → Plugins.
  3. Go to Admin → Plugins → SeedForge → Settings to configure generation parameters.
  4. Go to Admin → Plugins → SeedForge → Dashboard to generate or purge data.

Configuration

ParameterDescriptionDefault
Fake usersNumber of fake user accounts to create10
Fake categoriesNumber of fake categories3
Discussions / categoryDiscussions created per category5
Replies / discussionReply posts per discussion (excluding first post)4
LanguageContent language: fr (French) or en (English)fr
Purge before generatingDeletes existing fake data before each generation runoff

Generating data

From the Dashboard tab, click Generate data. A live progress bar tracks each discussion as it is created. The counters on the right update in real time.

Example: 10 users · 5 categories · 20 discussions/cat · 10 replies/disc
→ 10 + 5 + 100 + 1 000=1 115 entries in roughly 20–40 seconds (SQLite).

Purging data

The Purge button in the danger zone removes every entity tracked by SeedForge (users, categories, discussions, posts) without touching any real content.

Security

  • All routes require an active admin session (requireAdmin()).
  • Generation AJAX routes do not use CSRF tokens — they are already restricted to admin-authenticated sessions and are not reachable from external pages.
  • Fake user passwords are cryptographically random hex strings; these accounts cannot be used to log in.

Architecture


SeedForge/
├── plugin.json               # Metadata, form fields, default config
├── SeedForgePlugin.php       # boot() — registers routes
├── SeedForgeService.php      # Generation and purge logic
├── SeedForgeController.php   # Admin controller (GET steps + purge)
├── seedforge_ids.json        # Runtime tracking of generated IDs (auto-created)
├── views/
│   └── admin.php             # Admin UI (dashboard + settings tabs)
└── langs/
    ├── fr.json
    ├── en.json
    └── de.json

How generation works (technical)

Generation is split into three sequential AJAX steps to avoid PHP and proxy timeouts:

  1. Step 1 — Users (POST /admin/seedforge/step/users): creates all fake users at once.
  2. Step 2 — Categories (POST /admin/seedforge/step/categories): creates all categories.
  3. Step 3 — Discussions (POST /admin/seedforge/step/discussion): called once per discussion in a parallel pool of 10 concurrent requests. Each call creates one discussion and all its reply posts.

The JavaScript frontend uses a concurrency pool (10 parallel requests) to saturate available PHP workers while staying within connection limits.

Performance optimizations

The plugin bypasses Post::create() and calls StorageFactory::create()->createPost() directly during bulk generation. This eliminates the ~3 full cache-directory scans (forgetByTag) that the model triggers per post, replacing them with a single targeted invalidation per discussion after all posts are written.

ScenarioCache scans (before)Cache scans (after)
200 discussions × 25 posts~15 000~600

Discussion::create() and Category::create() are still called through the normal models to ensure slugs are generated, hooks are triggered, and category counters are updated correctly.

Edited on  Feb 19, 2026  By  Fred .

  • Plugins fake-data development-tool
  • Like(1)
    ThallesThalles
Avatar
Posts 428 1580

🇫🇷 Français

Ce que fait le plugin

SeedForge est un plugin d'administration qui peuple votre forum Flatboard avec des données fictives réalistes en un clic. Idéal pour le développement, les revues de design, les tests de charge et les démonstrations.

Il génère :

  • Des utilisateurs fictifs — noms, emails et mots de passe aléatoires non mémorisables (impossibles à utiliser pour se connecter)
  • Des catégories fictives — avec noms, descriptions et icônes Font Awesome
  • Des discussions fictives — titres et premiers posts réalistes dans la langue choisie
  • Des réponses fictives — posts de réponse dans chaque discussion

Toutes les entités générées sont référencées dans un registre local (seedforge_ids.json) pour pouvoir être supprimées proprement sans toucher aux données réelles.

Installation

  1. Copiez le dossier SeedForge/ dans le répertoire plugins/ de votre Flatboard.
  2. Activez le plugin depuis Admin → Plugins.
  3. Accédez à Admin → Plugins → SeedForge → Paramètres pour configurer.
  4. Accédez à Admin → Plugins → SeedForge → Tableau de bord pour générer ou purger.

Configuration

ParamètreDescriptionDéfaut
Utilisateurs fictifsNombre de comptes utilisateurs à créer10
Catégories fictivesNombre de catégories à créer3
Discussions / catégorieDiscussions créées dans chaque catégorie5
Réponses / discussionPosts de réponse par discussion (hors premier post)4
LangueLangue du contenu : fr ou enfr
Purger avant générationSupprime les données fictives existantes avant de générernon

Générer des données

Depuis l'onglet Tableau de bord, cliquez sur Générer les données. Une barre de progression temps réel suit la création de chaque discussion. Les compteurs à droite se mettent à jour en direct.

Exemple : 10 utilisateurs · 5 catégories · 20 discussions/cat · 10 réponses/disc
→ 10 + 5 + 100 + 1 000=1 115 entrées en environ 20–40 secondes (SQLite).

Purger les données

Le bouton Purger dans la zone de danger supprime toutes les entités suivies par SeedForge (utilisateurs, catégories, discussions, posts) sans toucher au contenu réel.

Sécurité

  • Toutes les routes exigent une session admin active (requireAdmin()).
  • Les routes AJAX de génération n'utilisent pas de token CSRF — elles sont déjà restreintes aux sessions admin et ne sont pas accessibles depuis des pages externes.
  • Les mots de passe des utilisateurs fictifs sont des chaînes hexadécimales aléatoires cryptographiquement sûres ; ces comptes ne peuvent pas servir à se connecter.

Architecture


SeedForge/
├── plugin.json               # Métadonnées, champs de formulaire, config par défaut
├── SeedForgePlugin.php       # boot() — enregistrement des routes
├── SeedForgeService.php      # Logique de génération et de purge
├── SeedForgeController.php   # Contrôleur admin (étapes GET/POST + purge)
├── seedforge_ids.json        # Registre des IDs générés (créé automatiquement)
├── views/
│   └── admin.php             # Interface d'administration (onglets tableau de bord + paramètres)
└── langs/
    ├── fr.json
    ├── en.json
    └── de.json

Fonctionnement de la génération (technique)

La génération est découpée en trois étapes AJAX séquentielles pour éviter les timeouts PHP et proxy :

  1. Étape 1 — Utilisateurs (POST /admin/seedforge/step/users) : crée tous les utilisateurs fictifs d'un coup.
  2. Étape 2 — Catégories (POST /admin/seedforge/step/categories) : crée toutes les catégories.
  3. Étape 3 — Discussions (POST /admin/seedforge/step/discussion) : appelée une fois par discussion dans un pool parallèle de 10 requêtes simultanées. Chaque appel crée une discussion et tous ses posts de réponse.

Le frontend JavaScript utilise un pool de concurrence (10 requêtes en parallèle) pour saturer les workers PHP disponibles tout en restant dans les limites de connexion.

Optimisations de performance

Le plugin bypasse Post::create() et appelle StorageFactory::create()->createPost() directement pendant la génération en masse. Cela élimine les ~3 scans complets du dossier cache (forgetByTag) déclenchés par le modèle à chaque post, remplacés par une seule invalidation ciblée par discussion après l'écriture de tous ses posts.

ScénarioScans cache (avant)Scans cache (après)
200 discussions × 25 posts~15 000~600

Discussion::create() et Category::create() continuent d'utiliser les modèles natifs pour garantir la génération des slugs, le déclenchement des hooks, et la mise à jour correcte des compteurs de catégories.

Avatar
Posts 428 1580

1.1.3 — 2026-03-29

Changed

  • Added update_url and changelog_url fields to plugin.json. Flatboard now detects available updates and displays them in Admin Panel > Tools > Updates. The changelog_url links to the plugin's resource page on flatboard.org.
  • Updated minimum Flatboard requirement from 5.0.4 to >=5.2.0 (normalized to object format) in plugin.json.
Visitor, reply to this topic…
Log in to reply
Navigation
3 Posts
post #1
19 Feb 2026
By Utilisateur
Statistics
166
Discussions
911
Replies
21
Flatboarders
4
Contributors
New member : Emmanuel
Online
27 Guests online