Files

3.2 KiB
Raw Permalink Blame History

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 editorial charter — the voice (concise, to the point, inspiring delight through specificity, never ad copy; word budgets per copy type) and the canonical content rules (no tobacco/alcohol anywhere; no camping gear or harm-adjacent items as pick of the day; rules apply forward only — published stays published). All audience-facing prose and every selection stage follow it; the pipeline runs a fresh-eyes copy-edit stage over each day's new copy. Skills restate the rules for their stage, but the charter wins on drift.
  • 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 logcontent: … for capture runs, site: … for everything user-visible; one commit per pipeline stage.
  • npm run build (astro check + build) must pass before pushing.