Demo Data Generator
A demo that asks visitors to sign up loses most of them; a demo full of "Test User 1" and "Lorem ipsum" convinces nobody. Good demo data looks like a real account a few months in, holds together (orders belong to real users, totals add up, nothing happens before signup), and contains no real person's details. This skill designs that data and writes a seeded generator that produces the same files every time.
Required Inputs
Ask for these if not provided:
- The data model: entities, fields, types and relationships (a schema file, migrations or ORM models)
- The story the demo should tell: for example "a five-person design studio, three months in, one overdue invoice"
- Volume: how many of each entity makes the demo feel alive without being slow
- Language and storage: where the seed files will be loaded (JSON, CSV, SQL inserts)
- Locale: names, currency, date and phone formats
Working from a brief
Given the tables and the setting, generate the data anyway: state the assumed columns in one line per table, then give complete seed data (CSV or SQL) for every table named, consistent across tables, with realistic but clearly fake names, dates and amounts.
Output Structure
1. Schema summary
A table of entities and the rules that keep them consistent:
| Entity | Count | Key fields | Relationships | Consistency rules |
Consistency rules include foreign keys that must exist, lifecycle order (created before updated, signup before first order), derived values (totals from lines, counts from children) and status transitions that are allowed.
2. The story
Five to eight sentences describing the demo account, with the specific details that make screens interesting: one item overdue, one power user, a recent spike, an empty state somewhere useful.
3. Generation script
A complete script, seeded so the same seed gives byte-identical output, built on references/generator-template.mjs (or translated to the project's language). It must:
- use a seeded random generator, never
Math.random() directly
- generate parents before children and pick foreign keys only from generated parents
- compute derived values rather than inventing them
- run consistency checks at the end and exit with an error if any fail
- write seed files and print a one-line summary
4. Seed files
A short excerpt of each generated file (three records each) and the command that regenerates them.
5. No-real-data checklist
Quality Checks
Anti-Patterns
- Copying production data and "anonymising" it. Re-identification is easier than it looks; generate from scratch.
- Random everything. Uniform randomness looks fake; real accounts have a few heavy users and many light ones.
- Unseeded generation. Screenshots and tests drift every time the data is rebuilt.
- Real-looking emails at real domains. Someone will receive the demo's password-reset email.
Example Trigger Phrases
- "Generate demo data for my invoicing app so visitors don't need to sign up."
- "Create realistic seed data for screenshots, no real people."
- "Write a seeded script that fills my sandbox with consistent fake data."
- "I need a no-signup demo. Make the data tell a story."