From b7588b58fef3c286f27684cd63da3c4582d56a83 Mon Sep 17 00:00:00 2001 From: Anthony Ettinger Date: Wed, 17 Jun 2026 18:15:49 +0000 Subject: [PATCH] feat(finance): tiny last-week sparklines on watchlist (Datatype font) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ports the b1dz.com font-ligature sparkline: the Datatype variable font renders '{l:v1,v2,...}' (0-100) as an inline chart glyph — no chart lib, just a font. - src/app/fonts/Datatype.woff2 + datatype-font.ts (next/font/local) - Sparkline component (green up / red down via last-vs-first) - GET /api/finance/sparklines?symbols=... batch endpoint: last-week (5D) closes per symbol, downsampled to 24 points, per-profile provider + Yahoo fallback, cached - Hub watchlist cards render a sparkline per symbol (one batched fetch) Co-Authored-By: Claude Opus 4.8 --- src/app/api/finance/sparklines/route.ts | 66 ++++++++++++++++++++++++ src/app/finance/finance-hub.tsx | 26 +++++++++- src/app/fonts/Datatype.woff2 | Bin 0 -> 81904 bytes src/components/finance/sparkline.tsx | 44 ++++++++++++++++ src/lib/datatype-font.ts | 15 ++++++ 5 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 src/app/api/finance/sparklines/route.ts create mode 100644 src/app/fonts/Datatype.woff2 create mode 100644 src/components/finance/sparkline.tsx create mode 100644 src/lib/datatype-font.ts diff --git a/src/app/api/finance/sparklines/route.ts b/src/app/api/finance/sparklines/route.ts new file mode 100644 index 0000000..5fb1a01 --- /dev/null +++ b/src/app/api/finance/sparklines/route.ts @@ -0,0 +1,66 @@ +/** + * GET /api/finance/sparklines?symbols=NVDA,AAPL,… + * + * Returns last-week close samples per symbol for the tiny watchlist sparklines. + * Paid-gated; uses the per-profile market-data provider (connected Alpaca → + * Yahoo fallback) and read-through caches each symbol's samples. + */ + +import { NextRequest, NextResponse } from 'next/server'; +import { requireActiveSubscription } from '@/lib/subscription/guard'; +import { getActiveProfileId } from '@/lib/profiles/profile-utils'; +import { getFallbackMarketDataProvider, type MarketDataProvider } from '@/lib/finance/market-data'; +import { getMarketDataProviderForProfile } from '@/lib/finance/market-data/for-profile'; +import { readThrough, CANDLES_TTL_SECONDS } from '@/lib/finance/market-data/cache'; +import { parseSymbolList } from '@/lib/finance/watchlist'; + +export const dynamic = 'force-dynamic'; + +const MAX_SYMBOLS = 60; +const MAX_POINTS = 24; + +/** Downsample an array to at most `max` evenly-spaced points (keeps last). */ +function downsample(values: number[], max: number): number[] { + if (values.length <= max) return values; + const step = values.length / max; + const out: number[] = []; + for (let i = 0; i < max; i++) out.push(values[Math.min(values.length - 1, Math.floor(i * step))]); + out[out.length - 1] = values[values.length - 1]; + return out; +} + +async function samplesFor(provider: MarketDataProvider, symbol: string): Promise { + return readThrough(symbol, `sparkline:${provider.id}`, CANDLES_TTL_SECONDS, async () => { + const candles = await provider.getCandles(symbol, '5D'); + return downsample(candles.map((c) => c.close), MAX_POINTS); + }); +} + +export async function GET(request: NextRequest): Promise { + const gate = await requireActiveSubscription(request); + if (gate) return gate; + + const { valid } = parseSymbolList(request.nextUrl.searchParams.get('symbols') ?? ''); + if (valid.length === 0) return NextResponse.json({ samples: {} }); + + const profileId = await getActiveProfileId(); + const provider = await getMarketDataProviderForProfile(profileId); + const fallback = getFallbackMarketDataProvider(); + + const symbols = valid.slice(0, MAX_SYMBOLS); + const entries = await Promise.all( + symbols.map(async (symbol): Promise<[string, number[]]> => { + try { + return [symbol, await samplesFor(provider, symbol)]; + } catch { + try { + return [symbol, await samplesFor(fallback, symbol)]; + } catch { + return [symbol, []]; + } + } + }), + ); + + return NextResponse.json({ samples: Object.fromEntries(entries) }); +} diff --git a/src/app/finance/finance-hub.tsx b/src/app/finance/finance-hub.tsx index 2539164..1cd045b 100644 --- a/src/app/finance/finance-hub.tsx +++ b/src/app/finance/finance-hub.tsx @@ -9,6 +9,7 @@ import { useRouter } from 'next/navigation'; import Link from 'next/link'; import { normalizeSymbol } from '@/lib/finance/market-data/stooq'; import { BrokerConnect } from './broker-connect'; +import { Sparkline } from '@/components/finance/sparkline'; const RECENT_KEY = 'finance:recent'; @@ -26,6 +27,7 @@ export function FinanceHub(): React.ReactElement { const [bulk, setBulk] = useState(''); const [bulkBusy, setBulkBusy] = useState(false); const [bulkMsg, setBulkMsg] = useState(null); + const [sparklines, setSparklines] = useState>({}); useEffect(() => { try { @@ -47,6 +49,25 @@ export function FinanceHub(): React.ReactElement { loadWatchlist(); }, [loadWatchlist]); + // Fetch last-week sparkline samples for the watchlist symbols (one batch call). + const watchlistKey = watchlist.map((w) => w.symbol).join(','); + useEffect(() => { + if (!watchlistKey) { + setSparklines({}); + return; + } + let cancelled = false; + fetch(`/api/finance/sparklines?symbols=${encodeURIComponent(watchlistKey)}`, { cache: 'no-store' }) + .then((res) => (res.ok ? res.json() : { samples: {} })) + .then((body: { samples?: Record }) => { + if (!cancelled) setSparklines(body.samples ?? {}); + }) + .catch(() => undefined); + return () => { + cancelled = true; + }; + }, [watchlistKey]); + const addBulk = useCallback( async (e: React.FormEvent) => { e.preventDefault(); @@ -164,7 +185,10 @@ export function FinanceHub(): React.ReactElement {
{watchlist.map((row) => ( -
{row.symbol}
+
+
{row.symbol}
+ +
{row.exchange ?
{row.exchange}
: null} ))} diff --git a/src/app/fonts/Datatype.woff2 b/src/app/fonts/Datatype.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e6d98ad203558010dcc76f7c4455b36366a9393d GIT binary patch literal 81904 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 literal 0 HcmV?d00001 diff --git a/src/components/finance/sparkline.tsx b/src/components/finance/sparkline.tsx new file mode 100644 index 0000000..c880d09 --- /dev/null +++ b/src/components/finance/sparkline.tsx @@ -0,0 +1,44 @@ +import { datatypeFont } from '@/lib/datatype-font'; + +/** + * Inline price sparkline rendered via the Datatype variable font (ported from + * b1dz.com). Syntax: `{l:v1,v2,…}` where each v is 0–100; the font's ligatures + * substitute that text with a chart glyph. Color reflects last-vs-first + * direction (green up / red down). + */ +export function Sparkline({ + samples, + width = 60, +}: { + samples?: number[]; + width?: number; +}): React.ReactElement { + if (!samples || samples.length < 2) { + return ; + } + + const min = Math.min(...samples); + const max = Math.max(...samples); + const range = max - min; + const normalized = + range === 0 ? samples.map(() => 50) : samples.map((v) => Math.round(((v - min) / range) * 100)); + + const isUp = samples[samples.length - 1] >= samples[0]; + const colorClass = isUp ? 'text-green-400' : 'text-red-400'; + + return ( + + {`{l:${normalized.join(',')}}`} + + ); +} diff --git a/src/lib/datatype-font.ts b/src/lib/datatype-font.ts new file mode 100644 index 0000000..40a0729 --- /dev/null +++ b/src/lib/datatype-font.ts @@ -0,0 +1,15 @@ +import localFont from 'next/font/local'; + +/** + * Datatype variable font — OpenType ligatures render the literal text + * `{l:v1,v2,…}` (each v 0–100) as an inline sparkline glyph at draw time. + * Loaded once at module scope so it's preloaded and shares one hash. + * (Ported from b1dz.com.) + */ +export const datatypeFont = localFont({ + src: '../app/fonts/Datatype.woff2', + display: 'swap', + weight: '100 900', + preload: true, + variable: '--font-datatype', +});