Tech stack
Tools and libraries TurboJet uses — and why.
For a better understanding of the codebase, here are the tools TurboJet uses and why we chose them.
Turborepo
Turborepo manages the monorepo’s dependencies and scripts. A monorepo makes it easier to structure features and share code across apps and packages. You can add further apps later and reuse the existing packages.
Next.js
Next.js is the React framework for both apps/marketing and apps/docs. Marketing also hosts the Hono API through App Router route handlers at /api.
Prisma
Prisma is the ORM for @repo/database. We define the schema, generate TypeScript types, and migrate PostgreSQL. There is no Drizzle path in this kit. See Database.
Hono
Hono is the minimal web framework for @repo/api. Routers live under packages/api/src/modules/ and are mounted from marketing. The typed RPC client uses Hono’s hc helper — not oRPC. See API.
TanStack Query
TanStack Query manages server state on the frontend. Marketing mutations under apps/marketing/src/mutations/ call the typed Hono client. See Usage in the frontend.
Better Auth
Better Auth powers authentication in @repo/auth: magic link, email OTP, and OAuth (Google, GitHub, Apple). You keep control of the user model and session flow. See Authentication.
Tailwind CSS and shadcn/ui
Tailwind CSS styles the apps. Shared primitives live in @repo/ui (shadcn/ui + Radix). Prefer existing @repo/ui components over one-off installs.
Fumadocs
Fumadocs powers apps/docs — MDX content, full-text search, and locale files (*.mdx / *.id.mdx). Marketing legal copy uses React + next-intl, not Content Collections.
next-intl
next-intl handles marketing locales (en / id) with localePrefix: "always". Shared message catalogs live in @repo/i18n. See Internationalization.
Resend and React Email
Transactional mail uses React Email templates in @repo/mail and Resend for delivery. Preview with pnpm --filter @repo/mail dev. See Mail.
Payments
Billing adapters live in @repo/payments. The active provider is selected in packages/shared/src/features.ts — Mayar by default, plus Polar, Midtrans, and DOKU. See Payments.
S3-compatible storage
@repo/storage uses the AWS SDK against S3-compatible endpoints (Cloudflare R2 or AWS S3). See Storage.
Vitest and Playwright
Unit tests use Vitest (@repo/vitest-config). E2E guidance for Playwright is in E2E and Testing.