Deploy
GitPigeon is single-tenant: every blog deploys its own instance. All platforms share the same core; only the entry point changes.
Prerequisites
- A GitHub repository for comment data (can be separate from your blog repo)
- A Fine-grained PAT (see GitHub setup)
- Cloudflare Turnstile site key and secret (optional; setting both enables the captcha)
- A mail provider: Resend or MailPort (see Mail setup)
Vercel
- Import this repository
- Add every variable from Environment
- Set Framework Preset to Other, leave build and output settings empty
- After deploy, open
/api/health
Netlify
- Import this repository
netlify.tomlalready declarespublish = "public"and the functions directory- Add variables under Site settings → Environment variables
- Open
/api/health
Cloudflare Workers
- Run
npm run buildto producepublic/embed.jsandpublic/review.js - Deploy with
wrangler deploy;wrangler.tomlalready points at the assets directory - Use
wrangler secret putfor sensitive values - Open
https://<worker>.workers.dev/api/health
Cloudflare Pages
functions/api/[[path]].ts forwards /api/* to the shared router, and public/_routes.json makes only /api/* invoke functions while everything else is served statically.
- In the Cloudflare Dashboard → Workers & Pages → Create → Pages, connect this repository
- Set Build command to
npm run buildand Build output directory topublic - Add every variable from Environment under Settings → Environment variables
- Open
https://<project>.pages.dev/api/health
Notes:
- Pages requires a redeploy after changing environment variables
- If your blog also runs on Pages, make sure its worker routes do not conflict with this system's
/api/* - The Pages free tier has a daily function request limit; usually enough for a comment system
Local run (not recommended for production)
Local mode is for debugging and LAN use. It is not a recommended production setup: no TLS, no edge cache, a process that must stay resident, and no platform Git integration.
- Run
npm run build - Copy
.env.exampleto.envand fill it in - Run
npm run serve:local
The script bundles dev-server.mjs and starts a Node HTTP server on port 8787, overridable with PORT:
Local mode uses a Web Request / Response adapter, so behavior matches edge platforms, but it has no platform-level caching or auth. Use Vercel / Netlify / Workers / Pages in production.
Post-deploy checklist
statusisokgit.readableistruemail.configuredistruewhen moderation is onsameRepoWarningisnullwhen you use a separate repository
