בס״ד

News Brief — Design + Setup

docs/NEWS_BRIEF_DESIGN.md · last changed (pre-VM history) · rendered from GitHub master

News Brief — Design + Setup

✅ DECISIONS LOCKED 2026-06-11 (Worker 🐝, ratified-unless-vetoed by Sam). The open questions below are ANSWERED; sample shipped (outputs/2026-06-11_14-10_briefing_jewish-news.html — Sam: "looks pretty cool"). The old Path A/B/C email-pipeline debate is SUPERSEDED by Path D — live web pull (how the sample was built; no NEWS_INPUT feeding needed).

LOCKED DEFINITION (v1 — refine after a week of reads)

Decision Call Why
Pipeline Path D — live web pull at generate time (WebSearch/RSS at fire time, AI-summarized, portal-published) Proven by the 6/11 sample; zero manual feeding; NEWS_INPUT stays as an optional Sam-dictation lane
Sources YWN · Matzav · 5TJT · Times of Israel · Hamodia + general wire only when a story crosses into Sam's lanes Sam's actual reads; [SOURCE]-tagged per output-format rule
Sections TL;DR one-liner → Israel/Klal Yisroel → Frum world (EY) → Close-to-home (Five Towns/Lakewood/Monsey/Rockland) → Markets one-line (VIX/SPY if >1% move) → Parsha thought → Music corner Sample structure Sam liked + his geo memory + Jewish music standing topic
Cadence Daily Mon–Fri, generated with the 7:30 Day-Ahead (one extra section/link, not a separate ping) + fuller Sunday edition (week roundup + week-ahead) Sam 6/11: "maybe even daily, just wanna see if it works" — try daily for 2 weeks, drop to Sun-only if noise
Shabbos/Yom Tov Skip Sat + Yom Tov (Hebcal-aware); Sunday edition covers what happened Obvious
Sam's edition Portal (gated), linked from the Telegram morning ping Cadence v2 delivery rule
Shareable edition PUBLIC fixed link, no logins — same brief minus markets/personal lanes, published to ONE stable URL that overwrites itself daily (news-today.html on public hookstreetservices.com or standalone; short-URL on top later). Siblings/extended family bookmark once. Sam 6/11: outside family, no accounts, self-overriding daily
Chanie/family copy The public link IS the family copy (answers the old open question) No extra build
Owner Generation = the cloud morning-spine (Brain & Inbox lane); definition = this doc

What's still open (Sam, whenever): which artists/feeds for the Music corner · any source to ADD/CUT after 2 weeks of reads · the short-URL name if wanted.

v2 REFINEMENTS (Sam voice note, 2026-06-12 Fri PM — locked into the definition)

Refinement Rule
Source blend ALL outlets, not just Jewish ones: general wire/mainstream (AP/Reuters/ABC/etc.) AND the Jewish outlets (YWN · Matzav · 5TJT · ToI · Hamodia) — woven into ONE briefing. "Looking at everybody, unbiased."
No repeats Dedup across sources AND across days — a story already covered yesterday appears only if it MOVED. "Don't give me the same stuff and repeating information."
Unbiased, not pushy Synthesize across outlets; never adopt one outlet's framing wholesale. Maintain a growing exclusions list (topics Sam doesn't want pushed) — starts empty, grows from his feedback.
Geo layering (over time) Add ZIP-code-level local layer per user_geographic_scope (11581/Five Towns · Monsey/Rockland · Lakewood · Israel) — incrementally, as wanted, not all at once.
Season-aware Always Hebcal-aware: candles on Erev Shabbos, Yom Tov skips, seasonal context (summer travel, school calendar). "Keep all the seasons in mind."
PUBLIC family edition — SECURITY BY CONSTRUCTION The family page is 100% static: zero JS fetches, zero API keys, zero links into gated surfaces, zero personal/financial/queue content. There is nothing on it to leak. Demo shipped: outputs/news-today.html (stable overwrite-daily name per the v1 lock). Currently on the GATED portal for style review — promoting it to a truly public URL (hookstreetservices.com path or standalone) is a separate hosting decision that requires the isolation review first (feedback_endpoint_auth_audit: probe every route, confirm the public surface shares NO auth context, no phantom leftovers).
Demo outputs/news-today.html built 6/12 from that morning's live-pull briefing, minus markets + personal lanes. Sam to react on style.

Sam's ask (original)

