Project structure
The repository is a pnpm + Turborepo monorepo.
apps/web
Section titled “apps/web”Public marketing site built with Astro:
- Landing page, pricing, and blog
- Starlight documentation under
/docs/* - Tailwind CSS v4 via the Vite plugin
- Deployed to Vercel as a static site; rewrites
/app/*to the Next.js project
apps/app
Section titled “apps/app”Authenticated product dashboard built with Next.js:
- Mounted at
/appusingbasePath - Better Auth for sign-in, sign-up, and social providers
- Stripe billing, Supabase Storage uploads, and protected routes
- Deployed to Vercel as a separate project
Packages
Section titled “Packages”Shared logic lives in packages/:
| Package | Purpose |
|---|---|
@repo/config | Typed environment variables |
@repo/db | Drizzle schema and queries (Postgres) |
@repo/auth | Better Auth server + client |
@repo/email | Resend email helpers |
@repo/stripe | Checkout and webhooks |
@repo/storage | Supabase Storage signed uploads |
@repo/jobs | Vercel Cron handlers + optional BullMQ queues |
Infrastructure
Section titled “Infrastructure”- Supabase Postgres — required; stores users, subscriptions, and upload metadata
- Supabase Storage — required for uploads; create an
uploadsbucket in your project - Redis.io — optional; enables BullMQ queue workers when
REDIS_URLis set - Cron jobs — run via Vercel Cron in production; use
pnpm jobs:workerlocally