A modern monorepo for React component library and demo applications, built with TypeScript, Tailwind CSS, and Turbo.
This is a monorepo containing:
- app/demos — Demo templates to test the component library
- app/docs — Documentation site
- packages/components — Shared components
- packages/extraction-ui — Main component library
- packages/utils — Shared utilities
- pnpm — Fast, disk space efficient package manager
- Node.js >= 18.0.0
- Turbo — High-performance build system for monorepos
- TypeScript — Type safety across the entire project
- React 19.2.0 — UI library
- Tailwind CSS — Utility-first styling
- Vite — Fast build tool and dev server
- ESLint — Code linting
extraction/
├── apps/
│ ├── demos/
│ │ ├── astro/ # Astro demo app
│ │ ├── gatsby/ # Gatsby demo app
│ │ ├── next/ # Next.js demo app
│ │ ├── vite/ # Vite demo app
│ │ └── docs/ # Documentation site
├── packages/
│ ├── components/ # Shared React components
│ ├── extraction-ui/ # Main component library
│ └── utils/ # Shared utilities
├── package.json # Root workspace configuration
├── pnpm-workspace.yaml # pnpm workspace setup
├── turbo.json # Turbo build configuration
└── tsconfig.json # Root TypeScript configuration
- Node.js >= 18.0.0
- pnpm >= 10.15.0
- Clone the repository:
git clone https://github.com/ismael01866/extraction.git
cd extraction- Install dependencies:
pnpm install- Build all packages:
pnpm buildThe core component library
- Location:
packages/extraction-ui/ - Main exports: Button, Card, Flex, Grid, Dialog, Modal, etc.
- Read: packages/extraction-ui/README.md
pnpm --filter=extraction-ui buildFull documentation site for the component library.
- Location:
apps/docs/ - Start:
pnpm --filter=docs dev - Build:
pnpm --filter=docs build - Features: MDX content, live code examples, component showcase
- Install dependencies:
pnpm install- Make changes to component library:
# Edit files in packages/extraction-ui/src/
pnpm --filter=extraction-ui dev- Use in demo apps:
# Changes are immediately available in development
pnpm --filter=next devRun tests in a specific package:
pnpm --filter=extraction-ui test
pnpm --filter=extraction-ui test:watchCheck types across the workspace:
pnpm --filter=extraction-ui type-checkBuild all packages in dependency order:
pnpm buildBuild orchestration is handled by Turbo. Configuration in turbo.json:
- dev task runs in watch mode, no caching
- build task has outputs in
dist/,.next/,public/ - lint task runs ESLint
Workspaces are defined in pnpm-workspace.yaml:
- All apps in
apps/** - All packages in
packages/** - Special dependency handling for build tools
Root tsconfig.json contains base configuration extended by all packages.
The monorepo uses Tailwind CSS for styling:
- Import main styles:
import 'extraction-ui/styles' - Styles are compiled during build
This monorepo uses Changesets to manage versioning and releases for publishable packages.
When making changes to a publishable package (for example extraction-ui), create a changeset:
pnpm changesetFollow the prompts:
- Select the package affected by your changes.
- Select the version bump:
patch— bug fixes and small improvementsminor— new features and backwards-compatible changesmajor— breaking changes
- Write a short description of the change.
This creates a changeset file:
.changeset/<generated-name>.md
Commit this file with your pull request.
When changesets are merged into master, GitHub Actions automatically creates a Version Packages pull request.
The release PR:
- Updates package versions
- Generates changelog entries
- Removes consumed changeset files
After the release PR is merged, GitHub Actions publishes the updated packages to npm automatically.
To manually test the release process locally:
pnpm changeset versionBuild and publish a package:
pnpm --filter=extraction-ui build
pnpm --filter=extraction-ui publishExtraction UI Copyright (c) 2026 Ismael Mariscal