busy-office-ui
Menu

What's in scope

What this framework covers, what it deliberately doesn't, and where the line is. A "not in scope" list is a completeness signal: it says the gap was decided, not forgotten (owner docs review, 2026-08-16).

In scope

  • Semantic components for back-office screens — tables, forms, money and quantity fields, approval timelines: the surfaces an ERP actually spends its day in.
  • Density as a first-class dimension — one attribute re-sizes a whole screen, because clerks and casual users need different row heights from the same app.
  • The cascade as the API — layered CSS you override from your own unlayered stylesheet, no build step required.
  • Behaviors, not a framework — a small set of call-once, delegated JS behaviors for what CSS cannot do (dirty-state tracking, combobox ARIA, tree toggling). Everything else is your app's code.
  • Print, accessibility, and dark mode as contracts — gated in CI, not aspirations.

Not in scope — decided, not forgotten

Not shippedWhy, and what to do instead
A charting engine Charts are a library decision (data joins, scales, animation) that would dwarf this codebase. Bring your own; the scale system gives you a categorical palette and the contrast rules to keep it legible in both themes.
A rich-text editing engine Undo stacks, sanitization and selection models are dedicated-library territory. The chrome ships — container, toolbar, prose styles — plus a recipe for mounting a real editor inside it.
A virtualised table Virtualisation trades away find-in-page, native scrolling and print fidelity. Measured render costs are on the data table page; past ~5k rows, paginate server-side.
A JS component framework No components-as-JS, no virtual DOM, no build step. HTML you can read in a diff, styled by cascade layers — htmx-ready, not htmx-coupled.
Page builders and WYSIWYG layout engines Visual authoring engines are outside the framework. A board pattern does ship: it composes existing components with a Move to… action; it is not a drag-and-drop engine.
Icons as a shipped set Icon sets are opinionated and heavy; the sizing contract ships so any set works at every density.
State management, routing, i18n runtime Application concerns. The framework never owns your data or your URLs — it styles what your server renders.

How a gap gets closed

Everything above was decided against the project's objective — simplicity, less-for-more, reusability — and each decision is recorded with its reasoning in the roadmap. A refusal is not permanent: a real adopter requirement reopens it. What will not happen is a feature landing because it seemed nice, or a gap persisting because nobody wrote down the decision.

↑↓ move Enter open Esc close