3.6 KiB
3.6 KiB
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 CIpublish-unique-dailyjob./daily-finds— capture-only sweep ofsources.json; writessrc/content/find/<yyyy>/<mm>/<slug>/, marks the day's shortlist (shortlist: true, up to 12), addsamazonLinkfor 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 4–7 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.mdis 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 (May–July 2026) stay published and keep their existing bundle spots, but they're ineligible for anything new.
- No camping equipment as pick of the day — camper trailers and other camping gear are fine as finds and occasional reviews, but never take the homepage hero.
- Editorial rules are forward-looking — what's published stays published; new exclusions apply only to future picks/finds/bundles/reviews, never to retroactive edits or unpublishing.
- Review heroes are auto-discovered from
src/content/reviews/<slug>/hero.<ext>(src/lib/hero.tsglob) — name the filehero.*; 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. sourcefrontmatter must exactly match anameinsources.json.topicsfrontmatter (finds and reviews) must come from the controlled vocabulary insrc/lib/topics.ts(TOPIC_METAkeys) — 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.tsadds 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.