Hoppa till innehållet

Webb, API och bakgrundsjobb, i ett repo.

En pnpm-monorepo för en SaaS: webbapp, API och bakgrundsjobb som tre appar, och ett delat paket med databasschemat som alla tre använder.

Öppna på GitHubMIT-licens · fri att använda

Använd den när

Du bygger en SaaS som behöver ett separat API och bakgrundsjobb bredvid webbappen redan från dag ett, med inloggning via Clerk.

Räcker det med en Next.js-app och jobb? template-next-supabase i stället →

Det här ingår

Färdigt från start.

  • Webbappen

    Clerk-inloggning, en skyddad panel, sidor för integritet och villkor, mörkt läge och säkerhetsrubriker.

  • API:t

    Express 5 med Clerk, begränsning av anrop i Redis, Zod-validering och ett exempel på en komplett resurs.

  • Användarsynk

    En Clerk-webhook som för över användare till databasen.

  • Bakgrundsjobb

    Inngest med ett exempel i tre steg och ett dagligt städjobb.

  • Delat schema

    Ett paket med Drizzle-schema, migreringar och testdata som alla appar importerar.

  • Docker

    En Dockerfile i flera steg för varje app.

Kom igång

pnpm install
cp .env.example .env
pnpm --filter @ketryon/database build
pnpm --filter @ketryon/database db:generate
pnpm --filter @ketryon/database db:migrate
pnpm --filter web dev
pnpm --filter backend dev
pnpm --filter worker dev

Struktur

apps/
  web/        Next.js 15 frontend      (port 3000)
  backend/    Express 5 API server     (port 3001)
  worker/     Inngest background jobs  (port 3005)
packages/
  database/   Drizzle schema, types and db client

Miljövariabler

  • DATABASE_URL
  • REDIS_URL
  • CLERK_SECRET_KEY
  • NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY
  • CORS_ORIGINS
  • NEXT_PUBLIC_API_URL

Stripe-, S3- och OpenAI-variablerna i .env.example är platshållare för sådant du kopplar in själv.

Bra att veta

  • Signaturkontrollen för Clerk- och Stripe-webhooks är TODO i koden.
  • Databaspaketet byggs en gång innan API:t startar.
  • Lint saknar konfiguration i API:t och ett paket i webbappen — det fanns redan före uppdateringen.

Byggd med

  • Next.js 15
  • React 19
  • Clerk
  • Express 5
  • Inngest
  • PostgreSQL
  • Drizzle
  • Redis
  • Zod

Låt oss bygga
nästa sak.

Du pratar med mig, inte med en säljare. Första samtalet är gratis.

— Kenny

psst, det tar 15 min

Skriver du svarar jag samma vardag.