Gives Claude direct access to a zero-knowledge encrypted document vault running on EU infrastructure. The server exposes operations for storing and retrieving encrypted files (passports, wills, deeds) where encryption happens client-side before upload, so the backend never sees plaintext. Built on BitAtlas encryption with per-file AES-256-GCM keys and a dual-key system that supports emergency access scenarios. You'd reach for this when you need Claude to help manage sensitive documents with strict data residency requirements, since everything lives on Hetzner's German infrastructure under GDPR. The underlying system uses Prisma, PostgreSQL, and S3-compatible object storage, all wrapped in a stdio transport for local Claude integration.
Secure digital vault for critical documents with emergency access. 100% European hosting.
Legacy Shield is a privacy-first document vault designed for storing your most critical files—passports, wills, insurance policies, property deeds—with built-in emergency access for loved ones. Unlike general cloud storage, Legacy Shield uses client-side encryption and European-exclusive infrastructure to ensure maximum privacy and security.
Monorepo Structure:
legacy-shield/
├── packages/
│ ├── web/ # Next.js frontend (React + TypeScript)
│ ├── api/ # Express backend (Node.js + TypeScript)
│ └── shared/ # Shared types and utilities
├── infrastructure/ # Deployment configs
├── docker-compose.yml
├── product-spec.md # Product specification
└── architecture-spec.md # Technical architecture
Tech Stack:
cd /Users/stephenballot/Documents/LegacyShield
npm install
# Start PostgreSQL, Redis, and MinIO (local S3)
docker compose up -d
# Verify services are running
docker ps
Note: You can also use
npm run docker:devas a shortcut.
# Copy example environment file
cp .env.example .env
# Edit .env with your values (defaults work for local development)
cd packages/api
# Generate Prisma Client
npm run db:generate
# Run database migrations
DATABASE_URL="postgresql://legacyshield:devpassword@localhost:5432/legacyshield_dev" npm run db:migrate
# Optional: seed with test data
npm run db:seed
cd ../..
Note: The DATABASE_URL must be provided because Prisma doesn't automatically read the root
.envfile. See GETTING_STARTED.md for details.
# Start both frontend and backend
npm run dev
# Or start individually:
npm run dev:web # Frontend at http://localhost:3000
npm run dev:api # Backend at http://localhost:4000
# Development
npm run dev # Start all services
npm run dev:web # Start frontend only
npm run dev:api # Start backend only
# Building
npm run build # Build all packages
npm run build:web # Build frontend
npm run build:api # Build backend
# Testing
npm run test # Run all tests
npm run lint # Lint all packages
npm run type-check # TypeScript type checking
# Database
cd packages/api
npm run db:migrate # Run migrations
npm run db:seed # Seed database
npm run db:studio # Open Prisma Studio
npm run db:reset # Reset database
# Docker
docker compose up -d # Start Docker services
docker compose down # Stop Docker services
docker compose logs -f # View Docker logs
Tip: For detailed setup instructions, see GETTING_STARTED.md
packages/
├── web/ # Frontend (Next.js)
│ ├── src/
│ │ ├── app/ # Next.js App Router
│ │ │ ├── (auth)/ # Auth pages (login, register)
│ │ │ ├── (dashboard)/ # Protected dashboard pages
│ │ │ └── emergency-access/ # Public emergency portal
│ │ ├── components/ # React components
│ │ ├── lib/
│ │ │ ├── crypto/ # Client-side encryption
│ │ │ ├── api/ # API client
│ │ │ └── utils/ # Utilities
│ │ ├── hooks/ # Custom React hooks
│ │ ├── store/ # Zustand stores
│ │ └── types/ # TypeScript types
│ └── package.json
│
├── api/ # Backend (Express)
│ ├── src/
│ │ ├── routes/ # API routes
│ │ ├── middleware/ # Express middleware
│ │ ├── services/ # Business logic
│ │ ├── models/ # Data models
│ │ ├── jobs/ # Background jobs
│ │ ├── utils/ # Utilities
│ │ └── server.ts # Main server file
│ ├── prisma/
│ │ ├── schema.prisma # Database schema
│ │ └── migrations/ # Database migrations
│ └── package.json
│
└── shared/ # Shared code
├── src/
│ ├── types/ # Shared TypeScript types
│ ├── constants/ # Shared constants
│ └── utils/ # Shared utilities
└── package.json
Legacy Shield implements a zero-knowledge architecture:
Password → PBKDF2 → Master Key → Encrypts file keys → AES-256-GCM → Encrypted file
↓
Hetzner Object Storage (Germany)
All infrastructure is hosted exclusively in the European Union:
Your data never leaves European soil and is protected by:
# Run all tests
npm run test
# Run tests for specific package
npm run test --workspace=web
npm run test --workspace=api
# Run tests in watch mode
npm run test:watch --workspace=web
# Run e2e tests
npm run test:e2e
.env with real credentials# Build for production
npm run build
# Deploy to Hetzner (manual)
# See infrastructure/deploy.sh
GitHub Actions workflow automatically:
develop branchmain branchThis is a private project. For the development team:
git checkout -b feature/your-featuregit commit -m "Add your feature"git push origin feature/your-featureCopyright © 2026 Legacy Shield. All rights reserved.
This is proprietary software. Unauthorized copying or distribution is prohibited.
Built with ❤️ in Europe. Your data, your privacy, your legacy.
LEGACY_SHIELD_API_KEY*secretYour LegacyShield API key (starts with ls_). Get one at POST https://api.legacyshield.eu/api/v1/auth/agent-register
LEGACY_SHIELD_API_URLLegacyShield API base URL
csoai-org/pdf-document-mcp
xt765/mcp-document-converter
io.github.xjtlumedia/markdown-formatter
io.github.ai-aviate/better-notion
suekou/mcp-notion-server
meterlong/mcp-doc