INSTITUTIONAL CONCEPT · FRED DATA

Macro Signal
Federal Reserve Data as Product Surface

Macro context sits beneath every institutional product decision — credit tiers, AML thresholds, margin calls, advisor copy — but it almost never appears in the UI. This concept takes four Federal Reserve series (UNRATE · CPI · 10Y Treasury · VIX) and reshapes them from chart-library demo into the information object a senior PM, risk lead, or portfolio manager actually reads: latest value, YoY delta, 5-year percentile, regime band. One line of product intent per series. No forecasting theater.

Institutional Context: The raw feed is public (fred.stlouisfed.org, via the fredapi Python client). What's hard is not fetching it — what's hard is presenting it so that a reader decides in three seconds whether it changes a product default. The surface here is the same class of decision Bloomberg and Two Sigma terminals make every time they choose which field sits in the left rail, which one gets the colored glyph, and which one is relegated to the drill-down pane. Designed as a concept deliverable with production-grade data.
Thesis · why this is a design problem, not a data problem

A macro series is not a line. It's a product default waiting to be set.

When unemployment moves 0.6 points in a quarter, a consumer credit app should be quietly retiering its default risk thresholds — not waiting for a quarterly model refresh. When CPI prints above 3% YoY, the advisory copy in a wealth platform needs to stop saying "with inflation near target." When VIX closes below 15, margin-call calibration can ease; when it prints above 30, it must tighten. The reason these adjustments happen slowly today is not that the data is unavailable — it's that the data is not designed as a product input. This concept fixes that.

Federal Reserve Economic Data (FRED) · St. Louis Fed
Loading…
Loading…
Loading…
Loading…
Loading…

1. Why these four series

FRED publishes over 800,000 time series. The selection problem is itself the first design decision. Four series earn their panel because each maps cleanly to a product default a mid-sized fintech already sets — and gets wrong by default because the context isn't surfaced.

Consumer credit

UNRATE — unemployment rate

Drives default risk tier thresholds in consumer credit products. When unemployment rises above regional norms, tier cut-offs should tighten and onboarding copy should acknowledge the macro environment.

Input to: KYC tier default · income-verification copy
AML · advisory

CPIAUCSL — consumer price index

Anchors inflation-adjusted thresholds in AML monitoring and the baseline assumption in every piece of advisor copy that says "with inflation near target." The 2% target is an editorial default; CPI YoY is the observed truth.

Input to: AML notional threshold · advisory copy guardrail
Fixed income

DGS10 — 10-year treasury yield

The benchmark rail for every fixed-income advisor UI. Portfolio valuation deltas, discount-rate assumptions, and rate-sensitive product card copy all inherit from this single number.

Input to: Portfolio valuation benchmark · advisor dashboard banner
Risk · margin

VIXCLS — CBOE volatility index

Position-sizing defaults, margin-call stress calibration, and "market stress" dashboard pills all respond to VIX regime. Volatility is the single most under-represented signal in consumer investing UIs.

Input to: Position-sizing default · margin-call threshold · UI stress pill
Not included

Why no GDP, no PMI, no M2

Each of the above is an interesting research series. None of them changes a product default in the next 24 hours. The bar for inclusion is: does this number alter a decision a product team would make this week? These four pass. Others fail.

Rule: cadence ≤ monthly · reader action ≤ this week
Not shown

Why no forecast cone

Forecasting is a different product than sensing. Cones imply probabilistic claims this surface does not make. The Kronos-inspired prediction cone lives in the AI trading demo, not here. Macro Signal reports; it does not predict.

Discipline: observed only · five-year history

2. The information object

Every panel carries the same four-line information object — and in exactly that rank order, because that's the order a risk or product lead actually reads:

01

Latest value — anchor the reader

The current print, in its native unit, tabular-numerals. No compression, no abbreviation. 4.3% reads; 4.30% reads; "4.3% unemployment" does not — the label is already carrying that work.

02

YoY delta — direction + magnitude in one glyph

Percentage-point deltas for rates (UNRATE, DGS10). Percent-change for indices (CPI, VIX). The distinction is not pedantic — a 0.1 point rise in unemployment is a different statement than a 0.1% rise in an index, and the colour coding inverts: for UNRATE and VIX, up is red; for CPI, deviation from 2% is red. Designed so a red glyph always means the same thing to the reader: default may need to tighten.

03

5-year percentile — the honest historical anchor

"4.3% unemployment" reads differently at the 67th percentile than at the 15th. The percentile is the single field that most consumer dashboards omit, and it's the field that converts an isolated number into a product decision. Tone-mapped: 0–35 good (green), 35–65 neutral, 65–85 elevated (amber), 85+ alert (red).

