Skip to content
This repository was archived by the owner on Mar 7, 2026. It is now read-only.

Latest commit

 

History

History
95 lines (73 loc) · 12.1 KB

File metadata and controls

95 lines (73 loc) · 12.1 KB

UI‑Kit — Iteration Roadmap

A pragmatic breakdown into four one‑week sprints plus a preparatory Sprint 0. Each task lists an objective and a Definition of Done (DoD) expressed as automated checks the AI coding agent must satisfy.


Sprint 0 — Scaffold, CI & DevOps plumbing

# Task DoD (checked by CI bot) Status
0.1a Initialise ui-kit repo with Vite library template, TS, Tailwind. Project structure exists with basic dependencies.
0.1b Configure DaisyUI and verify build process. pnpm build exits 0; generated dist/index.js exists.
0.2 Add ui-kit.mdc rule file and baseline ESLint + Prettier config. npm run lint passes with zero errors on fresh repo.
0.3 Configure GitHub Actions pipeline skeleton (lint → test → build). Workflow completes green on main.
0.4 Commit Husky hooks (commitlint, lint‑staged). Attempting to commit code with ESLint errors is blocked locally.
0.5 Seed Changesets & automatic versioning. Merging PR increments package.json version and creates a changelog file.
0.6 Docker/Dokku infra – Add multi‑stage Dockerfile, Procfile; CI job builds image & pushes to test Dokku app. gh workflow run docker-test builds & deploys; Dokku reports container running, health‑check 200.
0.7 Update GitHub Actions – Configure CI workflows to run on develop branch and PRs. CI workflows run on both main and develop branches, as well as PRs targeting these branches.

Sprint 1 — Core primitives & docs foundation

# Task DoD Status
1.0a Folder restructure – adopt src/components/primitives, layout, hooks, providers hierarchy. pnpm build & pnpm test pass after move; no unresolved imports in TS.
1.0b Migrate Button files into components/primitives/Button/; delete legacy core/Button. Storybook & unit tests green at the new path.
1.0c Update barrels (src/components/index.ts, root src/index.ts) and adjust all imports. pnpm lint shows 0 errors; grep finds no from "./core".
1.1a Create basic Button component structure. Component file exists with basic props and types.
1.1b Complete Button implementation with tests and stories. Vitest basic unit tests, Storybook MDX story with ArgsTable.
1.1c Implement TextInput wrapper in src/components/primitives. Vitest basic unit tests, Storybook docs (autodocs) & unit tests.
1.2a Set up basic Storybook configuration. npm run storybook starts successfully.
1.2b Install and configure Storybook addon‑docs. Documentation tab shows component documentation.
1.2c Configure and verify Storybook addon‑a11y. axe‑a11y addon shows zero violations.
1.3 Add global theme bridging (theme.css ↔ DaisyUI). Cypress visual diff (light/dark) matches golden images.
1.4 Create first AuthShell layout with logo slot. Rendered via Storybook; Playwright snapshot approved.
1.5 Document design tokens (DESIGN_TOKENS.md). File exists; CI step tokens-check verifies presence of each CSS var.

Sprint 2 — Form primitives & State tooling

# Task DoD Status
2.1 Add NumberInput, Select, Checkbox, RadioGroup components. Unit & a11y tests pass; form story displays all.
2.2 Integrate React Hook Form + Zod; create FormGrid + FormGroup. Story "Form Example" submits & reports validation errors in Storybook interaction test.
2.3 Implement Zustand session store skeleton with dark‑mode flag. Vitest verifies default state + setter actions.
2.4 ESLint rule enforcing named useEffect & cleanup. Failing example in test repo triggers lint error; real code passes.
2.5 Extend CI to run axe‑core on all stories. Pipeline fails if any new a11y violations introduced.

Sprint 3 — Data layer & Main layouts

# Task DoD Status
3.1 Wrap TanStack Table into DataTable with pagination, resize. Story with 50 rows paginates; Playwright test clicks next page.
3.2 Build MainLayout with TopBar + LeftNav + Breadcrumb. Storybook viewport test at 1280 & 1024 px shows responsive collapse.
3.3 Implement Toast system (useToast) + StatusBadge. Vitest renders Toast, axe-core passes.
3.4 Sample showcase: login page + dashboard + customers table route. E2E Playwright run (login → dashboard) green in CI.
3.5 Add i18n infrastructure (react-i18next) with en, de locales. Storybook toolbar allows locale switch; renders German labels.
3.6 SQLite seed script – generate 100 customers & 2 users; hook pnpm run seed in showcase. Script executes without error; Playwright test logs in with admin credentials, verifies 100 customers paginated.

Sprint 4 — Polish, security & release readiness

# Task DoD Status
4.1 Implement CSP & DOMPurify wrapper in MarkdownEditor. Security unit test feeds XSS payload; output sanitised.
4.2 Add Sentry ErrorBoundary + tslog logger. Fake error in story captured by mocked Sentry client in test.
4.3 Size‑limit CI check (< 250 KB gz for core bundle). npm run size-limit passes.
4.4 Prepare CONTRIBUTING.md, PR template, CODEOWNERS. Presence verified by doc‑lint script.
4.5 Publish first v0.1.0-beta to GitHub Packages; deploy Storybook demo to Pages. Tag v0.1.0-beta exists; npm info returns package; Pages URL accessible & shows build hash.

Post‑MVP backlog (icebox)

  • Implement CodeEditor (Monaco) component.
  • Add Prometheus metrics endpoint to API stub.
  • Bundle‑size driven package split (ui-core, etc.) when trigger metrics crossed.

Sprint 4a — Completeness Pass (remaining inputs, layouts & routes)

# Task DoD Status
5.1 Form inputs batch 2 – DatePicker, DateRangePicker, SliderInput, SpinnerInput, ComboBox, TextArea Unit + a11y tests (≥90 % cov) & Storybook stories demonstrate disabled/error variants.
5.2 Editor widgets – MarkdownEditor (sanitised) & CodeEditor (Monaco) Storybook demo renders; Vitest security test confirms XSS payload stripped; bundle size increase ≤ 40 KB gzip.
5.3 Remaining layouts – ErrorShell, MainFixedLayout, DataDenseLayout, Footer slot in MainLayout Storybook snapshots approved in light/dark; axe-core passes.
5.4 Showcase routes extension/settings (MainFixedLayout), /components gallery, wildcard 404 page Playwright E2E navigates: login → settings → gallery → invalid URL → 404; no console errors.
5.5 Add Reset‑Password page (AuthShell variant) Route /reset-password renders form; Vitest form validation passes.
5.6 Update documentation index & Storybook sidebar grouping npm run build-storybook completes; new components appear under correct groups.