Workspace Layout

Understand how the Raypx Turborepo is structured and what each package delivers.

Monorepo at a Glance

Raypx is a pnpm monorepo orchestrated by Turborepo. It contains 3 applications and 13 shared packages that work together to provide a complete full-stack development platform.

src/routes/ # File-based routing
src/components/ # React components
public/ # Static assets
docs/ # Fumadocs documentation site
server/ # Server utilities and workers
packages/ # 14 shared packages (see below)
tooling/ # Biome config, TypeScript configs
turbo.json # Turborepo build pipeline

All packages use the @raypx/* namespace and are consumed as TypeScript source (no build step for packages, only apps).

Applications

AppDescriptionPortTech
webMain TanStack Start app with auth, UI, and API3000TanStack Start, React 19
docsDocumentation site powered by Fumadocs3001Fumadocs, Next.js
serverBackground workers and server utilities-Node.js

Packages (13 Total)

Core Infrastructure

PackageDescriptionKey Features
@raypx/authAuthentication system powered by Better AuthOAuth, Magic Link, Email OTP, 2FA ready
@raypx/dbDatabase layer with Drizzle ORMPostgreSQL, migrations, Neon adapter
@raypx/trpcType-safe API layertRPC v11, procedures, middleware
@raypx/redisCaching and session storageUpstash Redis, 18k line cache system
@raypx/envEnvironment variable validationZod schemas, type-safe env vars (137+)

UI & Frontend

PackageDescriptionKey Features
@raypx/uiComponent library60+ shadcn/ui components, Tailwind v4
@raypx/emailEmail templates with preview8 React Email templates, built-in preview server (port 3002)
@raypx/i18nInternationalization (WIP)⚠️ Work in progress, not fully implemented yet

Utilities & Validation

PackageDescriptionKey Features
@raypx/sharedShared utilitiesPure functions, constants, types

Development Tools

PackageDescriptionKey Features
@raypx/cliCommand-line toolsProject scaffolding, generators
@raypx/bundlerBuild utilitiesVite plugins, build configurations
@raypx/tsconfigTypeScript configsShared tsconfig presets

Integrations

PackageDescriptionKey Features
@raypx/analyticsAnalytics integrationsPostHog, GA4, Umami, Vercel

Package Dependencies

Packages can depend on each other, but follow these rules:

  • @raypx/shared has zero dependencies (pure utilities)
  • @raypx/ui only depends on shared (presentation logic only)
  • @raypx/auth depends on db, email, redis
  • @raypx/trpc depends on auth, db for protected procedures

Tooling & Configuration

Development Tools

  • Biome (biome.json) – Replaces ESLint + Prettier for linting and formatting
  • TypeScript (tooling/tsconfig/) – Shared configs with strict mode enabled
  • Turborepo (turbo.json) – Build orchestration and caching
  • Vitest (vitest.config.mts) – Unit testing framework
  • Lefthook (.lefthook.yml) – Git hooks for pre-commit checks

Build System

IMPORTANT: Only apps/ have build scripts. All packages/ are consumed as TypeScript source.

  • apps/web, apps/docs – Have build scripts (deployable)
  • packages/* – NO build scripts (consumed as TS source by apps)

This approach:

  • Eliminates double-compilation
  • Provides better type errors in development
  • Speeds up development server startup

Working with the Monorepo

Running Commands

# Workspace-level commands (all packages)
turbo dev                   # Start all apps (or pnpm dev for web only)
turbo build                 # Build all apps
turbo typecheck             # Check all TypeScript
turbo format                # Format all code
turbo test                  # Run all tests

# App-specific commands
turbo dev --filter=web      # Just web app
turbo dev --filter=docs     # Just docs
pnpm email-preview          # Email template preview (packages/email)

# Package-specific commands (still use pnpm for non-turbo tasks)
pnpm --filter @raypx/db run db:studio    # Drizzle Studio
pnpm --filter @raypx/db run db:migrate   # Run migrations
pnpm --filter @raypx/ui run shadcn add button  # Add UI component

# Turborepo filters (for cached tasks)
turbo build --filter=web              # Build web app only
turbo test --filter=...^web           # Test web and its dependencies
turbo build --filter=...^web          # Build web and its dependencies

Adding Dependencies

# Add to specific package
pnpm --filter web add react-query
pnpm --filter @raypx/ui add -D @types/node

# Add to workspace root (dev tools)
pnpm add -D -w typescript

# Use catalog dependencies (preferred)
# Edit pnpm-workspace.yaml catalog, then:
pnpm install

Catalog Dependencies

This project uses pnpm catalogs for centralized version management:

catalog:
  react19: ^19.2.0
  tailwindv4: ^4.1.17

Reference in package.json:

{
  "dependencies": {
    "react": "catalog:react19",
    "tailwindcss": "catalog:tailwindv4"
  }
}

Generated Files

  • apps/docs/source.generated.ts – Fumadocs metadata (auto-generated)
  • apps/web/.vinxi/ – TanStack Start build cache (gitignored)
  • .turbo/ – Turborepo cache (gitignored)

Do not edit generated files manually. They are recreated on build or dev server start.

Edit on GitHub

Last updated on