Impulse AI Docs
Intern dokumentasjon
skipLink.label

Secrets Management

Alle secrets i Impulse AI administreres gjennom Doppler. Ingen .env-filer i produksjon — alt injiseres via Doppler.

┌─ doppler run ────────────> din terminal (lokal dev)
├─ DOPPLER_TOKEN_STG ──────> GitHub Actions (CI + staging)
Doppler ────────┤
(sentralt lager)├─ DOPPLER_TOKEN_PRD ──────> GitHub Actions (prod deploy)
├─ stg config ─────────────> Railway staging (via integrasjon)
├─ prd config ─────────────> Railway production (via integrasjon)
└─ prd config ─────────────> Vercel (via integrasjon)
ConfigMiljoeBrukes av
devLokal utviklingDin maskin via doppler run
stgStagingGitHub Actions (CI + staging deploy), Railway staging (via integrasjon)
prdProductionGitHub Actions (prod deploy + iOS release), Railway production (via integrasjon), Vercel (via integrasjon)

Lokal utvikling

heading.anchorLabel

Foerstegangoppsett

heading.anchorLabel
Terminal window
# 1. Installer Doppler CLI
brew install dopplerhq/cli/doppler
# 2. Logg inn
doppler login
# 3. Koble til prosjektet (doppler.yaml finnes i repo-roten)
doppler setup
Terminal window
# Start alt med secrets injisert:
doppler run -- pnpm dev
# Bare API-serveren:
doppler run -- pnpm --filter api dev

Komplett variabelreferanse

heading.anchorLabel
VariabelBeskrivelseMiljoer
SUPABASE_URLSupabase API URLdev, stg, prd
SUPABASE_SECRET_KEYSupabase service role keydev, stg, prd
NEXT_PUBLIC_SUPABASE_URLSupabase URL (klient-synlig)dev, stg, prd
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEYSupabase anon key (klient-synlig)dev, stg, prd
SUPABASE_PROJECT_REFProsjekt-referanse for CLIstg, prd
SUPABASE_ACCESS_TOKENSupabase CLI access tokenstg, prd
VariabelBeskrivelseMiljoer
ANTHROPIC_API_KEYAnthropic API-noekkel (Claude)dev, stg, prd
VOYAGE_API_KEYVoyage AI API-noekkel (embeddings)dev, stg, prd
AI_MODEL_FASTOverride: modell for raske operasjoner (default: claude-sonnet)dev (haiku for billigere lokal dev)
AI_MODEL_BALANCEDOverride: modell for balanserte operasjoner (default: claude-sonnet)Ikke i Doppler (bruker default)
AI_MODEL_QUALITYOverride: modell for kvalitetsoperasjoner (default: claude-sonnet)Ikke i Doppler (bruker default)

Infrastruktur

heading.anchorLabel
VariabelBeskrivelseMiljoer
REDIS_URLRedis connection stringdev, stg, prd
API_PORTAPI-serverport (default: 3001)dev
WEB_URLWeb-app URLdev, stg, prd
NEXT_PUBLIC_API_URLAPI URL (klient-synlig)dev, stg, prd
LOG_LEVELLoggnivaa (info/debug/warn)stg (info), prd (warn)
NODE_ENVNode environmentstg, prd (production)
RAILWAY_API_URLRailway intern API-URL (settes automatisk)stg, prd
TURBO_DISABLEDDeaktiver Turborepo caching i CIstg, prd
VariabelBeskrivelseMiljoer
SENTRY_DSNSentry DSN for API feilsporingstg, prd (delt DSN)

Apple Auth (Supabase GoTRUE)

heading.anchorLabel
VariabelBeskrivelseMiljoer
SUPABASE_AUTH_EXTERNAL_APPLE_CLIENT_IDBundle ID (com.digiteers.impulseai)dev
SUPABASE_AUTH_EXTERNAL_APPLE_SECRETApple client secret JWT (180d gyldighet)dev
APPLE_AUTH_KEY_P8Apple Sign-In .p8 privatnoekkel (brukes til a generere secret)prd
APPLE_AUTH_SECRET_EXPIRES_ATUtloepsdato for Apple auth secret (metadata)prd

APPLE_CLIENT_ID og APPLE_SECRET brukes kun av lokal Supabase via config.toml. Hosted Supabase (stg/prd) konfigureres i Supabase Dashboard → Authentication → Providers → Apple.

APPLE_AUTH_KEY_P8 lagres i Doppler prd slik at CI-workflows kan regenerere Apple-secreten automatisk. Se Apple Secret Rotation for detaljer.

In-App Purchases

heading.anchorLabel
VariabelBeskrivelseMiljoer
APPLE_APP_SHARED_SECRETApp Store shared secret (kvitteringsvalidering)stg, prd (delt)
GOOGLE_SERVICE_ACCOUNT_KEYGoogle Play service account (base64)prd
GOOGLE_PUBSUB_VERIFICATION_TOKENGoogle PubSub verificationprd

Auth og tilgang