04

Regime band — one word of product language

Full employment · Expansion · Slowdown · Recessionary. Calm · Normal · Anxious · Panic. These are not technical bands — they are the language a product copywriter or a compliance officer can use downstream without translation. The current band is highlighted in its tone colour; the others stay dim as reference vocabulary.

3. What is deliberately absent

No intraday animation on the price

The line enters once on mount. It never ticks, pulses, or breathes. Animation on financial data introduces perceived latency — professionals notice, and they stop trusting the surface. Provenance dot is the single live element on the panel.

No crosshair label on hover

The chart is a shape, not a table. If the reader needs a specific value, the KPI row above carries it. A crosshair with a tooltip duplicates the work and doubles the read time.

No comparison mode, no overlay, no second axis

Two series on one axis is a research tool, not a product surface. The panel is the unit. If a PM needs to see CPI and DGS10 together, they open two panels — which is exactly what this grid already gives them.

No model confidence, no AI label

The data is 100% Federal Reserve. There is no model, so there is nothing to label. Adding a "powered by AI" badge to a surface that reports BLS prints would be a form of trust laundering.

4. Data pipeline — why the JSON is static

FRED's fredgraph.csv endpoint returns a valid CSV but does not include a CORS header, which blocks browser-side fetch. Three options were on the table:

  1. Public proxy. Routes through a free-tier relay. Latency 300–1200 ms, reliability ~95%. Rejected — the surface is a product demo and unreliable latency undermines the thesis.
  2. Server-side pre-fetch. A small worker fetches nightly, caches JSON, serves from same origin. Chosen direction for production — sketched as .github/workflows/fred-refresh.yml in the repo plan.
  3. Build-time pre-fetch → static JSON. What's shipped here. 74 rows for monthly series, ~1,600 for daily. Committed to data/fred/macro.json. Zero runtime dependency. The honest trade is freshness: the dashboard shows the data as of build time, not live.

Option 3 is the right call for a concept deliverable because it lets the design conversation be about the information object, not the infrastructure. The same module (js/modules/macro-signal.js) works against any same-origin macro.json — swap the build-time file for a nightly-refreshed one and the UI layer doesn't change.

5. Where it plugs in

Macro Signal is designed as a component, not a page. In the portfolio's own product set, it has three obvious homes:

  • ACY Securities trader dashboard → top-rail VIX panel replacing the current "market stress" pill, with the regime word as the primary glyph.
  • Xanthos advisor UI → DGS10 + CPI pair as the permanent context header on portfolio valuation screens. The advisor stops having to say "with rates around 4%" because the rail already carries it.
  • TradeX institutional terminal → UNRATE + VIX as the left rail's macro stripe, feeding the position-sizing default that the terminal already computes.

6. Craft notes

  • Zero inline styles. Every value token-driven (--accent, --space-*, --text-*).
  • Chart library: TradingView Lightweight Charts v4.2. Price scale locked, pan/zoom disabled — the panel is a signal, not a workspace.
  • Colour-blind-safe: every directional cue pairs colour with a word (Slowdown · Anxious · Elevated). Never colour alone.
  • prefers-reduced-motion honoured — no entrance stagger, no crosshair magnet.
  • WCAG AA on all body text contrast ratios. Tabular numerals throughout the KPI row for alignment.
DATA PROVENANCE

All series sourced from the Federal Reserve Bank of St. Louis (FRED) public API. Fetched via the fredapi Python client at build time and committed as a single JSON artifact. No intraday polling, no live credentials in the browser, no quota exposure. Ed's Python pipeline handles the fetching, schema normalization, and JSON shaping — the page reads a static artifact.

07 · Threshold playground

Drag a slider. Feel a product default change.

Four routing rules, rebuilt as a sandbox. Move the slider for each series to simulate next month's print — the regime chip, the routing destination, and the downstream product surface all re-evaluate live. This is what the panel does in production when FRED publishes a revision. The sliders aren't cosmetic — they expose the logic that makes the panel a product input rather than a chart library demo.

UNRATE percent · monthly
4.3 %
Full employment

Within the FOMC long-run natural-rate band (4.0–5.0%). Product defaults unchanged.

Downstream · consumer credit

Tier A default holds

Underwriting posture unchanged. KYC income-verification copy standard. No retier banner.

CPI · YoY percent · monthly
3.3 %
Above target

Above the FOMC 2% target. Inflation disclosure copy live on advisory surfaces.

Downstream · AML · advisory

Disclosure banner active

