phase-10.5: market screener ui enhancements
This commit is contained in:
@@ -882,3 +882,69 @@ A: Not yet. Only consider if:
|
||||
- You have $20K+ to spend on GPU infrastructure
|
||||
|
||||
For now, optimize prompts instead. Good prompt beats fine-tuned model.
|
||||
|
||||
---
|
||||
|
||||
## Future Enhancements (Unscheduled)
|
||||
|
||||
### FE-1 — Pinned Stocks Watchlist
|
||||
|
||||
**Concept:** User can pin any stock from the screener table. Pinned stocks appear in a persistent sidebar or dedicated panel showing:
|
||||
|
||||
- Minimal summary: ticker, current price, signal badge, score
|
||||
- Price-since-pin sparkline — a small inline chart showing how price moved from the day the stock was pinned to today
|
||||
- Quick unpin button
|
||||
|
||||
**Data requirements:**
|
||||
- Store `{ ticker, pinnedAt, pinnedPrice }` in SQLite (`pinned_stocks` table)
|
||||
- Fetch daily OHLC history from Yahoo Finance for the period `pinnedAt → now` to power the sparkline
|
||||
- API: `GET /api/pins` (list), `POST /api/pins` (add), `DELETE /api/pins/:ticker` (remove), `GET /api/pins/:ticker/history` (OHLC since pin)
|
||||
|
||||
**UI notes:**
|
||||
- Pin button (📌) appears on hover of each summary row in the screener table
|
||||
- Pinned panel can live in a collapsible drawer at the bottom, or a fixed right sidebar
|
||||
- Sparkline: use a lightweight SVG path (no charting library needed); green if price above pin price, red if below
|
||||
- On click of the sparkline, open a larger chart modal (Phase FE-1b — can use TradingView widget or Chart.js)
|
||||
|
||||
**Why deferred:** Requires persistent per-user state (needs Phase 11 auth to be meaningful across sessions). Build after Phase 11.
|
||||
|
||||
---
|
||||
|
||||
### FE-2 — Column Header Tooltips ("Why does this matter?")
|
||||
|
||||
**Concept:** Clicking a column header in the screener summary row opens a small popover explaining:
|
||||
- What the metric measures
|
||||
- What a good vs bad value looks like
|
||||
- How the screener uses it in scoring
|
||||
|
||||
This turns the table into a learning tool — users understand *why* P/E or ROE matters, not just what the number is.
|
||||
|
||||
**Suggested content per column:**
|
||||
|
||||
| Header | What to explain |
|
||||
|--------|----------------|
|
||||
| **Score** | Weighted sum of all factor scores. >6 = quality, <4 = weak. Gates must pass first — score only fires if gates are cleared. |
|
||||
| **Signal** | Compares two scoring lenses (Mkt-Adjusted vs Graham). Strong Buy = passes both. Momentum = passes inflated only. |
|
||||
| **P/E** | Price-to-earnings. Lower = cheaper relative to earnings. Gate: <15x (Graham) or <SPY×1.5 (market-adjusted). >30x warrants scrutiny unless high growth. |
|
||||
| **PEG** | P/E ÷ growth rate. Normalises valuation for growth. <1.0 = paying less than growth justifies. Lynch's standard. |
|
||||
| **ROE%** | Return on equity — how efficiently the company uses shareholder money. >15% is healthy; >30% is exceptional. Weighted 3× in scoring. |
|
||||
| **OpMgn%** | Operating margin — profit per dollar of revenue before interest and tax. Measures business efficiency. |
|
||||
| **FCF%** | Free cash flow yield — cash the business actually generates relative to price. Negative = cash-burning; gate fails. |
|
||||
| **D/E** | Debt-to-equity. Measures leverage. Gate: <1.5× (general), <2.0× (tech). Higher than 2× raises distress risk. |
|
||||
| **52W Chg** | Total price return over last 52 weeks. Positive momentum is healthy; >+50% may signal overextension. |
|
||||
| **From High** | % below the 52-week high. -5% to -15% is a typical dip zone; ≤-30% triggers a risk flag. |
|
||||
| **Analyst** | Yahoo consensus (1=Strong Buy, 5=Strong Sell). Requires ≥3 analysts to fire. ≤2.0 adds points; >4.0 subtracts. |
|
||||
| **DCF Safety** | Margin of safety from a two-stage DCF model. Positive = stock appears undervalued vs intrinsic value. Only fires when FCF > 0. |
|
||||
| **Cap** | Market cap tier: Mega (>$200B), Large ($10B+), Mid ($2B+), Small ($300M+), Micro (<$300M). Smaller = higher risk + volatility. |
|
||||
| **Style** | Growth classification from revenue + earnings growth rate. High Growth = ≥15% revenue growth. Value = low growth + ≥3% yield. |
|
||||
|
||||
**Implementation approach:**
|
||||
- Add `data-tip` attribute to each `<th>` in `AssetTable.svelte`
|
||||
- On click, show a positioned `<div class="col-tip">` anchored to the header
|
||||
- Dismiss on outside click or Escape
|
||||
- No library needed — pure Svelte `$state` + CSS positioning
|
||||
- Mobile: tip opens as a bottom sheet modal
|
||||
|
||||
**Why not `title` attribute?** `title` tooltips are unstyled, non-interactive, and don't work on touch. A custom popover lets you format the content properly and include a "Good range" callout.
|
||||
|
||||
**Why deferred:** Nice-to-have educational feature. Build after the core screener UI (Phase 10.5) is stable.
|
||||
|
||||
Reference in New Issue
Block a user