heading.anchorLabel
VariabelBeskrivelseMiljoer
API_CLIENT_KEYKlient-autentisering for API (X-API-Key header)dev, stg, prd (unike per miljo)
HEALTH_SECRETBeskytter health check-endepunktdev, stg, prd
ADMIN_DASHBOARD_TOKENAdmin dashboard-tilgangdev, stg, prd (delt noekkel)
CONSOLE_ADMIN_TOKENConsole admin-autentisering (bearer token for /admin/* API)dev, stg, prd
CONSOLE_ALLOWED_EMAILSKommaseparert allowlist for console-innloggingstg, prd
DEV_API_TOKENAuth bypass-token for lokal testingdev
DOCS_PASSWORDKlient-side passord for docs-sidenstg, prd
DISABLE_CACHEDeaktiver Redis cachedev

iOS Signing og Release (kun CI, prd)

heading.anchorLabel
VariabelBeskrivelse
APPLE_IDApple Developer e-post (janfredrik@digiteers.no)
TEAM_ID10-tegn Apple Developer Team ID
ITC_TEAM_IDApp Store Connect team ID
MATCH_GIT_URLPrivat GitHub-repo for signing-sertifikater
MATCH_PASSWORDPassord for Match-kryptering av sertifikater
MATCH_GIT_BASIC_AUTHORIZATIONBase64-kodet git auth for match-repo
ASC_KEY_IDApp Store Connect API Key ID
ASC_ISSUER_IDApp Store Connect Issuer ID
ASC_PRIVATE_KEYApp Store Connect .p8 privatnoekkel

GitHub Actions-integrasjon

heading.anchorLabel

GitHub Actions henter secrets fra Doppler via dopplerhq/secrets-fetch-action:

- name: Fetch secrets
uses: dopplerhq/secrets-fetch-action@v1.3.0
with:
doppler-token: ${{ secrets.DOPPLER_TOKEN_STG }}
inject-env-vars: true

To GitHub Secrets er konfigurert:

GitHub SecretKobler tilBrukes av
DOPPLER_TOKEN_STGDoppler stg configci.yml, db-deploy (staging)
DOPPLER_TOKEN_PRDDoppler prd configdeploy-production.yml, ios-release.yml, db-deploy (prod)

Railway-integrasjon

heading.anchorLabel

Doppler syncer automatisk til Railway via offisiell integrasjon. Secrets oppdateres i Railway innen sekunder etter endring i Doppler.

Doppler configRailway-serviceRailway Environment
stgim-api (staging)Staging (api-stg.impulseai.app)
prdim-api (production)Production (api.impulseai.app)

Sett opp via Doppler Dashboard → Integrations → Railway → Add Sync.

Vercel-integrasjon

heading.anchorLabel

Doppler syncer automatisk til Vercel via offisiell integrasjon. Secrets oppdateres i Vercel innen sekunder etter endring i Doppler.

Doppler configVercel-prosjektVercel Environment
prdim-docsProduction

Sett opp flere Vercel-prosjekter via Doppler Dashboard → Integrations → Vercel → Add Sync.

Legge til en ny secret

heading.anchorLabel
  1. Gaa til Doppler Dashboard → prosjekt “im”
  2. Velg riktig config (dev, stg, eller prd)
  3. Klikk “Add Secret” → fyll inn navn og verdi
  4. Gjenta for alle configs der variabelen trengs

Lokalt: Restart doppler run -- pnpm dev CI: Automatisk tilgjengelig ved neste kjoering Railway: Trigger ny deploy

Naar en noekkel maa byttes (kompromittert, utloept, eller rutine):

  1. Generer ny noekkel hos tjenesteleverandoeren (Anthropic, Supabase, etc.)
  2. Oppdater i Doppler — alle miljoer: dev, stg, prd
  3. Verifiser lokaltdoppler run -- pnpm --filter api dev + test
  4. Trigger deploy — push til main (staging) + /deploy-prod (production)
  5. Verifiser i prod — sjekk Railway logs for feil
  6. Revoke gammel noekkel — foerst etter at ny noekkel er verifisert i prod

Rotasjonsrutiner per tjeneste

heading.anchorLabel
TjenesteRotasjonsfrekvensHvor genereres ny
Anthropic API KeyVed behovconsole.anthropic.com → API Keys
Voyage API KeyVed behovdash.voyageai.com
Supabase Secret KeyVed behovSupabase dashboard → Settings → API
Supabase Access TokenVed behovsupabase.com → Account → Access Tokens
ASC Private KeyAarligApp Store Connect → Integrations → API Keys
Apple Auth SecretHver 180. dagnode scripts/generate-apple-secret.js (krever .p8-fil)
Match PasswordAldri (med mindre kompromittert)Velg selv

GitHub Environments

heading.anchorLabel

For ekstra beskyttelse paa produksjons-deploys:

EnvironmentBeskyttelseBrukes av
stagingIngen (auto-godkjent)CI staging deploys
productionRequired reviewerProduksjons-deploys

Konfigurer i GitHub: Repo → Settings → Environments.