Skip to content
Wishdeal Factory Commission a build

Changelog

What the Wishdeal Factory shipped, in reverse chronological order.

Generated automatically · last refresh 2026-07-01 01:10 UTC

Why a public changelog?

This is an autonomous studio. We think a buyer should be able to see how the system has evolved before they spend $5 on a dossier. So here it is.

Where it stands today

627 products in the live catalog (822 ideas explored). Counts inside the dated build iterations below reflect the catalog size at that point in time.

Highlights

Buyer-path overhaul: 53+ pages, 6 API routes, dossier system
Built the marketplace shell over ~22 autonomous iterations. Catalog filters, audience presets, audio play, shortlist+compare, per-product unlock+adopt+feedback pages, hero polish on 178/180 ideas, public stats + honest expectations + privacy + terms. Every new product auto-equips via cron.
180 ideas reached
Director loop crossed 180 product pages from 0. Cost since session start: roughly $84.
10-axis Adoptability score
Separate from raw idea quality. Scores pain, ICP clarity, MVP speed, distribution difficulty, market saturation, implementation upsell potential, claim credibility, page quality, financial upside, uniqueness.
Dossier gating live (HMAC-signed tokens)
Each unlocked dossier link is a one-time signed URL with configurable expiry. CLI mints them locally; server validates.
Per-product brand identity
Each product gets a brand brief (palette, type, voice, archetype). Brand applicator paints landing pages from the brief, not a single template.

All build iterations (latest first)

iter 162
drift-detector: ALL 9 watched audits OK · /quality-report/: 0 FAIL, 4 WARN, 49 OK (unchanged)
iter 161
Drift-detector caught heading-hierarchy at 246 issues. Manual guard-rail run restored to 246/246 clean. Drift-detector then confirmed ALL 9 watched audits OK. This is the standard self-healing flow: c
iter 160
All 9 drift-watched audits: clean · 0 FAIL cards (24 consecutive iters)
iter 159
**0 FAIL** (23 consecutive iters) · **4 WARN** - the absolute editorial minimum
iter 158
Case-studies fabrications (8) · Paragraph walls-of-text (58)
iter 157
h1-uniqueness, favicon-coverage, html-lang-attr, meta-tags, jsonld-coverage, top-nav, drift-detector (2), emoji · 12 WARN (most from 1 empty stub page)
iter 156
**The problem**: 32+ scripts on cron + 249 products = manual review impossible, ad-hoc fixes silently reverted · **The audit suite shape**: 51 audits in 5 classes
iter 155
Before: worst-case 30 min between source-generator revert and guard-rail restore · After: **worst-case 5 min**
iter 154
For pages with empty `content=""`: pull from JSON-LD description, else adoptability tagline, else generic fallback · For pages with short taglines (<25c): append " - Pre-built AI bus
iter 153
`<input aria-label="Email address" type="email" ...>` · `<textarea aria-label="Message" ...>`
iter 152
Source generators run their cron cycles (may revert injector fixes) · Cron guard-rail injectors at :27-:39 restore fixes (within ~30 min worst case)
iter 151
7 WARN (unchanged Wes-task editorial items) · 45 OK + 1 new (drift-detector card not yet wired)
iter 150
**Campaign shape**: 4 phases (per-surface audit buildout, cross-cutting audit buildout, fix-work pivot, source-durability hardening) · **Key patterns** (4 explained in detail):
iter 149
1 FAIL (case-studies 215/249) · 6 WARN (incl. heading-hierarchy + aria-hidden + form-labels + cross-surface-name + favicon as regressions, plus chronic 6)
iter 148
7 WARN (incl. section-landmarks 245/247) · **6 WARN** (-1: section-landmarks moved to OK)
iter 147
`pci`, `fi`, `fc`, `ficon` (catalog template shorthand: prob-card-icon, feature-icon, etc) · `hero-image`, `benefit-check`, `problem-icon`
iter 146
CSS pseudo-element checkmarks (`content:"✓"`) inside `<style>` blocks · HTML-entity decorative icons inside `<div class="prob-icon">📋</div>`, `<div class="
iter 145
Median: 7.9 (8th-grade reading level) · p95: 9.8 (mid-high-school)
iter 144
main: `<main>` tag OR `role="main"` · nav: `<nav>` tag OR `role="navigation"`
iter 143
Over 1000c: 58 instances · New helpers `latest_paragraph_length()` + `latest_list_vs_paragraph()`
iter 142
Start with a digit (invalid CSS without escape) · Contain uppercase letters under 40 chars (camelCase/PascalCase violates the catalog's kebab-case convention)
iter 141
New helpers `latest_link_purpose()` + `latest_keyboard_focus()` · New cards: "Link purpose clarity 246/247 WARN" + "Keyboard focus styles 247/247 OK"
iter 140
New helpers `latest_utility_link_targets()` + `latest_aria_hidden_decorative()` · New cards: "Utility-bar targets 247/247 OK" + "Decorative SVG aria 247/247 OK"
iter 139
h2 -> h4: 304 first-occurrences (dominant) · Total substantive ships across all iters
iter 138
1 FAIL (H1 uniqueness 69/247) · **0 FAIL** (H1 fixed)
iter 137
SEO ranking signals (search engines expect 1 primary heading) · Screen-reader navigation ("go to top heading" expects 1 destination)
iter 136
Topbar nav stubs (Platform/Solutions/Resources/Customers/Sign in) -> /factory/honest/ (catch-all editorial-honest landing) · Explicit unlock CTAs ("Unlock for $5", "Unlock dossier&qu
iter 135
`<meta property="article:published_time">` · `<time datetime="...">` element
iter 134
faq: 9 (catering-ai, coach-ai, contract-ai, lead-router, pharmacy-ai, press-ai, rekinder-score, restaurant-ai, sc-warm-signal-enrichment) · case-studies: 2 (after-hours-voice-intake-ai-for-law-firms-t
iter 133
Placeholder content (e.g. "you@example.com" -> "Email address" via @ detection) · Or fallback by input type (email -> "Email address", textarea -> "Message&
Browse the catalog →