Handler: outbound.vercel_isr
Triggers Next.js ISR cache revalidation on a Vercel-hosted frontend. Equivalent to calling trigger_nextjs_revalidation() from services.revalidation_service, but driven by a declarative row.
Payload
row.config.default_paths / row.config.default_tags, then to built-in defaults (["/", "/archive"] and ["posts", "post-index"]).
Row configuration
Caller usage
Operator runbook
First-time setup
- Generate a shared secret (any random string). Store it on both sides:
- Poindexter:
poindexter settings set revalidate_secret '<paste>' --secret - Next.js
.env:REVALIDATE_SECRET=<same value>
- Poindexter:
- Ensure the Next.js app has a route at
/api/revalidatethat readsx-revalidate-secretand callsrevalidatePath()/revalidateTag()accordingly. - Enable the row:
- Test:
Changing the site URL
Rotating the secret
- Update both sides:
poindexter settings set revalidate_secret '<new>' --secretAND Next.js env. - Redeploy Next.js so it picks up the new env.
Disabling
OutboundWebhookError and log without blocking the publish — the post still lives in the DB, just stale on the cached edge until next SSG/ISR window.
Response contract
- 200 → success, returns
{"status_code": 200, "paths": [...], "tags": [...]} - Non-200 →
RuntimeErrorwith body (truncated)
Related
- Framework overview: Integrations
- Sibling handler:
outbound.apprise_notify - Legacy call site being migrated:
services.revalidation_service.trigger_nextjs_revalidation - GH-114 (cache_invalidation_backends — the eventual more-general table for SvelteKit/Nuxt/Cloudflare-purge destinations)