Changelog
All notable changes to Crown are documented in this file.
This file is automatically maintained by release-please from Conventional Commits. The format follows Keep a Changelog. The version scheme is SemVer.
How releases happen:
- Push to
mainwith a Conventional Commit (feat:,fix:,chore:, etc.). - release-please opens (or updates) a single "release PR" with the next version + changelog diff.
- Review + merge the release PR → tag is cut, GitHub Release is published,
package.json+.release-please-manifest.jsonare bumped.
[1.0.0] - 2026-05-23
Baseline release. Captures everything shipped in the first ~46 PRs before automated changelog management was wired up.
🚀 Features
- Catalog pipeline — full async generation flow: pain discovery (LangGraph) → enrichment (V3, 6-layer) → TRIBUNAL (8-judge consensus) → idea generation → reports → DB
- Auto-catalog cron — 10 GCP Cloud Scheduler slots produce ~10 catalogs/day with country-aware RSS sourcing
- Country gate — three-rule pain-discovery gate (target-in-title accept, competing-country reject, snippet fallback) prevents cross-country catalogs
- Admin catalog editor —
/admin/catalog/[id]/editlets admins fix any field on a row + re-run the orchestrator (audit-logged) - Cron kill-switch —
/admin/cronsmaster toggle pauses every scheduled job during incident triage - Catalog detail — separated Share + Build sections, WhatsApp added, vibe-coder CTAs (Lovable, Blink) cleanly distinct
- /catalog — defaults to newest-first sort (was score)
- Home rail — "Just researched" strip with view counts + per-card CTA + impression/click funnel
- User-paid generation —
/dashboardwith mandatory country dropdown, Firebase auth, credit wallet, Cloud Tasks → tribunal-worker - Dev stack —
docker compose upboots Postgres + Next.js hot-reload with.env.localquickstart
🐛 Notable bug fixes pre-1.0
- Country mismatch — LangGraph channels weren't propagating the gate flag; Serper queries used 2-char ISO codes instead of full country names; gate accepted any-keyword-anywhere instead of weighting title
- Schema drift —
/api/user/catalogs+/api/admin/retry-catalogselected JSONB columns that prod had moved to GCS via migration 024 - Production credentials leak — PR #35 accidentally committed a DB password; rotated immediately + tightened precommit gitleaks rules to catch the class
- Cloud Run + Vercel deploy parity — fixed
.dockerignoreexcluding paths the prod Dockerfile copied; added post-deploy catalog smoke workflow via Workload Identity Federation
📚 Documentation
- CLAUDE.md — ship cycle (13 steps), deploy targets, scheduler cadence table, local-dev quickstart, env-file gotchas, emergency-stop reference
- README — Getting Started section with prerequisites, first-time setup, daily commands, common foot-guns
.env.local.example— grouped by failure mode (REQUIRED / REQUIRED-FOR-FEATURE / OPTIONAL), every key the running app reads
🧹 Chores
- GH Actions quota cut — restricted Deploy Vercel to manual-only, removed Security Scan PR trigger, added concurrency cancellation to CI
- Master switch table —
system_settingskv table (migration 058) backing the cron kill-switch - Admin audit log —
admin_audit_log(migration 059) tracks every mutation with hashed key fingerprint
Future entries below this line will be appended automatically by release-please.