# Tech Stack

> The tech stack used in the Nuxt Starter Kit.

The starter kit uses modern technologies in a **Turborepo monorepo** structure:

## Core Technologies

- **Nuxt 4+** - The Vue.js framework for building web applications
- **Nuxt UI** - UI component library with beautiful pre-built components
- **Better-auth** - Modern authentication library with support for email/password and social login
- **Drizzle ORM** - TypeScript-first ORM with excellent developer experience
- **PostgreSQL** - Reliable, powerful relational database
- **Tailwind CSS** - Utility-first CSS framework
- **Turborepo** - High-performance build system for monorepos
- **pnpm** - Fast, disk space efficient package manager

## Architecture

The project uses a **monorepo structure** with:

- **Turborepo** for build orchestration
- **pnpm workspaces** for package management
- **Nuxt 4 layers** for modular application structure

All packages use a **centralized catalog** in `pnpm-workspace.yaml` for dependency management.

## Main Application

The main web app is located in `apps/web/` and extends multiple Nuxt layers from the `packages/` directory.

## Monorepo Scripts

Key commands (run from root):

```bash
pnpm dev:web        # Start web app dev server
pnpm build          # Build all packages
pnpm lint           # Lint all packages
pnpm lint:fix       # Auto-fix linting issues
pnpm typecheck      # TypeScript check
pnpm db:generate    # Generate DB migrations
pnpm db:migrate     # Apply DB migrations
pnpm db:studio      # Open Drizzle Studio
```

## Layer Structure

The application is organized into Nuxt layers in `packages/`:

- `layer-core` - Base layer with UI, i18n, SEO
- `layer-auth` - Authentication with better-auth
- `layer-emails` - Email templates and sending
- `layer-payment` - Polar.sh payment integration
- `layer-storage` - File storage handling
- `layer-testimonials` - Testimonials feature
- `layer-dashboard` - User dashboard
- `layer-waitlist` - Waitlist management
- `layer-blog` - Blog functionality
- `layer-docs` - Documentation

Layers are referenced by name (e.g., `'layer-auth'`), not by path, as they are workspace packages.
