A deploy double: a reference Next.js (App Router) app that exists to be deployed and checked. It uses Postgres and runs its checks in-process, and serves a deploy report at /.well-known/deploy-report so anyone can verify a deploy of it from outside.
Read-only mirror. This app is developed in the
deploydoubles/doublesmonorepo underdoubles/nextjs-postgres/. Open issues and pull requests there.
Everything is declared in double.json:
| Runtime | Node 24+ |
| Services | Postgres |
| Processes | web: npm start (next start, listens on $PORT) |
| Environment | the database as a URL (DATABASE_URL) or the libpq variables (PGHOST, PGPORT, PGDATABASE, PGUSER, PGPASSWORD) |
| Build | npm ci, npm run build |
storage/ must be persistent and kept across releases: double.json lists it in persistent_paths. Set it up as the platform's persistent or shared storage — for example a persistent path in Strackt's Runtime settings, or shared_dirs in Deployer. The app needs a long-running server process and a writable storage/: serverless and read-only file systems are not supported, and report scheduler: fail with report_store_unwritable.
npx deploydoubles verify https://your-deploy.example --commit <deployed sha> --jsonThe report serves the full tier publicly (committed in deploy-report.config.json), so no token is needed. Exit 0 means every check passed on the commit you deployed.
From the monorepo root:
(cd verifier && npm ci && npm run build)
scripts/conformance.sh nextjs-postgresdocker-compose.yml builds from the monorepo root; docker/Dockerfile also builds on its own from this directory (docker build -f docker/Dockerfile .).
Jan Peter Wiersma.