Advisor disclosure chip visible on every allocation screen. AML notional cap × 1.1.

DGS10 percent · daily
4.3 %
Normal

Between real-neutral (~2.5%) and policy-tight (~4.5%). Duration tilt is neutral.

Downstream · fixed income

Bond explorer · YTM sort

Default sort remains yield-to-maturity ascending. No duration-risk banner on portfolio view.

VIXCLS index · daily
18.2
Normal

Between the 20y median (~15) and the anxious threshold (20). Standard position sizing.

Downstream · risk · margin

Standard position sizer

Default position size at 100% of account-tier ceiling. No stress pill on open orders.

The playground runs on the same regime table the production panel reads. Thresholds at 4.5 / 6.0 / 8.0 (UNRATE), 2.0 / 3.0 / 5.0 (CPI), 2.5 / 4.5 / 5.0 (DGS10), and 15 / 20 / 30 (VIX) live in a single config surfaced to product leads — not buried in a chart component.

08 · Product surfaces

Three screens downstream, this is what changes

A routing line in a diagram is an assertion. Four UI mockups are the evidence. Each card below is a realistic slice of the downstream screen the panel re-defaults. Typography, component shapes, and copy voice are portfolio-grade — because the hand-off from panel to product happens at this fidelity, not at the block-diagram level.

UNRATE 6.0% trigger Consumer credit · new originations
Credit tier · new originations
Retier active · UNRATE 6.1% Tier A originations paused. Tier B now recommended default.
Tier A Paused
7.9 – 9.4% APR
FICO 740+ · DTI ≤ 36%
Tier B Default
9.4 – 12.9% APR
FICO 680–739 · DTI ≤ 40%
Tier C Available
12.9 – 17.4% APR
FICO 620–679 · DTI ≤ 45%
CPI 3.0% trigger Advisor · allocation review
Allocation review · client 04721
Inflation disclosure required CPI 3.29% YoY · above FOMC 2% target. Glidepath inflation assumption updated.
Real return target 4.2% was 4.5%
Inflation assumption 3.1% was 2.5%
Rebalance cadence Quarterly was Semi-annual
Client letter draft references current-period CPI print; reviewer sign-off required per advisory standard.
DGS10 4.5% trigger Fixed income · bond explorer
Bond explorer · investment grade
Sort Duration (ascending) Yield Credit Default sort changed · DGS10 > 4.5%
US T-Bill · 6M 0.5y 4.82% AA+
Apple 2027 · 2.45% 2.3y 4.71% AA+
Microsoft 2029 · 3.30% 3.8y 4.64% AAA
US Treasury 2031 · 1.25% 6.2y 4.41% AA+
VIX ≥ 30 trigger Risk · position sizer
New position · AAPL
Panic regime · VIX 32.4 Position-size default capped at 60% of tier ceiling. Stress pill visible on open orders.
Position size
0%Cap · 60%100%
Notional $18,420
Margin req. $5,526
Stress ΔPnL −$2,210
09 · Panel anatomy & state gallery

Every element, labelled. Every state, accounted for.

A component is not finished when it renders the happy path. It is finished when every state has been drawn and reasoned about. The anatomy breakdown shows the eight elements a single panel carries; the state gallery below is the full matrix of what the panel looks like when the data is slow, wrong, missing, or changing in front of you.

UNRATE
Unemployment rate
U-3
LATEST 4.3 %
YoY +0.4 pp
5Y PCT 72 th
Full employment
  1. 01
    TickerIdentity anchor. Uppercase, monospace feel, no abbreviation in the header.
  2. 02
    TitleHuman-readable name in the reader's vocabulary. Not the source-code label.
  3. 03
    Series codeConcept code (U-3, not UNRATE) — lets analysts cross-reference without leaving.
  4. 04
    Latest valueTabular numerals. Native unit. Never compressed; never truncated.
  5. 05
    Unit chipDisambiguates percentage-point vs percent-change. Small, always present.
  6. 06
    YoY deltaDirection + magnitude in one glyph. Up / down paired with colour.
  7. 07
    5y percentileWhere in the distribution this print sits — context, not opinion.
  8. 08
    Regime chipColour + word pair. Never colour alone (colour-blind safe).
  9. 09
    Routing footerExplicit product surface. The reason the panel exists in the product.

State gallery · six variants, one grammar

Loading skeleton
Error · fetch failed
VIXCLS Fetch error

FRED endpoint unreachable. Last known print: 18.2 · 3 days ago.

Stale · last print > 60 days
CPIAUCSL Stale 74d
311.4 %

Release delayed · no new print since Feb 12, 2026.

