# Bklit is the only chart library, Stageshow the only way to draw product UI

The unused shadcn chart wrapper and Recharts are gone, a test refuses any other chart library on the web, and faux product UI on landing, marketing and docs pages is built with Stageshow.

Two design defaults are now rules, stated in `AGENTS.md`, `CODING_STANDARDS.md` and on [Design patterns](/docs/development/design). Every chart, sparkline and KPI or stat card on the web comes from [Bklit UI](https://bklit.com), through the `@bklit` registry and the `bklit-ui`, `bklit-ui-design` and `bklit-ui-migrate` skills. Faux product UI on landing, marketing and docs pages (stills, feature cards, cursor demos, bento grids) is built with [Stageshow](https://benji.org/stageshow) and ships only after its loop passes `film.mjs --gate`.

The shadcn `chart` wrapper in `packages/ui` and the `recharts` dependency of `apps/web` and `packages/ui` are removed. Nothing imported them, so the built client and Worker are byte-identical, and an install fetches 35 fewer packages. `scripts/web-chart-library.test.mjs` runs in `pnpm test` and fails when `apps/web/src` or `packages/ui/src` imports Recharts, Chart.js, Nivo, Victory, visx, ECharts, ApexCharts, Highcharts, Tremor or a similar library, or when their `package.json` lists one. It is a test rather than a lint rule because an oxlint entry would replace the client boundary; see [Enforcement](/docs/development/enforcement). The Stageshow rule is held in review, with a new item in the [Review checklist](/docs/development/review-checklist).

Bklit renders for React on the web only, so the Expo app is outside the rule. Its charts use `victory-native`, or Swift Charts through `@expo/ui` on an iOS-only screen. The dashboard KPI cards and the hand-built fragments of the landing feature board predate the rules and move to Bklit and Stageshow when they are reworked.

