# Demo Data And Seeding

> Use when building or reviewing demo/seed data for a product with a dashboard, or a reset that must not touch real records: a reserved id namespace enforced server-side, reset by prefix across every store, seeding through the running API rather than the database, deterministic idempotent generation, a second generator that speaks the real ingest protocol, and personas so the data demonstrates something.

- Skill: `konradcinkusz/demo-data-and-seeding` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add konradcinkusz/demo-data-and-seeding`
- Raw SKILL.md: https://api.skillmd.com/api/skills/konradcinkusz/demo-data-and-seeding/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: konradcinkusz (https://skillmd.com/u/konradcinkusz)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/konradcinkusz/demo-data-and-seeding

---


# Demo data: safe to create, safe to remove, and worth looking at

**Read [`references/DEMO-DATA-AND-SEEDING.md`](references/DEMO-DATA-AND-SEEDING.md) before applying any of this.**
That file is the standard; everything below it is a summary to help you decide
whether this skill applies and to check your work afterwards.

Reference-architecture principles: P5, P13.

## What this standard covers

- Namespace demo data, and enforce it at the receiver
- Reset clears the namespace, everywhere it was written
- Seed through the running system, not around it
- Deterministic by default
- Two tiers, and what each one proves
- Personas: demo data should tell a story

## Failure modes

| Symptom | Cause |
|---|---|
| A reset deleted real data | Cleanup matched on something other than a reserved namespace — a date range, "everything", a guess (§1) |
| Seeded ids overwrote real records | The namespace was a convention the writing tool honoured, never enforced at the receiver (§1) |
| Cleared demo data comes back | Reset cleared one store; the data was written to two (§2) |
| The demo shows a state the product cannot actually produce | Seeded straight into the database, bypassing the validation and derived values the service applies (§3) |
| A screenshot cannot be reproduced | Unseeded RNG, so every run produces a different dataset (§4) |
| Re-running the seeder doubles the data | Non-idempotent: new ids each run instead of stable namespaced ones (§4) |
| Ingest is broken and every demo still looks perfect | Only the high-level seeder exists, and it enters past the ingest path (§5) |
| The dashboard is full and the demo is unconvincing | Randomised rows rather than personas — nothing on screen is *about* anything (§6) |
| A feature has no demo and nobody noticed until a customer call | No persona exercises it, and nothing checks that (§6) |

## Checklist

- [ ] Every seeded record carries a reserved id prefix
- [ ] The prefix is enforced **server-side**, and a batch containing any out-of-namespace id is refused whole rather than filtered
- [ ] The endpoint's authorisation reasoning is written where the endpoint is defined — in particular, why reusing an existing credential widens nothing
- [ ] Reset deletes by prefix from **every** store the data was written to, logging counts per store
- [ ] The seeder is a client of the running service: no direct database access, no restart required
- [ ] RNG is seeded from an argument with a fixed default, and re-running converges rather than accumulating
- [ ] A second generator speaks the real ingest protocol, so the ingest path is demonstrated rather than skipped
- [ ] Generation is persona-driven, and each persona maps to a recognisable story on screen
- [ ] Every feature worth demonstrating has a persona that exercises it

---

Generated from [`docs/guides/DEMO-DATA-AND-SEEDING.md`](https://github.com/konradcinkusz/architecture-standards/blob/main/docs/guides/DEMO-DATA-AND-SEEDING.md) by `scripts/build-marketplace.mjs`. Do not edit this file: change the source document, or its entry in `catalog/marketplace.catalog.json`, and re-run the generator.

