Pulse Split — Sol Architect Review
Pulse Split — Sol Architect Review
The Good
- ✅
publish-briefs.pyis the single writer — no other path writes to Pulse data - ✅
server/api/brief.tsreads only frompulse-site/data/— zero vault paths - ✅
server/api/stock/[ticker].tsfetches Yahoo Finance only — clean - ✅ Chat context builds from
PUBLIC_BRIEFSonly — no vault, no private data - ✅ Account gate correctly differentiates public vs private brief serving
Leak Vectors
🔴 CRITICAL: /api/charts serves from vault (line 4)
const CHARTS = resolve('/home/ubuntu/workspace/min/obsidian-vault/Daily Briefings/charts')
This resolves and serves image files directly from the vault. Charts contain portfolio visualisations, holdings, trade signals. No auth gate. Any visitor can enumerate chart files. Fix: publish charts to data/charts/ alongside briefs.
🟡 MODERATE: chat.ts references ~/.solos/personas/min.md
Not a vault leak, but breaks the standalone project boundary. Copy persona text into Pulse's own config or bake into the chat handler.
🟡 MODERATE: Sanitization edges
publish-briefs.py strips capital figures (keyword-anchored $ regex) and portfolio/watchlist/charts sections. Worth adding a pass for any line containing $X,XXX+ regardless of keywords — portfolio data sometimes appears outside named sections.
Account Gate Assessment
HMAC + localStorage is fine for test phase. Threat model: public random visitors should not see private data. A Bearer token in localStorage prevents casual scraping. Upgrade considerations:
- Switch to HttpOnly cookie (requires backend-proxied auth, not Nuxt SPA-only)
- Rate-limit
/api/loginto prevent brute-force
Eve Structure Mirror
| Aspect | Eve | Pulse |
|---|---|---|
| Project root | ~/.eve/ | ~/pulse-site/ ✅ |
| No vault paths | ✅ | 🔴 charts.ts breach |
| Self-contained data | ✅ | ✅ data/briefs/ |
| Auth model | N/A (public) | HMAC Bearer |
| Publisher | N/A (static) | publish-briefs.py |
Pulse is simpler — Nuxt SPA + API + HMAC gate. The only structural gap is the charts leak.
Priority Order for Public Launch
- IMMEDIATE (SHIP-BLOCKER): Fix
charts.ts— copy chart images todata/charts/inpublish-briefs.py, serve from there, remove vault path - SHIP WITH: Account gate as-is (HMAC + localStorage)
- SCHEDULE NEXT: Inline/relocate
~/.solospersona reference inchat.ts - DEFER: HttpOnly cookie upgrade, rate-limiting, improved sanitization (belt-and-braces only)
Pulse Site — Mobile-First Responsive Redesign Plan
Owner: Nova (Design & Creative) Stack: Nuxt 3 (v4.4.8) · Vue 3 · Tailwind CSS v4 · @tailwindcss/viteSite root: ~/pulse-site (Nuxt dev on :3000) Scope: All primary pages — Dashboard (/), Market Watch (/watch), Watchlist, Research (/research, /research/[slug]), Podcast, Chat (/chat), Account, Stock detail (/stock/[ticker], /quote/[ticker]), News, Heatmap.
Pulse — TradingView-Style Home Page Design
Target: pulse.youngle.au home pageReference: tradingview.com/markets/australiaCurrent: Nuxt 3 app (dark charcoal, rounded cards, brand-teal accent)Deliverable: Section-by-section layout spec for Min to fold into v1 → v2

