Pulse V2 — Product Spec (Google Finance-style)
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 touchserver/. - Ace (backend):
server/api/(indices extension, quotes, stock detail, caching), data plumbing, build + deploy + verify. Do NOT touchpages//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)
Pulse Website — Product Spec
Version: 1.0 · Owner: Min · Status: Approved by Young (2026-08-05) Delegated: Nova = frontend design & build · Ace = backend build & deploy Reference build: /home/ubuntu/pulse-site (Min's MVP — live, verified, to be upgraded)
Pulse Account-Holder Features — API & Schema Spec
Author: Sol · Status: v0.95 — UI contracts LOCKED · Date: 2026-08-23 · Rev 2026-08-26: tier-economics annex (§9) folded in — source: Mira memo (task-6e24bf67 / rep-ca09da0e); supersedes draft pricing rep-5781dcdd. Pending Sol final sign-off. Consumers: Nova (UI/component specs), Ace (backend implementation) Design system: Pulse neon-green #39FF14 hard-edge, Nuxt 3 (pulse-tv-home-design.md) Precedent: Account gate pattern from pulse-split-sol-review.md (HMAC + localStorage approved for test phase)

