Practical build log · 8 min read · Updated July 2026
I kept doing the same thing before every automation sprint: open ChatGPT, describe the dataset I needed, copy JSON into a fixture file, run tests, find a typo in the schema, re-prompt, and hope the new rows still matched yesterday’s failures.
That’s fine for a spike. It’s a bad fit for CI.
I built the BeakonHub Test Data Generator because I wanted three things ChatGPT doesn’t give you out of the box:
- Same seed → same rows every time
- QA-shaped fields — enums with edge statuses, Luhn-valid test cards, UK postcodes
- One-click exports to JSON, SQL, Cypress, and Playwright — no paste drift
This isn’t a funded startup product. It’s a single-page tool embedded on a WordPress blog, maintained by one engineer. Here’s what actually went into it — including the mistakes.
The problem I was solving
Most teams hit the same wall:
- Tests need realistic data with boundary values (refunded orders, inactive users, expired cards).
- Data must be reproducible so flaky-test debugging isn’t “maybe the fixture changed.”
- Frameworks expect data in specific shapes —
cy.fixture(), Playwright imports, SQL seeds.
General-purpose AIs are good at the first draft. They’re weak at locking a seed, enforcing field types, and handing you a .ts file your pipeline can import without hand-editing.
I wanted a workflow built for QA engineers, not prompt engineers.
Design principles (before any code)
I wrote four rules on a sticky note and didn’t let myself break them:
- Human review always. AI can propose a schema; the engineer approves before data generates.
- Browser-local generation. Row data never needs to hit my server — only the optional AI schema call.
- Seed is first-class. Visible, editable, shareable in conversation (URL state is on the roadmap).
- Ship small. One HTML file in a WordPress Custom HTML block — no React build chain for v1.
That last point mattered. I’m one person. A Streamlit app or separate SaaS would be cleaner architecturally and slower to ship.
Architecture in plain English
The live tool (v7) is one self-contained widget:
- Left panel: AI-Assisted mode or manual Schema Builder (presets, field types, row count, locale).
- Right panel: Console with export tabs — JSON, CSV, SQL, NDJSON, TypeScript, Cypress, Playwright.
- Engine: Pure JavaScript PRNG (
mulberry32+ hashed seed) — no backend for row generation. - AI layer: WordPress AI Engine REST API proposes JSON schemas; user loads into builder and generates locally.
WordPress hosts the page. A Code Snippets PHP file wires security headers, SEO overrides, footer fixes, and the AI config (window.BH_MWAI) on the tool page only.
What v1 got right
Seed-based reproducibility
Each row derives from hashSeed(userSeed) ^ rowIndex. Change the seed — you get a new dataset. Keep it — your colleague sees identical rows. That alone beats copy-paste from a chat window.
QA field types
Not just names and emails. The generator includes enums, date ranges, decimal bounds, Luhn card numbers, and UK/US locale-aware addresses. The Orders preset ships with paid,pending,refunded,failed because those are the statuses that actually break checkout tests.
Framework exports
The Cypress tab outputs an ES module with export default testData. Playwright gets a typed interface plus testData array. That’s the “take it straight into your repo” step most chat tools skip.
“Why not ChatGPT?”
I added a comparison block on the tool itself — not to bash LLMs, but to set expectations. ChatGPT brainstorms. This tool operationalises fixtures for pipelines.
What I added later (and why)
AI-Assisted schema mode came after the manual builder proved useful. The prompt returns strict JSON (field names, types, opts). You review a preview table, click Load into Schema Builder, tweak if needed, then generate. AI never ships row data directly to CI without you in the loop.
WordPress-safe JavaScript was a painful lesson. WordPress encodes && in inline scripts as && and silently breaks your widget. v6/v7 rewrote conditionals to avoid bare && entirely. If you embed JS in Custom HTML blocks, test on a real post — not just locally.
Page cache was the other gotcha. WP-Optimize and LiteSpeed served stale HTML on About/Contact/Privacy after snippet updates. Fix: version bump in PHP auto-purges cache on save. Always hard-refresh after deploy.
What I deliberately didn’t build (yet)
- User accounts and saved projects (freemium later, if traffic justifies it)
- Shareable URLs with encoded schema + seed
- Templates gallery beyond five quick-start presets
- AI-generated row data — schema only; rows stay deterministic in-browser
Saying no kept the scope shippable. Every item above is real — just not v1.
Honest results so far
The tool works. Traffic is still near zero — this article is part of fixing that. I’m not claiming thousands of users or a 10× productivity miracle.
What I can say: I use it myself before writing Playwright suites, and it’s faster than re-prompting a chatbot for the same fixture shape every sprint.
Your mileage will vary. If your team already has a factory pattern in code, you may not need this. If you’re tired of unmaintainable JSON in gists, it’s worth five minutes.
Try it in 60 seconds
- Open the Test Data Generator.
- Click the Orders preset.
- Set seed to
beakon-tutorial. - Hit Generate data.
- Switch to Playwright or Cypress → Download.
Same seed tomorrow → same rows. That’s the whole point.
What’s next
On the tool: shareable seed URLs, more templates, a short voice-walkthrough video on the page.
On the site: every article gets a CTA to the tool it relates to — this one included.
If you build something similar, steal the principles: reproducibility, human review, framework-native exports. The WordPress-in-a-box delivery is optional.
Questions or edge cases you want supported? Get in touch — I read every message.
Live tool
Use the generator this article describes
Free, no account, runs in your browser. Set a seed, export to Cypress or Playwright, and drop the file into your repo.
- v7 live now
- Seed-based
- AI schema assist
- Cypress + Playwright
You just read the build log — now try the 60-second walkthrough above.
Need reproducible test data for your next suite?
Build a schema in plain English or by hand, set a seed, and export fixtures your pipeline can re-run — JSON, SQL, Cypress, or Playwright.
- Same seed, same rows
- QA edge cases
- Browser-local
- No copy-paste drift
Human review still required — the tool proposes schemas and data; you control what ships to CI.
