diff --git a/README.md b/README.md index 2ffd66a..b3f6cf1 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,198 @@ -
+# TurboStarter Kit -# TurboStarter +Full-stack monorepo built with Next.js, Expo, Turborepo, and pnpm workspaces. -Ship your startup everywhere. In minutes. +## Prerequisites -[📚 Documentation](https://www.turbostarter.dev/docs/web)     [💬 Discord](https://discord.gg/KjpK2uk3JP)     [🚀 Demo](https://www.demo.turbostarter.dev) +- [Node.js](https://nodejs.org/) >= 22.17.0 +- [pnpm](https://pnpm.io/) 10.25.0 +- [Docker](https://www.docker.com/) and Docker Compose -
+## Project Structure + +``` +apps/ + web/ # Next.js web application (port 3000) + mobile/ # Expo React Native app +packages/ + ai/ # AI provider integrations + analytics/ # Analytics providers + api/ # tRPC API layer + auth/ # Authentication (BetterAuth) + billing/ # Payment providers (Stripe, Lemon Squeezy, Polar) + cms/ # Content management + db/ # Database (Drizzle ORM + PostgreSQL) + email/ # Email providers (Resend, Sendgrid, etc.) + i18n/ # Internationalization + monitoring/# Monitoring (Sentry, PostHog) + shared/ # Shared utilities and config + storage/ # File storage (S3/MinIO) + ui/ # Shared UI components +``` + +## Quick Start + +### 1. Install dependencies + +```bash +pnpm install +``` + +### 2. Configure environment variables + +Copy the example env files: + +```bash +# Root env (database, product name, URL) +cp .env.example .env + +# Web app env (auth, billing, email, storage, AI, etc.) +cp apps/web/.env.example apps/web/.env.local +``` + +**Root `.env`** — minimum required variables: + +```env +DATABASE_URL="postgresql://turbostarter:turbostarter@localhost:5440/core" +PRODUCT_NAME="TurboStarter" +URL="http://localhost:3000" +DEFAULT_LOCALE="en" +``` + +> **Note:** The database port is `5440` (mapped from Docker), not the default `5432`. + +**`apps/web/.env.local`** — key variables to configure: + +| Variable | Description | Required | +|---|---|---| +| `BETTER_AUTH_SECRET` | Auth token signing secret | Yes | +| `NEXT_PUBLIC_AUTH_PASSWORD` | Enable password auth (`true`/`false`) | Yes | +| `NEXT_PUBLIC_URL` | Public URL of the web app | Yes | +| `STRIPE_SECRET_KEY` | Stripe key (if using Stripe billing) | Optional | +| `RESEND_API_KEY` | Resend key (if using Resend email) | Optional | +| `S3_*` | S3/MinIO storage credentials | Optional | +| `OPENAI_API_KEY` | OpenAI key (if using AI features) | Optional | + +For local MinIO storage, use these S3 settings in `apps/web/.env.local`: + +```env +S3_REGION="us-east-1" +S3_BUCKET="uploads" +S3_ENDPOINT="http://localhost:9000" +S3_ACCESS_KEY_ID="minioadmin" +S3_SECRET_ACCESS_KEY="minioadmin" +``` + +See `apps/web/.env.example` for the full list of available variables. + +### 3. Start infrastructure (Docker Compose) + +Start PostgreSQL and MinIO: + +```bash +docker compose up -d +``` + +Wait for services to be healthy: + +```bash +docker compose up -d --wait +``` + +Or use the built-in shortcut: + +```bash +pnpm services:start +``` + +### 4. Set up the database + +Run migrations and seed data: + +```bash +pnpm services:setup +``` + +This runs `docker compose up -d --wait`, then applies database migrations and seeds initial data. + +### 5. Start development + +```bash +pnpm dev +``` + +The web app will be available at **http://localhost:3000**. + +## Docker Commands + +### Infrastructure Services + +| Command | Description | +|---|---| +| `docker compose up -d` | Start all services (PostgreSQL + MinIO) | +| `docker compose down` | Stop all services | +| `docker compose logs -f` | Follow service logs | +| `docker compose ps` | Show service status | + +Or use the pnpm shortcuts: + +| Command | Description | +|---|---| +| `pnpm services:start` | Start Docker services and wait for healthy | +| `pnpm services:stop` | Stop Docker services | +| `pnpm services:logs` | Follow Docker service logs | +| `pnpm services:status` | Show Docker service status | +| `pnpm services:setup` | Start services + run DB migrations + seed | + +### Service URLs + +| Service | URL | Credentials | +|---|---|---| +| Web App | http://localhost:3000 | — | +| PostgreSQL | localhost:5440 | `turbostarter` / `turbostarter` | +| MinIO API | http://localhost:9000 | `minioadmin` / `minioadmin` | +| MinIO Console | http://localhost:9001 | `minioadmin` / `minioadmin` | + +### Production Build (Docker) + +Build and run the web app as a production Docker image: + +```bash +docker build -t turbostarter-web . +docker run -p 3000:3000 --env-file apps/web/.env.local turbostarter-web +``` + +## Development Commands + +| Command | Description | +|---|---| +| `pnpm dev` | Start all apps in development mode | +| `pnpm build` | Build all packages and apps | +| `pnpm lint` | Run ESLint across the monorepo | +| `pnpm format` | Check formatting with Prettier | +| `pnpm format:fix` | Fix formatting | +| `pnpm typecheck` | Run TypeScript type checking | +| `pnpm test` | Run tests | +| `pnpm auth:seed` | Seed auth dev accounts | + +### Database Commands + +Run from the root (or within `packages/db`): + +| Command | Description | +|---|---| +| `pnpm --filter @turbostarter/db db:migrate` | Run database migrations | +| `pnpm --filter @turbostarter/db db:push` | Push schema changes | +| `pnpm --filter @turbostarter/db db:generate` | Generate new migration | +| `pnpm --filter @turbostarter/db db:studio` | Open Drizzle Studio | +| `pnpm --filter @turbostarter/db db:reset` | Reset database | +| `pnpm --filter @turbostarter/db db:seed` | Seed database | + +## Dev Login Credentials + +After running `pnpm services:setup` or `pnpm auth:seed`: + +| Role | Email | Password | +|---|---|---| +| User | `me+user@turbostarter.dev` | `Pa$$w0rd` | +| Admin | `me+admin@turbostarter.dev` | `Pa$$w0rd` |