Regime transition · flash
UNRATE Slowdown · just crossed
6.1 %

Regime moved Expansion → Slowdown. Retier trigger fired.

Mobile compact · 375px
DGS10 Normal
4.29 %
YoY +0.6pp72nd %
Dense table · advisor view
LatestYoYPctRegime
UNRATE4.3%+0.4pp72Full emp.
CPI3.3%+0.4pp84Above
DGS104.3%+0.6pp72Normal
VIX18.2−2.140Normal
10 · Macro Terminal

The platform behind the signal panel

Four live demos stitched into one shell. Each tab is a working tool — not a screenshot — so a visiting hiring manager can feel how a macro print propagates through a product surface in under a second. Built with the same wiring as the production rollout: FRED & BLS primary sources, CBOE white-paper thresholds, Wolfsberg risk posture. Portfolio fixture sourced from the FinceptTerminal open-source demo book.

Joint regime matrix · UNRATE × CPI

Sixteen composite regimes where unemployment meets inflation. Click a cell to see the named regime, a confidence score, and the three product surfaces it triggers.

FRED · UNRATE + CPIAUCSL 1948 – 2026 back-test
< 2.0%Below
2.0–3.0%On target
3.0–5.0%Above
≥ 5.0%Overheat
< 4.5%Full empl.
4.5–6.0%Expansion
6.0–8.0%Slowdown
≥ 8.0%Recession
LIVE FRED · BLS · CBOE · H.15 · ForexFactory · FinceptTerminal · TrendRadar Latency 42ms 42 subscribers Build v2.7.14

Five tabs sharing one source of truth: the same four FRED series that drive the production signal panel further up the page feed regime classification, curve sandbox, stress test, calendar and news radar — the only way a platform earns the right to call itself one. Every tab routes to the same product defaults that ship on the real signal panel.

11 · Signal wiring

How four prints become fourteen product defaults

The panel is cosmetic if it does not terminate in a default somewhere downstream. Each of the four series is mapped to a concrete surface and a concrete change — at threshold boundaries, the product does work on its own. The wiring below is the routing contract. It is the reason a PM signs off on the panel in the first place, and it is what a risk officer asks to see second (right after provenance).

Fourteen product surfaces routed from four macro series. Every routing rule is a version-controlled constant the panel surfaces — the panel is the human-readable face of a config file a PM can sign off on in a review. If a threshold moves, the panel regenerates and the routing changes with it. Designers do not own the numbers; designers own the routing. That is the job.

12 · Competitive teardown

What five incumbents do with the same four series

FRED.org owns the data. Bloomberg Terminal owns the traders. Refinitiv Eikon owns the sell-side desks. Koyfin owns the independent analyst. TradingView owns the retail chartist. Each makes a different set of trade-offs on the same four primitives. The teardown below is the reason this panel exists: the product-routing column is empty for every incumbent — not because they can't build it, but because their business model does not reward it.

Capability FRED.org Bloomberg Terminal Refinitiv Eikon Koyfin TradingView This panel
Latest-print chrome Numeric in table row Orange RT print · BLP ticker Headline card · refresh ticker Numeric above chart Last price in crosshair Tabular · unit · YoY sub
YoY delta semantics Absent (raw series only) CHG · user picks window Comparable period toggle YoY default + %Δ Chart annotation only Unit-aware (pp vs %)
5-year percentile context Absent HP() formula · user build Via workspace template Absent Absent First-class KPI row
Regime bands with names Absent EE<GO> custom only Absent Absent User-drawn zones Named · colour + word
Product-routing intel Out of scope Out of scope Out of scope Out of scope Out of scope Trigger · Now · Surface
Annotation priority NBER recession bars News stream inline Reuters alerts Note pin on chart Community ideas feed Regime cross only
Mobile reading density Desktop-only table Desktop client App · feature-parity gap Web-responsive Native mobile parity Single-col 375px stack
Licensing posture Free · public domain Subscription · ~$32K/yr Subscription · ~$22K/yr SaaS · tiered Freemium · ads Build-time · free

Swipe horizontally on mobile. The product-routing intel row is the claim: nobody else treats a macro print as a product input. Every incumbent treats it as content. That is the gap. Senior product designers at fintech companies live in that gap.

13 · Threshold decision log

Every boundary has a source. No opinion goes unattributed.

A regime band is only as legitimate as the source that backs the boundary. Round numbers — 4% unemployment, 2% inflation, 30 VIX — feel arbitrary in a product until you can point at the BLS methodology paper, the FOMC statement, the CBOE white paper, or the NBER recession dating committee. The log below is what I hand to a risk officer when they ask "why that number and not a different number".

