Skip to content

Restructure landing into a turborepo (@btravstack/theme + VitePress website)#1

Merged
btravers merged 1 commit into
mainfrom
feat/vitepress-monorepo
Jun 27, 2026
Merged

Restructure landing into a turborepo (@btravstack/theme + VitePress website)#1
btravers merged 1 commit into
mainfrom
feat/vitepress-monorepo

Conversation

@btravers

Copy link
Copy Markdown
Contributor

Migrates the landing page from static index.html to a pnpm + turbo + changesets monorepo, so the website and the docs sites share one published theme.

Structure

  • packages/theme@btravstack/theme: VitePress theme wrapping DefaultTheme with the design tokens (beetroot brand, Montserrat/JetBrains Mono, light/dark surfaces, including the raised-specificity dark-mode fix). Built with tsdown, published to npm via changesets + OIDC Trusted Publishing.
  • apps/website — VitePress home-layout landing (hero + 3 package cards) consuming @btravstack/theme via workspace:*, deployed to GitHub Pages (base: "/").

CI

  • .github/workflows/release.yml — publishes @btravstack/theme.
  • .github/workflows/deploy-website.yml — builds + deploys the site to Pages.

Verified

Frozen install + turbo build of both packages; site renders with brand #E0589A/dark, #8E1A52/light, Montserrat, no console errors.

⚠️ Do not merge until prerequisites are done (or the live site breaks)

  1. Switch Pages → Source: GitHub Actions (currently "deploy from branch"). After this PR merges, the website deploys via Actions; before that, main still serves the static index.html.
  2. Create the @btravstack org/scope on npm + add a Trusted Publisher for @btravstack/theme → this repo, release.yml.
  3. Ensure repo secret RELEASE_PAT exists.

Follow-up (separate PRs, after the theme publishes)

Migrate the 3 docs sites from the jsDelivr @import to import Theme from "@btravstack/theme" + a @btravstack/theme dependency.

🤖 Generated with Claude Code

…ebsite

Replace the static index.html landing with a pnpm + turbo + changesets
monorepo so every btravstack site shares one theme:

- packages/theme  @btravstack/theme — VitePress theme wrapping DefaultTheme
  with the design tokens (beetroot brand, Montserrat/JetBrains Mono,
  light/dark surfaces, incl. the raised-specificity dark-mode fix). Built
  with tsdown, published to npm via changesets + OIDC Trusted Publishing.
- apps/website    VitePress home-layout landing (hero + 3 package cards)
  consuming @btravstack/theme via workspace:*, deployed to GitHub Pages.

CI: .github/workflows/release.yml (publish theme) and deploy-website.yml
(build + deploy site, base /). Verified: frozen install + turbo build of
both packages, and the site renders with brand #E0589A/dark and
#8E1A52/light, Montserrat, no console errors.

Removes the old static index.html, assets/ and theme/ (the @v1.0.0 tag
still serves the docs sites until they migrate to @btravstack/theme).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@btravers btravers marked this pull request as ready for review June 27, 2026 14:08
Copilot AI review requested due to automatic review settings June 27, 2026 14:08
@btravers btravers merged commit 963c197 into main Jun 27, 2026
1 check passed
@btravers btravers deleted the feat/vitepress-monorepo branch June 27, 2026 14:08

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Restructures the repo from a single static index.html landing page into a pnpm + Turborepo monorepo that contains a publishable shared VitePress theme (@btravstack/theme) and a VitePress-based website app deployed to GitHub Pages.

Changes:

  • Introduces Turborepo + pnpm workspace setup (root package.json, pnpm-workspace.yaml, turbo.json, lockfile).
  • Adds packages/theme as a buildable/publishable VitePress theme package (tokens/fonts/styles + tsdown build).
  • Adds apps/website VitePress home-layout landing site and GitHub Actions workflows for theme release + Pages deploy.

Reviewed changes

Copilot reviewed 20 out of 37 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
turbo.json Defines turbo task pipeline for build/dev/preview across apps/packages.
theme/theme.css Removes legacy static-site CSS entrypoint (migrated to package).
theme/README.md Removes legacy design-system docs (replaced by monorepo structure/docs).
theme/preview.html Removes legacy token preview HTML (theme now packaged).
README.md Adds monorepo-level documentation and dev/release instructions.
pnpm-workspace.yaml Defines workspace packages and dependency catalogs.
pnpm-lock.yaml Adds frozen dependency lock for the monorepo.
packages/theme/tsdown.config.ts Adds tsdown build configuration for the theme package.
packages/theme/tsconfig.json Adds strict TS config for the theme package.
packages/theme/src/tokens.css Adds design tokens as the single source of truth.
packages/theme/src/style.css Maps tokens onto VitePress theme variables + imports fonts/tokens.
packages/theme/src/index.ts Exports a VitePress theme extending DefaultTheme and pulls in CSS.
packages/theme/src/fonts.css Adds Google Fonts import for Montserrat + JetBrains Mono.
packages/theme/package.json Defines publishable @btravstack/theme package metadata/exports/scripts.
package.json Adds root scripts/engines/packageManager for pnpm+turbo+changesets.
index.html Removes the legacy static landing page HTML.
apps/website/public/logos/unthrown-light.svg Adds website assets for light-mode package icon.
apps/website/public/logos/unthrown-dark.svg Adds website assets for dark-mode package icon.
apps/website/public/logos/temporal-contract-light.svg Adds website assets for light-mode package icon.
apps/website/public/logos/temporal-contract-dark.svg Adds website assets for dark-mode package icon.
apps/website/public/logos/btravstack-light.svg Adds website assets for light-mode brand mark.
apps/website/public/logos/btravstack-dark.svg Adds website assets for dark-mode brand mark.
apps/website/public/logos/amqp-contract-light.svg Adds website assets for light-mode package icon.
apps/website/public/logos/amqp-contract-dark.svg Adds website assets for dark-mode package icon.
apps/website/public/favicon.svg Adds SVG favicon for the website app.
apps/website/public/apple-touch-icon.png Adds Apple touch icon for the website app.
apps/website/package.json Defines the VitePress website app and its workspace dependency on the theme.
apps/website/index.md Implements the landing page using VitePress home layout frontmatter.
apps/website/.vitepress/theme/index.ts Wires the website to consume @btravstack/theme.
apps/website/.vitepress/config.ts Adds VitePress site config, head metadata, nav/footer/search.
.nojekyll Ensures Pages doesn’t apply Jekyll processing to the output.
.gitignore Adds monorepo-appropriate ignores for node/build outputs.
.github/workflows/release.yml Adds changesets-based npm publish workflow for @btravstack/theme.
.github/workflows/deploy-website.yml Adds GitHub Pages build/deploy workflow for apps/website.
.changeset/config.json Adds changesets configuration and ignores the website package.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +9 to +14
paths:
- "apps/website/**"
- "packages/theme/**"
- "pnpm-lock.yaml"
- "pnpm-workspace.yaml"
- ".github/workflows/deploy-website.yml"
Comment on lines +33 to +36
- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm
Comment on lines +30 to +33
- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm
Comment on lines +34 to +36
# npm Trusted Publishing (OIDC) requires npm >= 11.5.1
- run: npm install -g npm@latest
- run: pnpm install --frozen-lockfile
themeConfig: {
logo: { light: "/logos/btravstack-light.svg", dark: "/logos/btravstack-dark.svg" },
nav: [
{ text: "Packages", link: "/#packages" },
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants