Back to Home

Case Study · 2026

Aurora Analytics

A data-dense dashboard built for a small ops team that lives inside it eight hours a day — real-time streaming charts, motion-driven KPIs, and a UI calm enough to last a full shift.

< 1.2s

Load time

38ms

TTFB

98

Lighthouse

6 wks

Timeline

Active sessions

12,847

↑ 18.4% vs last week

Aurora Analytics · 2026

Role

Full-stack & UI design

Stack

Next.js · TypeScript · D3 · Postgres

Team

Solo build

Status

Shipped & in production

The problem

Seven tabs that should be one surface.

The ops team was context-switching between a legacy BI tool, raw SQL in a Retool panel, Slack alerts, and a spreadsheet they maintained by hand. Every morning standup started with five minutes of tab reconciliation. Data was never wrong — it was just always slightly out of sync.

The brief was simple: one screen, live data, no refresh button. The hard part was doing it without making the interface feel busy.

The solution

A query layer that streams, not polls.

I built a thin streaming layer on top of Postgres using server-sent events. Each chart subscribes to a typed channel; updates arrive as deltas and merge into the D3 data join without triggering a full re-render. The result is a dashboard that feels alive without the jitter of constant refreshes.

Streaming KPIs

SSE-powered metrics update in under 200ms with optimistic animations that smooth over network jitter.

Keyboard-first nav

Every panel, filter, and drill-down is reachable without a mouse. Power users never have to look away from the data.

Adaptive density

The layout respects user preference — compact for analysts, spacious for executive reviews — stored in a cookie.

Process

Six weeks, start to ship.

1

Wk 1–2

Discovery & schema

Shadowed two ops analysts for a day each. Mapped data sources, designed the Postgres schema, settled on SSE over WebSockets for simpler infrastructure.

2

Wk 3

Core components

Built the D3 chart primitives — line, bar, heatmap — as typed React wrappers with configurable easing. Established the design tokens.

3

Wk 4–5

Integration & polish

Wired streaming, keyboard nav, and the filter system. Ran daily reviews with the team to catch usability issues early.

4

Wk 6

Performance & launch

Profiled, lazy-split secondary panels, tuned Postgres indexes. Lighthouse 98 on mobile before shipping.

Outcome

The standup ritual disappeared.

Within a week of launch the team dropped their morning tab reconciliation entirely. Data confidence went up, and so did on-call response time — the alert panel now lives beside the charts that explain why it fired.