Date: 2026-05-23
Author: Chris Dillon (via Claude)
Status: Approved for implementation planning
Lives at:/flare/ on christopherdillon.me
Purpose
A fully interactive, anonymised public showcase of FLARE — the internal BI platform Chris built at Nexus Brands Group. Visitors should leave understanding the breadth and polish of the platform without seeing any real Nexus data, copy, or business identity.
Linked from the main page Experience bullet and the Consultancy page so prospective clients and recruiters can see, not just read about, the work.
Non-goals
Real authentication or persistence
Mobile-first responsive design (desktop-first, like real FLARE; graceful narrow-viewport degradation only)
Cross-dashboard state (each dashboard is independent except for the global business switcher)
Live data, server-side anything, build-time data generation. Everything runs in the browser from baked-in fake data.
Hero: FLARE wordmark + flare-mark, one-line positioning (“Self-hosted, zero-per-seat BI for multi-business retail groups”), short prose context (~80 words)
“What’s inside” section: thumbnail / icon row of the six dashboards
“Behind the scenes” section: short factual block — “Real FLARE is the platform I built at Nexus Brands Group, serving 18 businesses. This demo runs entirely in your browser on invented data.”
Primary CTA: Launch demo → (links to /flare/login/)
Secondary CTA: back to consultancy page
/flare/login/ — fake Entra sign-in
Faithful styling of a Microsoft Entra (Azure AD) sign-in screen, but with FLARE branding and obvious “demo” markers (a small DEMO chip, the email prefilled as demo@flare.ops).
One Sign in button → routes to /flare/app/
A small “this is a static demo — no real auth” disclaimer in DIM text at the bottom
This page exists to make the SSO/Entra story tangible, not to be functional
/flare/app/ — dashboard shell
Single HTML page; hash routing for dashboards:
#/exec (default)
#/sku
#/stats
#/warehouse
#/bundle
Top bar:
Left: FLARE wordmark, then a business switcher dropdown (Group rollup / Trailcraft / Hearthline / Quill & Press / Velora)
Right: search input (cosmetic, no behaviour), notifications bell (cosmetic), user badge demo@flare.ops with avatar circle
Click a cell: top 10 co-purchased pairs list updates to show that pair’s recent baskets
Sidebar of top bundle suggestions ranked by lift × frequency
Technical approach
No build step. Plain HTML, CSS, JS — fits the existing Pascal/Nyquist pattern. Jekyll just serves the files.
Charts: Chart.js v4 via CDN. Themed once at flare-charts.js to match tokens.
Heatmap (warehouse + bundle matrix): hand-rolled SVG — Chart.js heatmap support is weak and SVG gives us full styling control.
Data:flare-data.js exports a getData(businessKey) function. Uses a mulberry32 seeded RNG so numbers are deterministic per (business, dashboard) — visitors see identical numbers on refresh, and the four businesses look meaningfully different.
Routing: vanilla window.addEventListener('hashchange', ...). Default to #/exec.
State:selectedBusiness lives in a tiny module-level object plus localStorage; a business-changed custom event re-renders the active dashboard.
No accessibility regressions: semantic HTML, keyboard-navigable sidebar and switcher.
Interactivity inventory (the “fully interactive” promise)
Control
Behaviour
Business switcher
Re-renders all charts on the active dashboard
Sidebar nav
Switches dashboards via hash
SKU table sort
Click column header, toggles asc/desc
SKU text/category filter
Filters table rows live
SKU row click
Opens drill-down panel
Stats promo dropdown
Re-renders comparison + per-category bars
Warehouse bin hover
Tooltip with utilisation
Warehouse bin click
Opens panel of SKUs in that bin
Bundle cell click
Updates top-10 co-purchased list
Risks and mitigations
Looks “AI-generated” / generic: countered by faithful copy of real FLARE tokens, distinctive typography, deliberate astrophysics terminology in micro-copy (“Observe”, “Instrument”, section labels), and seeded data that has plausible variation (not uniform-random noise).
Performance on initial load: Chart.js + data file should stay well under 200KB. No heavy frameworks.
Visitors confused about realness: explicit DEMO chips on login, “anonymised demo” notes on landing and in the app footer.
Drift from real FLARE tokens: tokens are copy-pasted into flare.css once; if real FLARE changes, this won’t auto-update. Acceptable for a portfolio piece.
Out of scope (explicit)
Real authentication, real persistence, real data fetching
Mobile-first design (must not break on phone, but desktop is the design target)
AI/LLM dashboard (deferred — could be added later if useful)
Internationalisation / localisation
Server-side rendering
Implementation order (rough sketch — full plan to follow)
Scaffold /flare/ directory, shared CSS with tokens, landing page
Login page (static mockup, simplest)
App shell with top bar, sidebar, hash routing, business switcher event plumbing
flare-data.js and flare-charts.js foundations
Exec overview dashboard (proves the data + chart pipeline)