# Augor — Watchlist MVP ## Goal Replace the current bulk-feed home screen with a stock-watchlist-centric UX. Users add stocks they care about; the app fetches relevant news, runs LLM analysis, and surfaces per-stock growth signals with a confidence score. ## Scope (in) - Watchlist: add/remove stock tickers (e.g. AAPL, TSLA) - Home screen: grid of stock cards showing ticker, last signal (growth/decline/neutral), probability, and a sparkline placeholder - Stock dashboard: full signal list for that stock, rationale text, source articles - Per-stock pipeline: filter aggregated feed by ticker relevance, run clustering + signal generation scoped to that ticker - Settings: API key, feed list (unchanged), watchlist persisted via SharedPreferences ## Scope (out — do later) - Real-time or live price data - Actual candlestick/OHLC charts (use placeholder or flat line for now) - Backtesting - Push notifications - Backend / cloud processing ## Data Model ```dart class WatchedStock { final String ticker; // e.g. "AAPL" final String companyName; // e.g. "Apple Inc." EventSignal? latestSignal; List signalHistory; } ``` `WatchedStock` is persisted as JSON in SharedPreferences under key `watched_stocks`. ## State Add a `WatchlistProvider` (ChangeNotifier): - `List stocks` - `addStock(ticker, companyName)` - `removeStock(ticker)` - `updateSignals(ticker, List)` - `save()` / `load()` ## Routing (go_router) | Path | Page | |---|---| | `/` | Home — stock card grid | | `/stock/:ticker` | Stock dashboard | | `/settings` | Settings (existing) | | `/watchlist/add` | Add stock dialog or page | ## Home Screen - `GridView` of `StockCard` widgets, one per watched stock - Each card: ticker symbol (large), company name, signal badge (colored chip), probability percentage, placeholder mini-chart area - Floating action button or top-right icon to add a stock - Empty state: prompt to add a stock ## Stock Dashboard - Header: ticker + company name - "Run Analysis" button — triggers the per-stock pipeline - Status/progress text - Placeholder chart (Container with grey background for now) - Scrollable list of `EventSignalCard` widgets (reuse existing widget) - Each card shows summary, signal, probability, confidence, rationale, source count ## Per-Stock Pipeline Scoped version of the existing pipeline: 1. Fetch all enabled feeds (same as now) 2. Filter `FeedItem` list to items relevant to the ticker — use company name + ticker as keywords alongside existing keyword list 3. Generate embeddings on filtered items only 4. Group by event (existing clustering) 5. Generate signals (existing `SignalGenerator`) 6. Store results in `WatchlistProvider.updateSignals(ticker, signals)` The simplest first pass: add ticker + company name into the relevance keyword check. No separate embedding per ticker yet — just string matching on title/description. ## Build Order 1. `WatchedStock` model + `WatchlistProvider` 2. Persist watchlist in SharedPreferences 3. New home screen with `StockCard` grid and add-stock flow 4. `go_router` routes updated 5. Stock dashboard page (static layout first) 6. Wire per-stock pipeline to dashboard "Run Analysis" button 7. Verbose progress logging (status string passed down to UI) 8. Placeholder chart widget ## Definition of Done - User can add AAPL and TSLA to watchlist - Home screen shows both cards - Tapping a card opens its dashboard - Tapping "Run Analysis" runs the pipeline and populates signal cards - At least one signal card renders with summary + probability - No crashes on empty watchlist or missing API key