Repository navigation
Sprint 4 frontend - #6
Merged
Merged
Conversation
Establish the frontend design system for the regulatory terminal: Ink/Slate/Parchment/Seal/Glacier palette, Spectral serif + IBM Plex Mono, a persistent jurisdiction rail (EU-blue to CH-amber) and the disclaimer footer on every page. Visible keyboard focus states and reduced-motion handling throughout. Landing page routes into the four terminal sections. Correct the CLAUDE.md frontend stack line to match reality (Next.js 16 / React 19 / Tailwind v4).
The unlock_events table and UnlockEvent model existed (Sprint 1) and the daily brief already reads them, but no read endpoint exposed upcoming unlocks. Add GET /market/unlocks (next N days, joined to watchlist symbol/name) so the dashboard unlock calendar renders real curated data instead of a stub.
Server-side Argus API client (src/lib/api.ts) reading ARGUS_API_URL and ARGUS_API_TOKEN — token stays server-only, never shipped to the browser. TS types mirror the Pydantic schemas (src/lib/types.ts); shared display formatters for USD, percentages and dates. Document both env vars in frontend/.env.example.
Server-rendered dashboard on the real API: watchlist ledger with hand-rolled SVG sparklines and inline anomaly badges, DeFi TVL panel, BTC on-chain tiles, and the 7-day unlock calendar. Resilient loading (per-asset fetches use allSettled; watchlist doubles as the API reachability probe with an honest unreachable banner) plus a skeleton loading state.
Client chat over /research/ask via a server-side route-handler proxy that keeps the bearer token off the browser. Citation seals render each source as a numbered chip with document, article/section ref and EU/CH jurisdiction glyph, linking to the real EUR-Lex / FINMA URL. Honest 'outside corpus confidence' state when the API declines to answer. The answer reveal is a client-side typewriter over the complete returned answer (not token streaming) and collapses to instant under prefers-reduced-motion.
Chronological dispatch list (GET /briefs) linking to a memo-style
detail reader (GET /briefs/{date}) that renders body_markdown via a
small dependency-free markdown renderer. Honest unreachable/empty
states; 404 for a missing date. Brief-date route param uses the
backend's YYYY-MM-DD date format.
Server-rendered anomaly register over GET /anomalies with filter chips that drive URL search params (shareable, no client fetch): kind (all/zscore/depeg) and window (24h/7d/30d/90d). Depeg vs z-score severity colour-coding, honest empty and unreachable states.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.