Files
unique/CLAUDE.md
T
rzen 64bad7091b pipeline: EDITORIAL.md voice charter + fresh-eyes copy-edit stage
One written standard for every audience-facing word: concise, to the
point, inspiring delight through specificity — with word budgets per
copy type (reviews had drifted from a ~370-word median to 500-1000+).
All writing skills now reference the charter, and daily-pipeline gains
a stage-4 copy-edit pass: a subagent that didn't write the day's copy
tightens it against the charter, prose only, diff reviewed before
commit. Digest gains a copy-edit line.

Claude-Session: https://claude.ai/code/session_01WZaczDJjL3xZ3u5spsN5AL
2026-07-14 19:46:35 -04:00

28 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# unique.rzen.dev
A daily product-discovery site (Astro, static). The editorial pipeline is skill-driven and designed to run unattended.
## Pipeline
- `/daily-pipeline` — the whole daily chain: capture → bundle → reviews (several per run, judgment call) → pick of the day (explicit decision every run) → build → commit → push → digest. This is the entrypoint for scheduled/headless runs; scheduled runs auto-deploy afterwards via the lab CI `publish-unique-daily` job.
- `/daily-finds` — capture-only sweep of `sources.json`; writes `src/content/find/<yyyy>/<mm>/<slug>/`, marks the day's shortlist (`shortlist: true`, up to 12), adds `amazonLink` for confidently-matched physical products, and applies mechanical source maintenance.
- `/build-bundle [auto|weekly|<theme>|<slugs>]` — one themed roundup referencing find slugs. `weekly` = date-based catch of unbundled shortlist finds.
- `/cluster-bundles [auto]` — batch-cluster the backlog into 47 bundles.
- `/build-review <slug> [auto]` — graduate a find to a full review (fact-check against the product's own site is mandatory in auto mode).
Unattended runs never pause for confirmation — they publish, log to `daily-finds.log.md`, and report a digest; the user vetoes after the fact. Only two things stay user-only: vetting `candidate-sources.md` nominees into `sources.json`, and scheduling.
## Conventions that bite
- **`EDITORIAL.md` is the voice charter** — concise, to the point, inspiring delight (through specificity, never ad copy); word budgets per copy type. All audience-facing prose follows it; the pipeline runs a fresh-eyes copy-edit stage over each day's new copy.
- **No tobacco or alcohol content** — hard editorial exclusion at every stage: never captured as finds, never selected into new bundles, never graduated to reviews. A few legacy alcohol finds (MayJuly 2026) stay published and keep their existing bundle spots, but they're ineligible for anything new.
- Review heroes are auto-discovered from `src/content/reviews/<slug>/hero.<ext>` (`src/lib/hero.ts` glob) — name the file `hero.*`; no registration.
- The homepage "pick of the day" is `src/data/pick.json` (`{"hero": "<review-slug>"}`); falls back to the latest review.
- Find slugs are globally unique although folders are date-bucketed; URLs stay flat at `/find/<slug>/`.
- Finds are reachable through bundles and through tag pages (a secondary "Finds" list under the entry grid on `/tags/<tag>/`) — an unbundled find is still invisible on the home feed, grids, and category pages.
- `source` frontmatter must exactly match a `name` in `sources.json`.
- `topics` frontmatter (finds and reviews) must come from the controlled vocabulary in `src/lib/topics.ts` (`TOPIC_META` keys) — the schema enum fails the build on anything else. Tags are free-form; topics are curated. "Giftable" is a tag (`giftable`), never a topic.
- Amazon links: store canonical `https://www.amazon.com/dp/<ASIN>` with no query params; `src/lib/affiliate.ts` adds the tracking ID, badge, and disclosure at render time.
- Commit style: see `git log``content: …` for capture runs, `site: …` for everything user-visible; one commit per pipeline stage.
- `npm run build` (astro check + build) must pass before pushing.