Series Boundary Regime transition Source Why this number
UNRATE 4.5% Full employment → Expansion BLS CES & CPS methodology (2024 revision) Natural-rate centre of 4.0–5.0% band published by FOMC SEP median since 2019.
UNRATE 6.0% Expansion → Slowdown Sahm Rule · FRB Finance & Economics Discussion 2019-055 Three-month avg rising 0.5pp above 12-mo low — threshold aligns with documented recession trigger.
UNRATE 8.0% Slowdown → Recessionary NBER Business Cycle Dating Committee Sustained print > 8% has coincided with every declared US recession since 1948.
CPIAUCSL 2.0% YoY Below target → On target FOMC Statement of Longer-Run Goals (Jan 2012, reaffirmed annually) Explicit Fed target. Below-target is as much a policy signal as above-target.
CPIAUCSL 3.0% YoY On target → Above target FOMC SEP symmetric tolerance band SEP median forecast band rarely prints above 3% in equilibrium — crossing this is a stance change.
CPIAUCSL 5.0% YoY Above target → Overheating BLS CPI-U series · historical 5y percentile Pre-2021 5-year max was 2.9% YoY. 5% is the 99th percentile of the post-1990 distribution.
DGS10 2.5% Low rate → Normal FRB H.15 Release · 20-year median Post-GFC 20-year median approximates the real-rate-plus-target-inflation long-run anchor.
DGS10 4.5% Normal → Elevated FOMC Summary of Economic Projections · long-run neutral Above SEP long-run neutral (~2.5%) plus SEP long-run inflation (~2%) puts 4.5% at policy-tight.
DGS10 5.0% Elevated → Crisis BIS Quarterly Review (Dec 2023) · duration stress Print > 5% triggered MBS convexity hedging cascades (2023) and UK LDI crisis (2022).
VIXCLS 15 Calm → Normal CBOE VIX White Paper (2019 rev) · 20y median Long-run median on the published CBOE history — below this print, hedging demand collapses.
VIXCLS 20 Normal → Anxious CBOE VIX · 5y rolling 75th percentile Option-implied vol enters the top quartile of the trailing distribution.
VIXCLS 30 Anxious → Panic CBOE VIX · every crisis print since 1990 LTCM, dot-com, GFC, Euro debt, COVID, 2022 rate shock — every crisis crossed 30.
14 · Pattern taxonomy

Naming the pattern: the Product-Routed Signal Panel

A pattern without a name is hard to reuse. After three stints across wealth, trading, and compliance surfaces, the shape below kept re-emerging — always the same anatomy, always the same failure modes. I call it the Product-Routed Signal Panel. It sits adjacent to (but is not) a dashboard, a news strip, or a market-data card. The distinction matters because each adjacent pattern has a different success metric.

Anatomy

Five mandatory parts

  1. Latest value — native unit, tabular, no compression.
  2. Directional glyph — YoY in the right unit (pp vs %).
  3. 5-year percentile — "where are we in the distribution".
  4. Named regime band — colour plus word.
  5. Routing line — explicit product surface + trigger.

Miss one and it degrades to a different (weaker) pattern.

Adjacent patterns

What it isn't

Market-data card
Optimises for price + %. No regime, no routing, no context.
News strip
Optimises for attention. Freshness beats thresholds.
Analytics dashboard
Optimises for drill-down. Panel gives the default.
Chart widget
Optimises for interaction. Panel is read, not driven.
Failure modes

When not to use this

  • No downstream surface — without a routing target, it collapses to a vanity tile.
  • Cadence ≥ daily — intraday prints defeat the five-year context frame.
  • Unbounded series — thresholds rely on distributions that stabilise over time.
  • Audience is the data desk — analysts want the chart, not the default.
  • No stable owner for thresholds — boundaries need version control and a sign-off trail.
15 · References

Reading that shaped the thresholds and the pattern

Not an appendix — a provenance trail. If the numbers and the vocabulary on this page look authoritative, it is because they are borrowed from institutions that took decades to make them so.

Methodology · primary sources
Design precedent · what good looks like
Tooling · what the pipeline is built on
Portfolio threads

Where this case study sits in the larger web

Every problem we solve for clients has multiple valid approaches — different costs, different ROI, different risk profiles. These threads show how the approach on this page compares to others in the portfolio.

Thread

Regulatory Routing & Disclosure

How upstream regulation and macro prints become downstream product defaults and Legal-safe disclosure.

Thread

Concentration, Risk & Agents

Portfolio-level math primitives — HHI, beta, VaR, regime — rendered into UI defaults and AI-assisted decision surfaces.