Skip to main content

Documentation 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.

Deadman Vault is designed to deploy to Vercel with minimal configuration. The repository ships with a 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

1

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.
git clone https://github.com/natureloved/DeadMan-Vault.git
cd DeadMan-Vault
2

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:
npx vercel deploy
3

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:
NEXT_PUBLIC_FLOWVAULT_NETWORK
NEXT_PUBLIC_FLOWVAULT_CONTRACT_ADDRESS
NEXT_PUBLIC_FLOWVAULT_CONTRACT_NAME
NEXT_PUBLIC_FLOWVAULT_TOKEN_CONTRACT_ADDRESS
NEXT_PUBLIC_FLOWVAULT_TOKEN_CONTRACT_NAME
NEXT_PUBLIC_SUPABASE_URL
NEXT_PUBLIC_SUPABASE_ANON_KEY
SUPABASE_SERVICE_ROLE_KEY
NEXT_PUBLIC_APP_URL
RESEND_API_KEY
RESEND_FROM_EMAIL
CRON_SECRET
KEEPER_ENCRYPTION_KEY
KEEPER_FUNDING_PRIVATE_KEY
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.
4

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)
No changes to these defaults should be required.
5

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.
6

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:
PathSchedule
/api/keeper0 0 * * * (daily at midnight UTC)
Vercel reads this configuration automatically from vercel.json in the repository root. No manual dashboard setup is required.
7

Run the database migrations

If you haven’t already applied the Supabase migrations, do so now. From your local clone with SUPABASE_SERVICE_ROLE_KEY set in your environment:
supabase link --project-ref <your-project-ref>
npm run db:migrate
See the Database Setup guide for the full migration walkthrough.
8

Smoke-test the deployment

Verify end-to-end functionality by hitting the keeper endpoint directly:
curl -X GET "https://your-deployment.vercel.app/api/keeper" \
  -H "Authorization: Bearer <your-cron-secret>"
A healthy response looks like:
{
  "checked": 0,
  "currentBlock": 182340,
  "actions": [],
  "timestamp": "2025-01-15T00:00:04.123Z"
}
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

The keeper cron requires Vercel’s built-in cron feature. If you deploy Deadman Vault to a static hosting provider (Netlify, Cloudflare Pages, GitHub Pages) or any platform that does not support server-side function invocations, the /api/keeper endpoint will not execute on a schedule and vaults will never automatically advance or settle. In that case, you must replace the Vercel cron with an external scheduler — for example:
  • GitHub Actions scheduled workflow calling the /api/keeper endpoint
  • Railway cron service pointing at your deployment’s keeper URL
  • EasyCron or any HTTP cron provider sending an authenticated GET to /api/keeper

After Deployment Checklist

Run through this checklist after your first successful deployment to confirm every subsystem is operational:
1

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.
2

Database migrations applied

Confirm all four tables (vaults, beneficiaries, heartbeats, notifications) exist in your Supabase project with RLS enabled and no policies.
3

Keeper endpoint responds

curl the /api/keeper endpoint with your CRON_SECRET and confirm a 200 response with a valid currentBlock.
4

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.
5

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.
6

NEXT_PUBLIC_APP_URL matches production URL

Visit a notification email and click the claim link — confirm the URL resolves to your production deployment, not localhost:3000.

Build docs developers (and LLMs) love