Setup Guide
Configure the required services and environment variables to run Extract Content.
BROWSERWorker SecretRequiredBrowser Rendering binding. Declared in wrangler.jsonc — no API token needed when using the binding.
"browser": { "binding": "BROWSER" }CLOUDFLARE_ACCOUNT_IDWorker SecretRequiredYour Cloudflare account ID. Found in the Cloudflare dashboard sidebar.
a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6NEXT_PUBLIC_CONVEX_URLFrontend EnvRequiredYour Convex deployment URL. Found in Convex dashboard after deploying.
https://your-project.convex.cloudCONVEX_DEPLOY_KEYWorker SecretOptionalConvex deploy key for CI/CD. Found in Convex dashboard > Settings.
prod:your-project|abc123...RESEND_API_KEYConvex EnvRequiredResend API key for sending login codes. Get from the Resend dashboard.
re_abc123...RESEND_FROM_EMAILConvex EnvRequiredVerified sender email address or domain in Resend.
noreply@yourdomain.comALLOW_DEV_OTPConvex EnvOptionalLocal development only. Returns the login code in the API response so you can sign in without email. Never set this in production.
trueEnable Cloudflare Browser Rendering
Go to Workers & Pages → Browser Rendering in your Cloudflare dashboard and enable the feature.
Create KV Namespaces
Create two KV namespaces: one for content caching and one for rate limiting. Add them to wrangler.jsonc.
Set up Convex
Run npx convex dev to initialize and deploy your Convex backend.
Configure Resend
Create a Resend account, verify your domain, and add the API key to your Convex environment variables.
Deploy
Run npm run deploy to build and deploy to Cloudflare Workers.
{
// ... other config
"kv_namespaces": [
{
"binding": "CONTENT_CACHE",
"id": "<your-cache-namespace-id>"
},
{
"binding": "RATE_LIMIT",
"id": "<your-rate-limit-namespace-id>"
}
]
}# Convex
NEXT_PUBLIC_CONVEX_URL=https://your-project.convex.cloud