Skip to content

@velar/ui package build pipeline, shared lint/TS config & second-consumer proof — frontend EPIC #76

Description

@grantfox-oss

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:

Metadata

Metadata

Assignees

No one assigned

    Labels

    GrantFox OSSIssue tracked in GrantFox OSSMaybe RewardedIssue may be eligible for a GrantFox rewardOfficial Campaign | FWC26Campaign: Official Campaign | FWC26Third CampaignCampaign: Third Campaign

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions