About bklit-ship
bklit-ship is a skill for bklit-ui monorepo contributors moving a chart or component validated in Studio into production. It provides a repository-specific checklist covering exports, documentation, Studio, registry builds, and verification.
Key features
- 01Move components into the UI package
- 02Update public exports and documentation
- 03Register examples and Studio controls
- 04Rebuild the shadcn registry
- 05Run lint, tests, and build checks
Use cases
- 01Ship a Studio-validated chart variant
- 02Add a new chart kind to the package
- 03Prepare a component change for a pull request
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ bklit/ bklit-ui --skill bklit-shipAfter installing, type/bklit-shipin Claude Code to confirm it loaded.
Details
From the project READMEBklit Ship Skill
This skill is for bklit-ui monorepo contributors taking a chart or component validated in Studio into production: published in the UI package, documented, and ready for users.
When to use this skill
- You cloned
bklit/bklit-uiand have a working prototype validated in Studio (/studio) and want to ship it. - You are ready to move from "scaffolding" to "permanent": the API and key props/variants are decided from the prototyping phase.
Plan: Prototype → Production
Follow these steps in order. Treat this as a checklist; each step has concrete locations in the repo.
1. Move into the UI package and export
- Move or finalize chart/component source in
packages/ui/(e.g.packages/ui/src/charts/for charts). Prototypes should already live here if you followed bklit-studio; remove any leftover copies underapps/web/components/playground/if present. - Export the new chart/component from the package’s public API:
- For charts: add exports in
packages/ui/src/charts/index.ts. - If the package uses
exportsinpackage.jsonfor specific entry points, add or update the relevant entry so the new component is importable as@bklitui/ui/charts(or the appropriate path).
- For charts: add exports in
- Do not add app-only chart copies under
apps/web/components/playground/(deprecated). Studio previews belong inpackages/studio.
2. Documentation and examples (apps/web)
Documentation lives under apps/web/. Do all of the following.
-
Update existing component docs when shipping extends an existing chart (new props, subcomponents, or behavior):
- Add new props to the relevant tables in the parent doc (e.g.
line-chart.mdxforGrid highlightRowValues,ChartTooltip indicatorColor). - Update related utility docs if needed (e.g.
content/docs/utility/grid.mdx,tooltip.mdx). - Keep the primary docs preview unchanged — do not swap the standard preview on an existing page for the new variant.
- Add a short section linking to a dedicated doc page when the feature warrants one (e.g. Profit/Loss →
profit-loss-line.mdx).
- Add new props to the relevant tables in the parent doc (e.g.
-
Chart examples (live demos on
/charts/[slug])- Add examples to the corresponding gallery route (e.g. profit/loss variants under
/charts/line-chart, not only a new docs preview). - If the feature is a new chart kind, add its slug to
apps/web/components/charts/chart-slugs.tsand register examples inapps/web/components/charts/chart-examples.tsx(CHART_NAV_ITEMS/ factory registry as appropriate). - Reuse or mirror the prop variants you validated in the scaffolding phase.
- Add examples to the corresponding gallery route (e.g. profit/loss variants under
-
Dedicated doc page (when shipping a new composable or chart kind)
- Add
apps/web/content/docs/components/<name>.mdxwith frontmatter,<ComponentPreview>, installation, usage, and props — consistent with existing component docs. - Add the slug to
apps/web/content/docs/components/meta.json. This drives the desktop sidebar and the mobile menu —apps/web/components/docs/site-header.tsxrenders the mobile nav from the docs page tree (docsTree), so there is no hand-maintained list to edit there. - Optional "New" badge: add the docs and gallery URLs to
apps/web/lib/nav-badges.ts(sidebar, mobile menu and site nav all read it). - Top-level site links (Docs, Components, Recipes, …) live in
apps/web/lib/site-nav-links.ts; chart pages do not go there.
- Add
3. Studio
- Update the existing studio chart when the feature is a variant of an existing type, or add a new studio chart when it is a distinct kind.
- Wire all tunable props into studio (if not already done while prototyping):
packages/studio/src/lib/studio-parsers.ts— URL state keys and defaultspackages/studio/src/lib/registry-control-groups.ts— control groupspackages/studio/src/lib/registry.tsx— render preview +generateCodepackages/studio/src/lib/studio-components.ts— layer tree- Chart-type defaults in
packages/studio/src/components/studio-state-provider.tsxwhen switching chart type
- A new studio slug also needs (TypeScript catches the
Record<ChartSlug, …>ones, not the rest):packages/studio/src/chart-slugs.ts— add the slugpackages/studio/src/lib/types.ts—chartLabelsentry (display name;satisfies Record<ChartSlug, string>)packages/studio/src/components/chart-type-icons.tsx—CHART_TYPE_ICONSentry (Record<ChartSlug, IconName>)packages/studio/src/components/catalog/catalog-chart-preview-grid.tsx—CATALOG_CHART_LAYOUTentry when the catalog tile needs a custom size or state overrides (andSTUDIO_Y_AXIS_CHART_PREFIXif it has a y-axis)packages/studio/src/lib/studio-url-key-orders.ts— append every new URL state key to the end ofSTUDIO_STATE_KEY_ORDER(frozen, append-only; never insert or reorder — it would corrupt shared URLs;studio-url-codec.test.tsguards it)packages/studio/src/lib/studio-visibility-sync.ts— add cases tolegendComponentIdForChart/brushComponentIdForChartwhen the chart has a legend or brush layer (defaultnullotherwise)
4. Rebuild the shadcn registry
- From the repo root: run
pnpm registry:build. - This updates
apps/web/public/r/frompackages/ui. Ensure new components are listed inpackages/ui/registry.jsonwhen they should be installable via shadcn.
5. Lint, format, test, and build
Run from repo root until clean:
pnpm lint
pnpm format
pnpm --filter @bklitui/ui test # when package logic changed
pnpm build
pnpm registry:build # if not already run in step 4
Fix all errors; repeat until hooks pass on commit.
6. Commit, push, and open a PR
- Commit with a short, clear message (e.g.
feat(charts): add ProfitLossLine component). - Push the branch.
- Open a PR with the ship checklist filled in (see below).
PR checklist
- Chart/component moved to
packages/uiand exported - Existing docs updated with new props/features (standard preview unchanged)
- Gallery examples on the correct
/charts/**route - Dedicated doc page + sidebar + mobile nav (if new composable/chart kind)
- Studio chart updated or added with all props in control groups (new slug: labels, icon, catalog layout, URL key order appended)
- Registry rebuilt (
pnpm registry:build) -
pnpm lint, tests (if applicable), andpnpm buildpass
File reference (quick lookup)
| Step | Location |
|---|---|
| Chart exports | packages/ui/src/charts/index.ts |
| Chart slugs | apps/web/components/charts/chart-slugs.ts |
| Chart examples (nav + registry) | apps/web/components/charts/chart-examples.tsx |
| Component docs | apps/web/content/docs/components/<name>.mdx |
| Utility docs (Grid, Tooltip, …) | apps/web/content/docs/utility/*.mdx |
| Sidebar + mobile nav | apps/web/content/docs/components/meta.json → pages (mobile menu in site-header.tsx is generated from the docs page tree) |
| "New" badges | apps/web/lib/nav-badges.ts |
| Studio registry | packages/studio/src/lib/registry.tsx |
| Studio components tree | packages/studio/src/lib/studio-components.ts |
| Studio controls | packages/studio/src/lib/registry-control-groups.ts |
| Studio URL state | packages/studio/src/lib/studio-parsers.ts + append keys in packages/studio/src/lib/studio-url-key-orders.ts |
| Studio slug list / labels / icons | packages/studio/src/chart-slugs.ts, packages/studio/src/lib/types.ts (chartLabels), packages/studio/src/components/chart-type-icons.tsx |
| Studio catalog tile | packages/studio/src/components/catalog/catalog-chart-preview-grid.tsx |
| Studio layer visibility sync | packages/studio/src/lib/studio-visibility-sync.ts |
| Registry (source) | packages/ui/registry.json; build output: apps/web/public/r/ |
| Registry build | From root: pnpm registry:build |