StealThis .dev
Pages Medium

Dashboard — Marketing (funnels · channels)

A marketing growth dashboard for the fictional Lumenpath, built with inline-SVG charts and zero libraries. A sticky sidebar and topbar frame a date-range and channel filter bar, a four-up KPI row with deltas and sparklines, an interactive Visitors to Paid conversion funnel with per-step rates and hover tooltips, a channel-performance widget pairing animated bars with a spend, CAC and ROAS table, and a sortable campaign list with live, paused and in-review statuses. Filters recompute every figure from a deterministic dataset.

Open in Lab
html css vanilla-js
Targets: JS HTML

Code

Marketing (funnels · channels)

A production-grade marketing dashboard for the fictional Lumenpath growth team. A sticky left sidebar carries the section nav, a quarterly budget meter and the signed-in user; the topbar holds the page title, a search field and a notification bell. A filter bar combines a date-range segmented control (7d / 30d / 90d / 12m) with a channel selector plus Reset and Export actions. Everything uses landmark roles, aria-pressed/aria-selected/aria-busy, focus-visible states and WCAG AA contrast.

The body opens with a four-up KPI row — Sessions, Conversion rate, CAC and Blended ROAS — each showing a value, an up/down delta coloured by whether the move is good (lower CAC counts as a win), and a tiny inline-SVG sparkline. Below it, an SVG conversion funnel renders Visitors → Leads → Trials → Paid as tapered segments with per-step conversion percentages and follow-the-step hover tooltips, beside a channel-performance widget that pairs an animated bar chart (toggle ROAS / Spend / CAC) with a spend·CAC·ROAS table whose ROAS pills shift colour by tier. A full-width campaign list sorts by ROAS and tags each row Live, Paused or In review.

All numbers come from a deterministic synthetic dataset, so each filter combination is stable across redraws. Changing the date range or channel recomputes every KPI, the funnel, the channel widget and the campaign list behind a short loading shimmer; the metric tabs re-plot just the channel bars. A bounded live tick nudges the volume figures every few seconds and pauses when the tab is hidden. The layout reflows from four to two to one column and the sidebar becomes an off-canvas drawer below 720px, scaling cleanly to 360px.

Illustrative UI only — Lumenpath is fictional and all figures are synthetic.