I wanna fire up a morning news brief. I want to be able to send myself a daily, weekly, monthly, every-other-day news. I wanna dictate what I see, when, and how it's seen. Make it real, useful.

What already exists in the workspace

v1 BOS has news plumbing (NEWS_INPUT tab)

Prior weekend-news briefings (one-shot HTML)

The gap

Sam wants AUTOMATIC. Two missing pieces:

  1. Source ingestion — something needs to put fresh news INTO NEWS_INPUT regularly
  2. Dictate what to see — config-driven filters (geographic, topic, urgency)

Three paths forward (recommendation: Path B)

Path A — Manual: Sam types/dictates news into NEWS_INPUT

Path B — Email-to-BOS pipeline (RECOMMENDED) 🎯

Build a Voice-Intake-style channel for news:

  1. iPhone Wispr Flow dictates news takeaway into Gmail with subject [NEWS-V1]
  2. Gmail filter auto-labels these Claude-Briefings/News
  3. Apps Script trigger (similar to existing PROCESS_QUICK_CAPTURE) reads labeled emails every 30 min, parses into rows, writes to NEWS_INPUT
  4. v1 reports already render NEWS_INPUT — no other change needed

Setup effort: 1 focused session (~2 hrs). Same architecture as Voice Intake (per memory).

How Sam dictates "what / when / how":
- Bucket field in NEWS_INPUT — Markets / Real Estate / Geopolitical / Crypto / Local / Industry — set by subject prefix [NEWS-MKT], [NEWS-RE], etc.
- Action / Relevance field — Sam adds his own one-liner on why it matters
- INCLUDE_NEWS_* toggles — control which report cadence (DAILY/WEEKLY/MONTHLY) shows news

Path C — Web scraper / RSS ingestion

Setup effort: 1–2 sessions (~3–4 hrs). More complex but truly autonomous.

Cons: spammy without strong filters, easy to over-include junk, expensive in API tokens at scale.

Recommended config for "what Sam wants to see"

Per user_geographic_scope.md memory:

Default geographic scope:
- ZIPs: 11581 / 11516 / 11210 / 11230 / 34747 / 33896 / Miami-Surfside
- Regions: Rockland / Monsey / Forshay / Pomona / Wesley Hills / Lido / Jerusalem / Beit Shemesh
- Topics: Jewish music

Default topical scope:
- Markets: SPY / QQQ / VIX moves >2% · sector rotation events · earnings beats/misses for held tickers
- Real estate: Disney STR market · Orlando · Long Island RE comps
- Hookstreet: anything that affects Eden / Mildred / Mom / Chanie's biz

Cadence design (per Sam's "daily / weekly / monthly / semi-weekly")

Cadence Day(s) Source What's in it
Daily Mon-Fri 7 AM (skip Sat/Sun) NEWS_INPUT entries since last fire Top 5 takeaways, color-tagged by Bucket
Weekly Sunday 8 AM NEWS_INPUT entries last 7 days Themes round-up + week-ahead preview
Bi-weekly Every other Wed 7 AM NEWS_INPUT entries last 14 days Mid-stream check (only if INCLUDE_NEWS_BIWEEKLY = YES)
Monthly 1st of month 9 AM NEWS_INPUT entries last 30 days Macro themes + stories that compounded

All toggleable via SETTINGS. v1's INCLUDE_NEWS_* already exists.

What I recommend Sam do NEXT

Option 1 — Quick start (this week):
- Use Path A manually for 7 days. Type 1–2 news items into NEWS_INPUT each morning
- See what cadence + format actually fits your routine
- Then commit to Path B or C based on what hurt the most

Option 2 — Full build (next session):
- I build the Email-to-NEWS_INPUT pipeline (Path B) — same architecture as Voice Intake
- ~2 hrs, you tell me the bucket prefixes you want
- Test for a week, refine

Files for reference

Open questions for Sam

  1. Path B (email pipeline) or Path C (RSS auto-pull)?
  2. Geographic + topical filters from user_geographic_scope.md memory still current?
  3. Daily 7 AM or different time?
  4. Saturday/Sunday inclusion or skip entirely?
  5. Wife's chanietreitel@gmail.com get a copy? (per WIFE_TEST_MODE pattern)
Source trail · docs/NEWS_BRIEF_DESIGN.md @ master · rendered 2026-07-02 7:23 PM EDT by scripts/build-docs.py · the .md in the repo is the truth; this page is the phone-readable view