DESCRIPTION
Extracting the component library into packages/ui (@velar/ui) only pays off if the package actually builds, ships typed exports, and can be consumed by more than one app. This epic covers the tooling side: a real build pipeline, shared lint/TypeScript config so every consumer gets the same rules, and proof — via a second, real consumer — that the package works outside apps/web.
GOAL
@velar/ui builds independently with a typed exports map, a shared lint/TS config package keeps every consumer consistent, and a second real consumer in the monorepo proves the package is genuinely reusable, not just theoretically.
REQUIREMENTS
- Build tooling for
packages/ui (e.g. tsup or tsc) producing typed declaration files and a proper exports map in package.json, with a sideEffects flag set correctly for any CSS.
- A shared lint/TypeScript config package (e.g.
packages/config/ or @velar/config) that apps/web and packages/ui both extend, instead of duplicating ESLint/tsconfig rules.
- Workspace build ordering (npm workspaces / Turborepo pipeline) so
@velar/ui always builds before anything that imports it, including in watch/dev mode.
- A second, real consumer of
@velar/ui inside the monorepo (e.g. the Storybook/docs surface from the design-system documentation epic, or a minimal new example app) that imports and renders components purely through the published package — not by reaching into apps/web.
ACCEPTANCE CRITERIA
npm run build --workspace packages/ui produces typed output consumable via @velar/ui's exports map.
apps/web and the second consumer both build successfully importing only @velar/ui, with no direct cross-app file imports.
- Shared lint/TS config exists and is extended by at least two packages.
npm run build, npm run lint, npm run typecheck pass at the workspace root with NO VELAR credentials.
NOTES
Relevant files: packages/ui/package.json, apps/web/eslint.config.mjs / tsconfig.json, root package.json, turbo.json if introduced. Depends conceptually on the package already existing (extraction epic) — if it hasn't landed yet, this issue may include the minimal extraction needed to prove the pipeline.
No VELAR credentials required: verifiable locally via npm run build/lint/typecheck — no database, secrets, or external APIs.
Difficulty: Advanced
Priority: Medium
PR REQUIREMENTS
- Ship this as a single pull request — do not split into stacked/sequential PRs.
- Your PR description must include
Closes #<this-issue-number> (this issue's GitHub number) so merging auto-closes it.
CAMPAIGN REQUIREMENTS (FWC26)
To be eligible for the reward on this issue, the contributor must:
DESCRIPTION
Extracting the component library into
packages/ui(@velar/ui) only pays off if the package actually builds, ships typed exports, and can be consumed by more than one app. This epic covers the tooling side: a real build pipeline, shared lint/TypeScript config so every consumer gets the same rules, and proof — via a second, real consumer — that the package works outsideapps/web.GOAL
@velar/uibuilds independently with a typed exports map, a shared lint/TS config package keeps every consumer consistent, and a second real consumer in the monorepo proves the package is genuinely reusable, not just theoretically.REQUIREMENTS
packages/ui(e.g.tsuportsc) producing typed declaration files and a properexportsmap inpackage.json, with asideEffectsflag set correctly for any CSS.packages/config/or@velar/config) thatapps/webandpackages/uiboth extend, instead of duplicating ESLint/tsconfig rules.@velar/uialways builds before anything that imports it, including in watch/dev mode.@velar/uiinside the monorepo (e.g. the Storybook/docs surface from the design-system documentation epic, or a minimal new example app) that imports and renders components purely through the published package — not by reaching intoapps/web.ACCEPTANCE CRITERIA
npm run build --workspace packages/uiproduces typed output consumable via@velar/ui'sexportsmap.apps/weband the second consumer both build successfully importing only@velar/ui, with no direct cross-app file imports.npm run build,npm run lint,npm run typecheckpass at the workspace root with NO VELAR credentials.NOTES
Relevant files:
packages/ui/package.json,apps/web/eslint.config.mjs/tsconfig.json, rootpackage.json,turbo.jsonif introduced. Depends conceptually on the package already existing (extraction epic) — if it hasn't landed yet, this issue may include the minimal extraction needed to prove the pipeline.No VELAR credentials required: verifiable locally via
npm run build/lint/typecheck— no database, secrets, or external APIs.Difficulty: Advanced
Priority: Medium
PR REQUIREMENTS
Closes #<this-issue-number>(this issue's GitHub number) so merging auto-closes it.CAMPAIGN REQUIREMENTS (FWC26)
To be eligible for the reward on this issue, the contributor must: