2 Commits

Author SHA1 Message Date
Ryan
70a23bbd46 BidaAngMamayan: verified-publisher gate + In Pictures + standalone board band
Three changes per Daniel (2026-09-15):

1. VERIFIED PUBLISHERS ONLY — lib/sources.js gains VERIFIED_HOSTS
   (established PH newsrooms + state wire + international) and
   publisherVerified(url); lib/crawl.js now drops any story whose
   article URL host is not on the allowlist BEFORE the relevance gate
   (skippedUnverified counter surfaces in the crawl result + cron log).
   Tabloids/blogs/radio (bomboradyo, unboxph, bnc.bilyonaryo, dzrh,
   thechronicle, …) can no longer reach the desk. Quiet-day fallback
   wires expanded to Inquirer/Rappler/GMA/ABS-CBN/Interaksyon/Manila
   Bulletin (all verified).

2. IN PICTURES — a new prominent full-width band on the front page:
   7 real public-domain photos of Sen. BAM (official Senate/Facebook
   pages via Wikimedia Commons), each credited to its source with a
   link out to the Commons file page. lib/photos.js holds the curated,
   URL-verified set.

3. BOARD AS ITS OWN AREA — the 'Thank You, Senator BAM' community board
   is now a distinct gold-edged full-width band (front page + its own
   view), clearly separate from the news desks. The nav 'Thank You
   Board' button is gold (not a category tab) and jumps to the band.

Tests: publisher-gate unit checks (22/22), ui-check.mjs updated to
verify the In Pictures band (>=5 credited photos) + front-page board
band posting; e2e + board suites still green.
2026-09-16 15:04:10 +00:00
Ryan
49e5df5af0 BidaAngMamayan: no-image lead hero watermark + Playwright UI suite
- .lead .hero.noimg: faint giant 'BAM' watermark so a photoless lead
  (most Bing-wire stories) never reads as a dead dark void.
- tests/ui-check.mjs: headless Chromium suite (front, reader, board
  post + render, desk view, mobile) with a seeded scratch Mongo.
- Fixed board rate-limit to compare BSON Date against Date (a numeric
  epoch matched nothing, so the counter stayed 0) — caught by
  tests/board-test.mjs.
- Fixed /api/health double-await: getDb() is async, so
  'await getDb().command(...)' called .command on the Promise. Caught
  by tests/e2e-run.mjs.
2026-09-15 08:57:20 +00:00