For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /nl/docs/web/provider-keys.md (or send Accept: text/markdown).
De resterende providersleutels verzamelen
Korte walkthroughs voor de diensten die overblijven: AI-providers, Trigger.dev, S3-opslag, Sentry of PostHog, Turnstile en uw domein.
Hoe deze pagina te gebruiken
Elke sectie hieronder is één complete setup-walkthrough: maak het account, vind de sleutel, stel de env-namen in, verifieer. Neem alleen de secties voor diensten die uw product shippt — een site zonder AI-features heeft de eerste nooit nodig, en de kit blijft draaien met elke sectie hier overgeslagen.
Dezelfde geheimregels als overal: API-sleutels en webhookgeheimen blijven server-only, alleen waarden met het voorvoegsel NEXT_PUBLIC_/EXPO_PUBLIC_ mogen de client bereiken, productiegeheimen leven in de geheimopslag van de host, en de devserver leest env pas opnieuw bij een herstart.
AI-providersleutels
De AI_PROVIDER van de kit accepteert openai, anthropic, openai-compatible en openrouter — plus fake, de standaard lokale stand-in. Kies er een; de providersleutel is het enige benodigde account, want model-id's en prijzen komen uit de databasecatalogus van de kit, niet uit env-variabelen.
OpenAI: platform.openai.com → API keys → Create new secret key → kopieer sk-… → OPENAI_API_KEY. Anthropic: console.anthropic.com → API Keys → Create Key → sk-ant-… → ANTHROPIC_API_KEY. Beiden factureren per token — een paar dollar krediet dekt ontwikkeling.
OpenRouter routeert elk catalogusmodel via één sleutel: openrouter.ai → Keys → Create Key → sk-or-… → AI_PROVIDER=openrouter plus OPENROUTER_API_KEY; optionele OPENROUTER_APP_NAME/OPENROUTER_SITE_URL sturen attributieheaders. openai-compatible dekt elk OpenAI-vormig endpoint: OPENAI_COMPATIBLE_API_KEY plus OPENAI_COMPATIBLE_BASE_URL.
Verifieer: herstart, voer één AI-taak uit en verwacht een echt modelantwoord in plaats van de deterministische nep. Een opstartfout die de sleutel noemt betekent dat de providervlag aan staat zonder zijn sleutel. Een echt antwoord heeft ook JOB_PROVIDER=trigger uit de Trigger.dev-sectie hieronder nodig plus één ingeschakeld model in de catalogus van de kit — AI instellen behandelt die setup.
# apps/web/.env.local — pick ONE provider
AI_PROVIDER=openai
OPENAI_API_KEY=sk-…
# or AI_PROVIDER=anthropic
# ANTHROPIC_API_KEY=sk-ant-…
# or AI_PROVIDER=openrouter
# OPENROUTER_API_KEY=sk-or-…
# or AI_PROVIDER=openai-compatible
# OPENAI_COMPATIBLE_API_KEY=…
# OPENAI_COMPATIBLE_BASE_URL=https://your-endpoint/v1Trigger.dev
Sla over tenzij het product echte achtergrondtaakruns nodig heeft — JOB_PROVIDER=local plaatst jobs in de wachtrij in het geheugen zonder ze uit te voeren, wat goed is voor ontwikkeling.
1. Open app.trigger.dev → meld u aan → maak een project.
2. Kopieer twee waarden: de project-ref proj_… uit de settings van het project of de dashboard-URL → TRIGGER_PROJECT_REF, en de geheime sleutel van de API keys-pagina van het project (tr_dev_… voor de dev-omgeving, tr_prod_… voor productie) → TRIGGER_SECRET_KEY. Beiden blijven server-only.
3. De taken van de kit leven al in apps/web/trigger en apps/web/trigger.config.ts leest TRIGGER_PROJECT_REF. Voer vanuit apps/web npx trigger.dev@latest dev uit — het registreert de taken bij uw project en voert ze lokaal uit tegen de dev-sleutel.
Verifieer: het dev-commando logt de geregistreerde taken; zet er een in de wachtrij in de app en zie het uitvoeren in de Runs-lijst van het dashboard. Gedeployde omgevingen voeren corepack pnpm --filter @supastack/web trigger:deploy uit om de taakset te publiceren.
# apps/web/.env.local
JOB_PROVIDER=trigger
TRIGGER_PROJECT_REF=proj_…
TRIGGER_SECRET_KEY=tr_dev_… # tr_prod_… in production
# run the worker alongside the app, from apps/web:
cd apps/web
npx trigger.dev@latest devS3-compatibele opslag (Cloudflare R2)
Sla over tenzij het product bestanden opslaat — STORAGE_PROVIDER=memory houdt uploads in-proces voor ontwikkeling.
Elke S3-compatibele bucket werkt; Cloudflare R2 is de gratis-tier-vriendelijke keuze. 1. Open dash.cloudflare.com → R2 Object Storage → Create bucket, geef het een naam en behoud de standaard locatiehint.
2. Open terug op het R2-overzicht Manage R2 API Tokens → Create API token → permissie Object Read & Write, gescoped naar die bucket → Create. Kopieer de Access Key ID, de Secret Access Key en het getoonde S3-endpoint — https://<account-id>.r2.cloudflarestorage.com.
3. Stel de env-namen hieronder in. STORAGE_REGION=auto is de R2-conventie — de kit gebruikt standaard us-east-1, wat R2 ook accepteert. STORAGE_FORCE_PATH_STYLE staat standaard al aan voor custom endpoints, wat R2 wil. Publieke bestanden serveren heeft bovendien STORAGE_PUBLIC_BASE_URL of CDN-bedrading nodig; private bestanden hebben niets meer nodig.
Verifieer: herstart en upload via de app — het object verschijnt in de R2-bucketbrowser. Een signature- of 403-fout betekent dat het token geen object read/write op die bucket heeft; maak een vers token dat correct gescoped is.
# apps/web/.env.local
STORAGE_PROVIDER=s3
STORAGE_ENDPOINT=https://<account-id>.r2.cloudflarestorage.com
STORAGE_REGION=auto
STORAGE_BUCKET=your-bucket
STORAGE_ACCESS_KEY_ID=… # server-only
STORAGE_SECRET_ACCESS_KEY=… # server-only
# STORAGE_PUBLIC_BASE_URL= # optional public-URL baseSentry of PostHog (optioneel)
Volledig optioneel: elke observability-waarde is standaard unset en de kit draait prima zonder — voeg dit toe wanneer u foutrapporten en analytics in productie wilt.
Sentry voor fouten: sentry.io → maak een project → kies het Next.js-platform → het setupscherm toont de DSN https://…@….ingest.sentry.io/… → SENTRY_DSN. Exceptions bereiken dan Sentry getagd met correlation-id's; de gratis tier is genoeg om te beginnen.
PostHog voor productanalytics in plaats daarvan: posthog.com → maak een project → kopieer de project-API-sleutel phc_… → NEXT_PUBLIC_POSTHOG_KEY plus NEXT_PUBLIC_POSTHOG_HOST (https://us.i.posthog.com, of uw EU-host). Die twee zijn by design publieke browserwaarden; SENTRY_DSN blijft server-side. ALERT_WEBHOOK_URL post optioneel faal-meldingen naar een Slack-compatibel endpoint.
Verifieer: herstart, veroorzaak een testexception (of speel Sentry's sample-event af) en bevestig dat het in de Issues-lijst van het project landt.
# apps/web/.env.local — all optional
SENTRY_DSN=https://…@….ingest.sentry.io/…
NEXT_PUBLIC_POSTHOG_KEY=phc_…
NEXT_PUBLIC_POSTHOG_HOST=https://us.i.posthog.com
# ALERT_WEBHOOK_URL=https://hooks.slack.com/services/…Cloudflare Turnstile
Botbescherming voor de publieke formulieren en credential-endpoints — CAPTCHA_PROVIDER=off is standaard, dus voeg het toe voordat u registratie voor vreemden opent. Gratis.
1. Open dash.cloudflare.com → Turnstile → Add widget → geef het een naam en vermeld de hostnamen: localhost voor ontwikkeling plus uw echte domein → Create.
2. Kopieer beide waarden: de Site Key — publiek by design, hij rendert in het widget → NEXT_PUBLIC_TURNSTILE_SITE_KEY — en de Secret Key, die de server gebruikt om te verifiëren → TURNSTILE_SECRET_KEY.
3. CAPTCHA_PROVIDER=turnstile schakelt het in; het opstarten faalt met de naam van welke sleutel ook ontbreekt. De captcha-gids somt exact op welke oppervlakken het widget beschermt.
Verifieer: open /auth of het contactformulier — het widget rendert; inzendingen zonder opgeloste uitdaging worden geweigerd. Als het widget nooit laadt, staat de hostnaam die u bekijkt niet op de lijst van het widget.
# apps/web/.env.local
CAPTCHA_PROVIDER=turnstile
NEXT_PUBLIC_TURNSTILE_SITE_KEY=0x… # public by design
TURNSTILE_SECRET_KEY=0x… # server-onlyEen eigen domein
Eén aankoop bij elke registrar — Cloudflare Registrar, Porkbun, Namecheap werken allemaal. Niets hiervan kopieert naar env; het domein verschijnt in de Services ID, Resend-DNS, Turnstile-hostnamen en OAuth-return-URL's die u onderweg heeft geconfigureerd.
Twee manieren om het naar de app te wijzen: voor Cloud Run gebruikt u de domeinmapping in de deploymentgids — een paar consoleklikken plus de DNS-records die Google opsomt. Of verplaats DNS naar Cloudflare-nameservers (de registrar wisselt twee records) — optioneel, maar ook de nette manier om R2-publieke buckets en Turnstile-hostnamen op één plek te beheren.
Wil je verdergaan met de configuratie? Lees Database instellen.