Digital Legacy Platform · Production Deployed
The Vaults
The most important things we mean to say, we often never do. The Vaults lets you record private video and written messages for the people you love — encrypted, self-hosted, and delivered exactly when you intend: on a date you choose, or if you stop checking in.
In progress
iOS App Review (1.0.2)
Confirm web/Android Stripe is on live keys (verify a real charge)
Migrate photos/avatars/docs to object storage
Signed URLs for direct video playback
Audio-only messages
Platform Overview
Most people have things they want to say to loved ones they never get around to saying — or can only say after they're gone. Legal wills are impersonal. Generic cloud storage offers no delivery mechanism. Third-party legacy services are fragile.
The Vaults solves this with a video-first approach: users record messages addressed to specific people, set a dead man's switch check-in interval, and appoint trusted contacts. If they stop checking in, the system escalates automatically. Upon death verification, messages go to recipients — no manual executor required.
Why It's Different
✓Video-first — record or upload, not just documents or photos like all competitors
✓Automatic delivery — dead man's switch fires without requiring a manual executor
✓AES-256-GCM encryption at rest — per-message key wrapped with master key (legacy AES-256-CTR objects still read transparently)
✓No recipient account — access via one-time token only, nothing to sign up for
✓Self-hosted — Hetzner Cloud VPS (Helsinki) runs Node + SQLite; videos live in IDrive E2 object storage (us-east-1 primary, eu-west-1 offsite mirror) since the 2026-05-15 cut-over. Photos, avatars, and documents still on the VPS disk. No AWS, no Supabase, no third-party CDN
✓Three-mode vault-wide delivery — one global choice per vault: on a specific date (Eastern Time, tomorrow-minimum), when I'm unresponsive (dead-man's switch), or only by trusted agent (no check-ins, no date — quorum release only). Send Now stays on each message as a power-user override
✓Videos & documents — record or upload video, or store documents alongside them — same encryption, same delivery plan
✓Trusted-contact quorum — configurable N-of-M confirmation required before sysadmin-reviewed release, not a single click
✓Installable (PWA) + iOS App Store track — add to home screen today on iOS / Android with no review; native iOS build is in App Store submission via the Apple Developer Program
✓Seven-language UI — English, Spanish, Chinese, Japanese, Mongolian, Russian, German. Notification emails rendered in user's language with English fallback appended
Core Features
Dead Man's Switch
Users pick a check-in interval (monthly, quarterly, semi-annual, or annual). Cron runs every 6 hours (plus a catch-up 10s after server boot) and escalates through active → warning → overdue-user → overdue-trusted-contact → sysadmin alert → released. Trusted-contact quorum is configurable (N-of-M) and admin review gates every release — no release without human oversight.
Videos & Documents
Upload MP4/WebM/MOV up to the tier's video-duration cap, or record directly in-browser with a camera-prepare phase and 3-2-1 countdown. Documents are first-class alongside video. AES-256-GCM encryption at rest with per-file keys wrapped by the master key (legacy AES-256-CTR objects still decrypt transparently). Streaming decryption piped straight to the HTTP response — no temp file on disk. Optional passphrase protection per item.
Recipient Management
Add recipients with full profile (name, email, relationship, photo, address). Drag-and-drop reorder on Dashboard and Media pages. Unique one-time token per assignment — recipients need no account. Delivery plan is vault-wide, so every recipient receives on the same trigger.
Trusted Contacts
Appoint trusted contacts (executors) by email — active by default, with an opt-in health check so verification isn't a blocker. "Pre-fill from a recipient" speeds up add. On overdue, contacts vote via token link; release only fires when the user's configured quorum is met and sysadmin reviews.
Three Delivery Modes
One vault-wide plan, three options. On a specific date — pick a future date and time in Eastern Time (US), tomorrow-minimum, DST-aware ET↔UTC conversion. When I'm unresponsive — classic dead-man's switch. Only by trusted agent — no check-ins, no date, released solely on quorum from your trusted contacts. Cron checks every 6 hours.
AI Support & Admin
In-app AI assistant answers pricing, feature, and setup questions — tier bullets generated from config so the prompt can never drift from real pricing. Admin Portal at /admin: browse, search, paginate all tables, edit rows (sensitive fields blocked), manage billing intervals and lifetime ownership.
Build Status
Authentication — registration, JWT sessions, password reset, email verification
Video & document pipeline — upload or in-browser recording with prepare phase + 3-2-1 countdown, encrypt, stream, decrypt on-the-fly with HTTP range support
Dead man's switch — six-stage escalation, runs every 6 hours plus a boot-catch-up pass, trusted-contact quorum, admin review
TC quorum voting — configurable N-of-M confirmation; token-based response flow (old email-match endpoint retired as 410 Gone)
Recipient access portal — tokenized, no login, in-browser video streaming, short-lived ppToken for passphrase-unlocked streams
Vault-wide delivery plan — three modes: specific date + time (Eastern Time, tomorrow-minimum, DST-aware), when unresponsive (dead-man's switch), or only by trusted agent (quorum release with no check-ins). Bulk-applies to every pending assignment. Send Now remains per-message
Sealed-vault dashboard — "Welcome back, Jim · Your legacy is secure" hero with N-of-M sealed counter and ring gauge; recipient ↔ media flow lines render assignments at a glance
Preview vault — recipient-side preview of every assigned message before delivery, gated behind passphrase when set
Nginx + PM2 production — live at thevaults.video on Hetzner VPS, SMTP verification on boot, frontend Error Boundary
Rate limiting + security hardening — CORS locked, secret guards, webhook hardening, contact-form XSS + header-injection guards
Object-storage video pipeline (cut over 2026-05-15) —
backend/services/storageService.js abstracts video reads/writes behind three modes (local, dual_write, s3); production runs STORAGE_BACKEND=s3 against the IDrive E2 us-east-1 bucket, with HTTP Range support for video seeking. Local Hetzner disk is no longer authoritative for videos. Photos / avatars / docs still on local disk until per-route migrations landThree-layer backup chain — daily SQLite .backup (14-day local), nightly 03:30 cron mirrors primary IDrive bucket → offsite IDrive E2 eu-west-1 bucket (separate scoped key, admin alert + heartbeat file on failure), Hetzner Cloud Backups for one-click VM recovery
Stripe + subscription tiers — monthly, annual, and lifetime plans wired up (Legacy $2.99/$29 · Legacy+ $7.99/$79/$399 · Unlimited $17.99/$179/$699). Web/Android live-charge status to be confirmed (verify a real card charges and the production webhook fires — Jim to check the Stripe dashboard)
Tier enforcement — storage caps + video-duration caps enforced at upload time; tier enforced on every delivery path
Storage usage indicator — sidebar + billing tab, color thresholds, inline upgrade CTA
Passphrase protection — AES-256-GCM per-message with passphrase-derived key, zero-knowledge recovery-proof
Multi-channel notifications — email, Telegram, SMS for recipients and trusted contacts; bilingual emails (user's language + English fallback)
Seven-language UI — English, Spanish, Chinese, Japanese, Mongolian, Russian, German
Billing portal + invoices — Stripe-hosted Customer Portal with pinned configuration (cancel-with-reason, plan prorations, invoice history folded into Plans card)
2-day cancellation grace period — current tier preserved 2 days after cancel before downgrade, with dashboard banner countdown
Daily Stripe reconciliation cron — self-healing sync between Stripe subscription state and local tier records
Legal disclaimer modal — pre-checkout acknowledgement: no guarantee of delivery, user responsibility, prohibited use, limitation of liability
Landing pricing page — three-tier card grid with monthly/annual/lifetime toggle; mobile-optimized flat grid + thin nav strip
Welcome + trial-ending emails — signup triggers introduction email; cron nudges unsubscribed trials 1 day before deletion
Upgrade prompts everywhere — Dashboard banner for inactive users, TierBadge hints, storage/duration errors pitch all three intervals
AI Support assistant — in-app chat with tier bullets generated from config so pricing/feature answers can never drift
PWA + mobile-first redesign — installable on iOS/Android home screen, bottom tab bar, compact tappable layouts, safe-area-inset support
Drag-and-drop reorder — Media and Recipients on Dashboard and Media page; sort_order persisted server-side in a single transaction
Session transparency — Current Session card + Account History chips (device, OS, browser, IP) on Profile
Vault aesthetic polish — vault-door imagery for locked items, sanctuary gallery frame for the Vault player, warm-border thumbnails
Apple Developer Program — enrolled — $99/yr active; iPhone 6.9" App Store screenshots captured, listing copy drafted, Capacitor build 1.0.2 (10) submitted to App Review on 2026-05-14
iPostal virtual mailbox — $10/yr business address (LLC of record + Apple Developer mailing requirement), stable for marketing collateral and legal correspondence
Audio-only messages — complement video with voice-note delivery (Medium)
Scheduling calendar view — visual overview of upcoming scheduled deliveries (Low)
Estate planning partner referrals — outbound channel to attorneys / financial advisors (Medium)
Roadmap
Phase 1 — Shipped
Stability & Trust
Email verification on signup ✓
Rate limiting and security hardening (CORS, secret guards, webhook hardening) ✓
Automated daily SQLite backups, 14-day retention ✓
Object storage migration — videos now on IDrive E2 (us-east-1 primary + eu-west-1 offsite), with byte-exact mirroring and failure alerting ✓
Passphrase UI on recipient access portal ✓
Storage quota indicator on user dashboard (sidebar + billing tab) ✓
Phase 2 — Shipped
Monetization
Stripe subscriptions — Legacy $2.99/$29 · Legacy+ $7.99/$79/$399 · Unlimited $17.99/$179/$699
Annual billing (~2 months free) and Lifetime plans (one-time payment) ✓
Tier limits enforced in API middleware — storage + video duration ✓
Stripe Customer Portal with pinned configuration (reason capture, plan prorations) ✓
Daily Stripe reconciliation cron + 2-day cancellation grace period ✓
Legal disclaimer modal before checkout ✓
Billing history folded into Plans card ✓
Phase 3 — Shipped
Scope Consolidation & Mobile
Delivery plan consolidated to a single vault-wide choice (was four triggers) ✓
Scheduled delivery: time picker + Eastern-Time minimum of tomorrow, DST-aware ✓
TC quorum voting (N-of-M) + token-based response flow replacing email-match ✓
Documents promoted to first-class media alongside video ✓
PWA support — installable on iOS / Android from home screen ✓
Mobile-first redesign — bottom tab bar, compact tappable cards ✓
Drag-and-drop reorder on Media and Recipients ✓
In-app AI Support assistant driven from tier config ✓
Bilingual notification emails with English fallback ✓
Phase 4 — Now
Growth & Distribution
iOS 1.0.2 (10) submitted to App Review 2026-05-14 — awaiting Apple decision
Confirm web/Android Stripe checkout is on live keys — verify a real card charge + production webhook
iPostal virtual mailbox ($10/yr) for LLC business address and Apple Developer correspondence
Migrate photos / avatars / documents through
storageService (videos done 2026-05-15; everything else still on local disk)Signed URLs for direct browser→object-storage video playback (eliminates the Hetzner proxy hop)
Refactor the PATCH encrypt-toggle endpoint to download→transform→re-upload (currently 501 in
s3 mode)Audio-only messages alongside video
Scheduled-delivery calendar view
Estate planning partner referrals (attorneys, financial advisors)
White-label / partner portal
Resources & Infrastructure
Deployment
Live URLthevaults.video ↗
Admin Panel/admin ↗
ServerHetzner CX23 — Helsinki (Finland)
ProcessPM2 — thevaults-api (port 3001)
SSLNginx + Let's Encrypt
Deploy cmd
bash deploy/update.shStack
FrontendReact 18 + Tailwind CSS
BackendNode.js 20 + Express 4
DatabaseSQLite (better-sqlite3)
Video storageIDrive E2 —
thevaults-videos us-east-1 (primary) + thevaults-backup eu-west-1 (offsite)Storage backend
STORAGE_BACKEND=s3 · live since 2026-05-15 · modes: local / dual_write / s3Other mediaLocal disk — photos, avatars, documents (migration pending)
EncryptionAES-256-GCM (Node.js crypto) · legacy CTR read-compat
EmailPostmark (REST API) — replaced Zoho 2026-05-13
iOS IAPRevenueCat V2 (iOS) · Stripe (web/Android)
Code & Local Dev
GitLab repowearej/theVaults ↗
Local path
~/Projects/theVaultsDatabase file
/var/data/thevaults/the-will.dbEntry point
backend/server.jsReact routes
frontend/src/App.jsStorage abstraction
backend/services/storageService.jsOffsite cron
backend/scripts/backup-offsite.jsDMS logic
services/dmsService.jsAnnual Services & Subscriptions
Apple Developer Program$99 / yr
iPostal virtual mailbox$10 / yr
thevaults.video — NameCheap$4.98 / yr
Recurring fixed costs $113.98 / yr (~$9.50/mo) — separate from variable Hetzner VPS and Stripe transaction fees.
Target Market
👵
Aging Adults
Individuals with health concerns who want to leave something meaningful for children and grandchildren.
👶
Young Parents
Parents who want messages for their children in case of early, unexpected death. Life milestones captured now.
⚖️
Estate Planning
Attorneys and financial advisors as referral channel — digital legacy as part of estate planning practice.
🏥
Terminal Illness
Patients preparing final communications with time to record thoughtful, personal video messages.
Live in Production · thevaults.video
Some things are too important to leave unsaid.
The Vaults is deployed and running today — not a concept. Record a message, choose who receives it and when, and trust that it will reach them. See the working product for yourself.
Visit thevaults.video ↗
AES-256-GCM encrypted at rest
Self-hosted — no third-party CDN
Security-hardened
Seven-language UI