turborepo-shadcn-nextjs
turborepo-shadcn-nextjs copied to clipboard
A Turborepo starter template with Next.js, Nextra, Storybook, and a shared pre-configured shadcn/ui package, powered by Bun and Biome
๐ Turborepo Starter with Next.js, Nextra, and shadcn/ui
A powerful monorepo starter template featuring Next.js, Nextra, and a shared pre-configured shadcn/ui package, powered by Bun, Vitest, Playwright, Storybook, and Biome.
- ๐ Features
- ๐ Quick Start
- ๐ฆ What's Inside?
- ๐ ๏ธ Useful Commands
- ๐งฐ Development Tools
- ๐ Deployment
- ๐ Useful Links
- ๐ฅ Contributors
๐ Features
- ๐ฆ Monorepo structure with Turborepo for efficient build system and caching
- โก Next.js for fast, server-side rendered React applications
- ๐ Nextra for easy-to-create documentation sites
- ๐จ shadcn/ui for beautiful, customizable UI components
- ๐ฐ Bun as a fast, all-in-one JavaScript runtime
- ๐งช Vitest for speedy unit testing
- ๐ญ Playwright for reliable end-to-end testing
- ๐ Storybook for isolated component development and documentation
- ๐ฟ Biome for fast, opinionated linting and formatting
- ๐ Automated dependency management with Dependabot
- ๐ฅ Automated contributor recognition
- ๐ CI/CD setup with GitHub Actions
๐ Quick Start
# Clone the repository
git clone https://github.com/gmickel/turborepo-shadcn-nextjs.git
# Navigate to the project directory
cd turborepo-shadcn-nextjs
# Install dependencies
bun install
# Start development server
bun dev
Add UI Components
bun ui:add:component <component-name>
This works just like the add command in the
shadcn/uiCLI. ๐จ
What's inside? ๐ฆ
graph TD
A[Turborepo] --> B[Apps]
A --> C[Packages]
B --> D[@repo/docs]
B --> E[@repo/web]
B --> F[@repo/storybook]
C --> G[@repo/ui]
C --> H[@repo/utils]
C --> I[@repo/tsconfig]
| App/Package | Description |
|---|---|
@repo/docs |
Documentation site powered by Nextra 3 alpha ๐ |
@repo/web |
Main Next.js web application ๐ |
@repo/ui |
Core React components and design system shared by both web and docs applications (powered by shadcn/ui) ๐จ |
@repo/utils |
Shared React utilities ๐ ๏ธ |
@repo/tsconfig |
Shared tsconfig.json configurations ๐ก๏ธ |
Each package and app is 100% TypeScript. ๐ช
Utilities ๐งฐ
This Turborepo has some additional tools already set up for you:
- TypeScript for static type checking โ
- Biome for code linting, formatting, and fixing ๐ฟ
- Vitest for unit tests ๐งช
- Playwright for end-to-end tests ๐งช
- Changesets for managing versioning, changelogs, and publishing ๐
- Storybook for component development and documentation ๐
Storybook ๐
This Turborepo includes Storybook for component development and documentation. Storybook is set up for both the @repo/web and @repo/ui packages, allowing the development and showcasing of components from both your main application and your shared UI library.
To run Storybook:
bun storybook
This will start Storybook and open it in your default browser.
Story Location
Storybook is configured to find stories in the following locations:
apps/storybook/src/**/*.mdxapps/storybook/src/**/*.stories.@(js|jsx|mjs|ts|tsx)apps/web/src/**/*.stories.@(js|jsx|mjs|ts|tsx)packages/ui/src/**/*.stories.@(js|jsx|mjs|ts|tsx)
This configuration allows you to write stories for components in both your web application and your shared UI library.
Storybook Addons
This setup includes several useful Storybook addons:
@storybook/addon-links: For linking between stories@storybook/addon-essentials: A curated set of addons for a great developer experience@storybook/addon-onboarding: For onboarding new users@storybook/addon-interactions: For testing component interactions@storybook/addon-themes: For theme switching in Storybook@storybook/addon-styling-webpack: For handling CSS and PostCSS in Storybook
Useful commands ๐ค
bun build- Build all apps and packagesbun dev- Develop all apps and packagesbun dev:ui- Develop all apps and packages and display the output in Turbo's new experimental UIbun test- Run all tests with vitestbun test:cov- Run all unit tests with vitest and generate a coverage reportbun test:cov:ui- Run all unit tests with vitest and display the vitest UIbun test:e2e- Run all end-to-end tests with playwrightbun lint- Lint and format all packagesbun lint:fix- Lint, format, and fix all packagesbun changeset- Generate a changeset ๐งโ๐ง - WIPbun clean- Clean up allnode_modulesanddistfolders (runs each package's clean script)bun ui:add:component- Add a shadcn/ui component to the@repo/uipackagebun storybook- Run Storybook for component development and documentation
Add a new app or package ๐ฆ
Turborepo offers a simple command to add new apps or packages to the monorepo. To add a new app, run the following command:
bun turbo gen workspace [--name <app-name>]
You will be prompted to choose the name and workspace type (app or package) to use.
You can copy an existing app or package with:
bun turbo gen workspace [--name <app-name>] --copy
You will be prompted to choose the name and workspace type (app or package) of the new app and which app or package to copy.
[! NOTE] Remember to run
bun installafter copying an app. โ ๏ธ
CI ๐ค
This Turborepo uses GitHub Actions for CI. ๐ค
It comes preconfigured with the following workflow that runs on every push or pull request to the main branch:
- Setup: Checks out the code and sets up Bun.
- Install: Installs all dependencies using Bun.
- Build: Builds all apps and packages in the monorepo.
- Unit Tests: Runs all unit tests using Vitest.
- E2E Tests: Installs Playwright browsers and runs end-to-end tests using Playwright.
- Lint: Performs linting and formatting checks using Biome.
Automated Dependency Management & Contributor Recognition ๐ค
This template includes some useful automation tools:
1. Dependabot Configuration ๐
Keeps dependencies up-to-date automatically with daily checks and update rules.
View Dependabot Config
2. Auto-merge for Dependabot PRs ๐
Can automatically merges patch updates from Dependabot to reduce manual work.
View Auto-merge Workflow
For the auto-merge workflow:
- Go to your repository's Settings > Actions > General.
- Under "Workflow permissions", select "Read and write permissions".
- Check "Allow GitHub Actions to create and approve pull requests".
- Save the changes.
- Optionally, create a Personal Access Token (PAT) with
reposcope and add it as a repository secret namedGITHUB_TOKENfor enhanced security.
3. Automated Contributors List ๐
Maintains an up-to-date list of contributors in your README.
View Contributors Workflow
๐ Getting Started
- Dependabot is active out-of-the-box. Review and adjust the config as needed.
- Ensure proper permissions for the auto-merge workflow.
- To read more about the contributors list, see the contributors-readme-action README.
Versioning and Publishing packages ๐ฆ
๐งโ๐ง WIP
For more information, refer to the official Changesets documentation.
Deployment ๐
This Turborepo is set up for easy deployment of its various applications.
Vercel Deployment ๐
The docs and web apps can be deployed to Vercel without any additional configuration. This allows for quick and easy deployment of your Next.js applications.
Test Deployments
You can view the test deployments for these apps:
apps/web: https://turborepo-shadcn-nextjs-web.vercel.app/apps/docs: https://turborepo-shadcn-nextjs-docs.vercel.app/
Storybook Deployment ๐
The apps/storybook is automatically deployed to GitHub Pages using a custom workflow.
- Workflow File: You can find the deployment workflow at
.github/workflows/storybook-deploy.yml - Deployment URL: The deployed Storybook can be accessed at https://gmickel.github.io/turborepo-shadcn-nextjs/