New rule at every selection stage: daily-finds drops such items at capture (categorical, overrides design/gift appeal; borderline cases skip too), build-bundle and cluster-bundles treat legacy alcohol finds as ineligible for new bundles, and build-review refuses to graduate them even on explicit slug. Existing finds stay published per forward-only decision; CLAUDE.md records the policy centrally. Claude-Session: https://claude.ai/code/session_01WZaczDJjL3xZ3u5spsN5AL
2.9 KiB
2.9 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
- 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.
- 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.