# Bird's Eye — backlog entries, 2026-09-29

For the Trader Dash backlog (`birdseye-backlog.md` in the "Trader Dash" project). Written from a Bernie-project session, which cannot reach that project, so this sits beside the scripts in `BirdsEye\` and in Bernie project knowledge until it is merged.

## Shipped

**v1.17 — trader sentiment scroll · ✓ SHIPPED**
- `sentiment_feed.py` (new): polls StockTwits public streams for SPY, QQQ and the top 20 of `shortlist.json` → `sentiment.json`. One request every 20 s (~180/hr); SPY/QQQ every 3 min; full sweep ~8 min. 429 → 5-min back-off, 403 → 10-min, fault written into the file.
- Crowd read = users' own Bullish/Bearish tags on the last 30 posts (≥65% Bullish, ≤35% Bearish, <5 tagged = "thin"). **Not** StockTwits' on-page gauge — on 09-29 SPY's gauge read 77–78 "Extremely Bullish" while the tagged split was 45% → 38%.
- BUZZ = message pace ≥ 3× the name's own moving-average pace; needs 5 samples (~40 min) before it can fire. Baseline persists in `sentiment_state.json`.
- Dashboard: news scroll under the header (Wire → X read → crowd pulse → ⇄ crowd-vs-tape divergence → BUZZ → news → top-20 crowd reads); `ST n%` + BUZZ on cards; Sentiment row with latest posts in the detail sheet. Own 60 s loop, independent of the quote timer.
- `xread.json`: Claude's hand X read at the reversal checkpoints (X API is paid; not automated). Written 10:39 and 11:30 on 09-29.
- Selftest 18 assertions; headless render against live StockTwits + quotes/roster/catalysts.

**v1.18 — Finviz Elite layer · ✓ SHIPPED**
- `finviz_feed.py` (new): Elite CSV exports with the key from `finviz_token.txt` (never printed or written out) → `finviz.json`. Stocks every 2 min (whole shortlist + SPY/QQQ, all columns parsed by header name), per-ticker news for top 20 + market news every 3 min. Market news filtered to markets desks (Bloomberg, WSJ, MarketWatch, CNBC, Reuters, Yahoo, Barron's…) talking markets.
- Headline tone = keyword read of the title (Finviz carries no sentiment) — a hint, labelled bullish/bearish.
- Dashboard: MKT headlines after the X read and today's per-ticker NEWS on the scroll; Finviz row in the detail sheet — float, short float / days to cover, last or next earnings (next highlighted), TTM income with a net loss flagged for Breakout-to-Fade, Finviz Daily Digest, today's headlines.
- Selftest 20 assertions; headless render against a fixture built from live Finviz exports.
- `birdseye-tv.bat` now starts receiver + sentiment feed + Finviz feed and opens v1.18. v1.16/v1.17 left on disk as fallbacks.

## Open

- **Finviz Elite trial — decide before it bills · OPEN · P1.** Check the trial end date in the Finviz account and set a reminder a couple of days before. Annual is $299.50 (≈$25/mo) vs $39.50 monthly; refunds only on written request within 30 days. Keep if the export holds up for a week.
- **Retire Alpha Vantage float/earnings in favour of Finviz · OPEN.** `finviz.json` now carries float, shares out, short float and earnings date for every shortlist name. `float_cache.json` and `catalyst_build.py`'s earnings calendar can move to it; AV news can drop to fallback. Keep AV/FMP on free tiers.
- **First live run of both feeds from the PC · OPEN.** Neither script has run with the real key / from the PC's IP yet. Check `python finviz_feed.py --once` and `python sentiment_feed.py --once` if a window shows an error.
- **Tone keywords · OPEN, tune on evidence.** Flag any headline tagged the wrong way; adjust BULL/BEAR in `finviz_feed.py`.
- **Finviz screens for the scroll · IDEA.** Unusual volume / new highs / gap screens as a "movers outside the shortlist" feed.
- **Google Trends · DECIDED NO for intraday.** Possible weekly theme check for the TRUST brief only.
