Young's Mind
Product Spec

Pulse V2 — Product Spec (Google Finance-style)

Version: 2.0 · Owner: Min · Status: Approved by Young (2026-08-06) Delegated: Nova = frontend design & build · Ace = backend build & deploy Baseline: V1 live at https://pulse.youngle.au (/home/ubuntu/pulse-site) — upgrade, don't break. V1 spec: PULSE-SPEC.md.

Pulse V2 — Product Spec (Google Finance-style)

Version: 2.0 · Owner: Min · Status: Approved by Young (2026-08-06) Delegated: Nova = frontend design & build · Ace = backend build & deploy Baseline: V1 live at https://pulse.youngle.au (/home/ubuntu/pulse-site) — upgrade, don't break. V1 spec: PULSE-SPEC.md.


1. Vision

Pulse V2 is Young's personal Google Finance — one glance gives market state, his watchlist, and news; one click gives any ticker's full picture (chart + stats + news + signals). Same dark mint design system, same stack (Nuxt 4 + Nitro + Vercel AI SDK + Tailwind v4), same deploy (systemd pulse-site :8092 + nginx).

2. Layout map (Google Finance anatomy → Pulse)

┌──────────────────────────────────────────────────────────────────┐
│ HEADER: 🧠 Pulse | Search ⌕ (ticker) | Dashboard News Ask AI      │
├──────────────────────────────────────────────────────────────────┤
│ INDEX STRIP (horizontal, live): ASX200 · ASX100 · ASX50 · AllOrds │
│   · S&P500 · Dow · Nasdaq · VIX  (price + ▲/▼ colour)            │
├───────────────────────────────┬──────────────────────────────────┤
│ MAIN COLUMN                    │ RIGHT RAIL                       │
│  • Top Market News (headlines) │  • Watchlist (live prices + chg) │
│    source badge + time         │    WEB DRO SEMI + portfolio      │
│  • Movers (from my universe)   │  • Markets (regional index cards)│
│    biggest + / − %             │    AU · US · EU · Asia           │
│  • Daily Brief card (link)     │  • MA50 Alerts (existing)        │
└───────────────────────────────┴──────────────────────────────────┘

Ticker page /stock/[ticker] (Google Finance stock view):

  • Price + change (big) · sparkline · Interactive TradingView chart (existing component, MA50+volume) · timeframe chips
  • Key stats grid: open, high, low, prev close, 52w range, avg volume, market cap, P/E, dividend yield (from Yahoo quoteSummary)
  • MA50 status (D+W from the signal engine) · distance to watchlist levels (WEB entry $2.85–3.00 etc.)
  • Ticker news: Google News site-scoped to the symbol
  • Breadcrumb back to dashboard

New pages: / (dashboard, redesigned) · /news (keep) · /chat (keep) · /stock/[ticker] · /heatmap (universe grid, Finviz-style colour by daily %)

3. API contract (server routes — Ace)

Extend /api/indices → all strip indices

[{ key, name, symbol, price, change, changePct, currency }] — ASX 200/100/50 + All Ords (^AORD) + S&P 500 (^GSPC), Dow (^DJI), Nasdaq (^IXIC), VIX (^VIX). Yahoo chart API, cached 300s.

New /api/quotes → universe quotes

[{ ticker, price, changePct, change }] for the 25-ticker universe (SYM.AX), Yahoo, cached 300s. Drives watchlist rail + movers + heatmap.

New /api/stock/[ticker]

{ "ticker", "price", "change", "changePct", "stats": { "open", "high", "low", "prevClose", "52wHigh", "52wLow", "volume", "marketCap", "pe", "yield" },
  "ma50": { "daily": {...}, "weekly": {...} }, "news": [ {source,title,link,pubDate} ] }

Yahoo quoteSummary?modules=price,summaryDetail + Google News site-scoped. Cached 600s.

Reuse: /api/brief, /api/news, /api/chat, /api/ma50-alerts, /api/charts (unchanged).

4. Design tokens (unchanged from V1)

Dark #09090b surface, --color-card/--color-edge borders, mint #16A34A accents, Inter, glass cards, shimmer loading. Google-Finance feel via: compact index strip, dense stat grids, clear up/down colour (green #22c55e up, red #ef4444 down — note: US convention is the opposite; keep AU convention (green=up) since Young trades ASX).

5. Ownership split

  • Nova (frontend): pages/ (dashboard redesign, /stock/[ticker], /heatmap), components/ (IndexStrip, WatchlistRail, MarketsCard, MoversCard, StockStats, TickerNews, SearchBox), assets/, app.vue, header search. Do NOT touch server/.
  • Ace (backend): server/api/ (indices extension, quotes, stock detail, caching), data plumbing, build + deploy + verify. Do NOT touch pages//components/ unless fixing integration.

6. Acceptance criteria

  • Index strip: 8 live indices, colour-coded, horizontal scroll on mobile
  • Watchlist rail: 5+ tickers with live price + change (matches brief prices ±)
  • Movers: top 3 gainers/losers from universe
  • /stock/SEMI: price, chart (MA50+vol), stats grid, 52w range, MA50 status, ticker news — all 200
  • Search box navigates to /stock/<ticker> for universe tickers
  • Heatmap: 25 cells, colour by daily %, click → stock page
  • Dashboard + news + chat still work; all endpoints 200; build clean; service active

7. Deploy (unchanged from V1)

cd /home/ubuntu/pulse-site
ZEN_KEY=$(python3 -c "import json;print(json.load(open('/home/ubuntu/.solos/config/credential_pools.json'))['opencode-zen']['keys'][0]['key'])")
ZEN_API_KEY="$ZEN_KEY" npx nuxi build
sudo systemctl restart pulse-site   # unit + nginx unchanged

8. Non-goals (V2)

  • No real-time streaming quotes (Yahoo 5-min delayed is fine)
  • No portfolio P&L math yet (V3 with cost data from vault)
  • No auth UI (nginx basic auth)
Copyright © 2026