Deadman Vault is designed to deploy to Vercel with minimal configuration. The repository ships with aDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/natureloved/DeadMan-Vault/llms.txt
Use this file to discover all available pages before exploring further.
vercel.json that declares the keeper cron schedule, the Next.js App Router handles all API routes, and Supabase provides the managed PostgreSQL backend — there is no separate server process to manage. Fork the repository, import it into Vercel, add your environment variables, and your self-hosted instance is live within minutes.
Deployment Steps
Fork or clone the repository
Fork DeadMan-Vault to your own GitHub account, or clone it and push to a new repository under your account. Vercel needs access to the repository to trigger automatic deployments on every push.
Import the project in Vercel
Go to vercel.com/new and click Import Git Repository. Select the forked repository from your GitHub account and click Import.Alternatively, deploy directly from your local clone using the Vercel CLI:
Configure environment variables
In the Vercel project settings under Settings → Environment Variables, add every variable from the Environment Variables reference. The full set required for a production deployment is:
Set
NEXT_PUBLIC_APP_URL to your production Vercel URL (e.g. https://vault.yourdomain.com or https://deadman-vault.vercel.app). Beneficiary claim links and owner warning emails are built from this value — incorrect URLs will result in broken email links.Set the build configuration
Vercel should auto-detect the correct settings from the repository, but verify the following in the Configure Project screen:
- Root Directory:
.(repository root — do not set a subdirectory) - Framework Preset:
Next.js - Build Command:
next build(default) - Output Directory:
.next(default)
Deploy
Click Deploy. Vercel will install dependencies, run
next build, and deploy the application. The initial build typically takes 60–90 seconds.Once the deployment succeeds, your Deadman Vault instance is accessible at the Vercel-assigned URL.Verify the keeper cron is registered
Navigate to your Vercel project dashboard and open the Cron Jobs tab (under the project’s Settings or the deployment’s function list). You should see one cron job registered:
Vercel reads this configuration automatically from
| Path | Schedule |
|---|---|
/api/keeper | 0 0 * * * (daily at midnight UTC) |
vercel.json in the repository root. No manual dashboard setup is required.Run the database migrations
If you haven’t already applied the Supabase migrations, do so now. From your local clone with See the Database Setup guide for the full migration walkthrough.
SUPABASE_SERVICE_ROLE_KEY set in your environment:Smoke-test the deployment
Verify end-to-end functionality by hitting the keeper endpoint directly:A healthy response looks like:
checked: 0 is expected on a fresh deployment with no vaults yet. The important signals are: no error field, a valid currentBlock number (confirming connectivity to the Hiro API), and a 200 HTTP status.Vercel Plan Considerations
Hobby Plan
Supports cron jobs and serverless functions. Function execution is capped at 10 seconds on Hobby, which may be insufficient for sweeps settling multiple vaults simultaneously. The
/api/keeper route requests maxDuration = 60. Upgrade to Pro if you expect more than a handful of concurrent active vaults.Pro Plan
Recommended for production. Supports function durations up to 60 seconds (matching the keeper’s
maxDuration), higher cron invocation frequency (down to per-minute), and no concurrency restrictions on serverless functions.External Cron Alternative
After Deployment Checklist
Run through this checklist after your first successful deployment to confirm every subsystem is operational:Environment variables are complete
Verify all 14 environment variables are set in Vercel project settings. Missing
KEEPER_ENCRYPTION_KEY will cause vault creation to throw; missing RESEND_API_KEY will silently drop all notification emails.Database migrations applied
Confirm all four tables (
vaults, beneficiaries, heartbeats, notifications) exist in your Supabase project with RLS enabled and no policies.Keeper endpoint responds
curl the /api/keeper endpoint with your CRON_SECRET and confirm a 200 response with a valid currentBlock.Email delivery works
Send a test email through Resend’s dashboard or create a vault with your own email address, then manually trigger a warning by advancing the vault’s deadline in the Supabase Table Editor and invoking the keeper endpoint.
Cron job is registered in Vercel
Open the Cron Jobs tab in your Vercel project and confirm
/api/keeper appears with the expected schedule from vercel.json.