GEISH.NO/BLOGGEN/SUBDOMENER-UTEN-AA-MISTE-FORSTANDEN
14. mai 2026 · 2 min#tech

Subdomener uten å miste forstanden

Hvordan jeg satt opp geish.no med fem subdomener som peker på samme Next.js-app, uten å eksponere monorepo-strukturen.

Plan: ett hovedsite (geish.no), fem subdomener (bake.geish.no, hund.geish.no, osv.), én Next.js-app, én deploy. Hver subdomene rendrer sitt eget grensesnitt, men deler underliggende ting (auth, DB, design).

Det høres ut som et monorepo med fem packages. Det er det ikke. Det er én Next.js-app med Vercel rewrites.

Trikset

Vercel støtter at du putter en vercel.json på roten med en rewrites-blokk:

{
  "rewrites": [
    { "source": "/", "has": [{ "type": "host", "value": "bake.geish.no" }], "destination": "/_apps/bake" },
    { "source": "/:path*", "has": [{ "type": "host", "value": "bake.geish.no" }], "destination": "/_apps/bake/:path*" }
  ]
}

Da rendrer en request til bake.geish.no/oppskrifter faktisk /_apps/bake/oppskrifter internt — men URL-en brukeren ser er fortsatt bake.geish.no/oppskrifter. Du eksponerer ikke _apps/bake i URL-bar-en. App Router-strukturen får ligge under src/app/_apps/.

Hvorfor ikke en app per subdomene?

Den åpenbare løsningen er fem Next.js-apper, fem deployer, fem CI-pipelines. Jeg gikk gjennom argumentene:

  • Felles auth. Hvis jeg vil at en pålogget bruker på geish.no/stua også er pålogget på bake.geish.no, må jeg dele cookie/session. Med én app er det automatisk; med fem er det enten cross-domain-cookies eller en token-server.
  • Felles DB-skjema. Drizzle-skjema bor ett sted. Migrasjon kjører en gang.
  • Felles designsystem. Endrer jeg en token-verdi, oppdateres alle subdomener med samme deploy.

Mot fem-apper-løsningen taler at hvert site får isolert dependency-tree, kan deployes uavhengig, og krasjer ikke alle samtidig. For mitt scope — fem småprosjekter, én utvikler — er det negative ikke verdt det.

Det er ikke trivielt

Ting jeg snublet i:

  • next.config.ts må ikke ha noe som matcher rewrites på path-prefix. Hvis du har en redirects-regel som flytter /_apps/bake til noe, vil rewriten din ikke virke.
  • Image-optimization går mot hovedsite-domene (geish.no/_next/image?...). For bake.geish.no betyr det at bilder lastes fra en annen domene — Vercel håndterer det riktig hvis du peker images.domains korrekt.
  • Hvis du har en sitemap, må den genereres per host. bake.geish.no/sitemap.xml skal ikke vise lenker til geish.no-poster.

Konklusjon

Én app, fem subdomener, Vercel rewrites. Magisk om du forstår hvordan rewrites jobber under panseret, frustrerende om du tror du har en monorepo. Når jeg er ferdig med å sette opp dette og noen leser det her, har det forhåpentligvis spart en kveld eller to.