Internal dashboard for tracking organization multisig wallets across multiple chains, mapping signer addresses to human identities, and providing real-time visibility into wallet thresholds and signer assignments.
- Multi-Chain Support: Track wallets on Ethereum Mainnet, Arbitrum, Optimism, Base, Avalanche, and more
- Real-time Data: Fetches fresh wallet data from Safe Transaction Service on every request
- Signer Identity Mapping: Map cryptographic addresses to human identities (people, ledgers, etc.)
- Reverse Lookup: See all wallets where a specific signer has signing rights
- Admin Controls: Admin-only editing capabilities for wallet and signer management
- Frontend: Next.js 14+ with App Router, TypeScript, Tailwind CSS
- Backend: Next.js API routes
- Database: PostgreSQL with Prisma ORM
- Authentication: Simple session-based auth (username/password)
- Node.js 18+
- PostgreSQL database
- npm or yarn
- Clone the repository and install dependencies:
npm install- Set up environment variables:
Create a .env file in the root directory:
DATABASE_URL="postgresql://user:password@localhost:5432/multisig_registry"
SESSION_SECRET="your-secret-key-for-cookies"- Set up the database:
# Generate Prisma client
npm run db:generate
# Run migrations
npm run db:migrate
# Seed initial admin user (optional)
npm run db:seedYou can change these by setting ADMIN_USERNAME and ADMIN_PASSWORD environment variables before running the seed script.
- Start the development server:
npm run devThe application will be available at http://localhost:3000
- Log in as an admin user
- Navigate to the Multisig Wallets dashboard
- Click "Add Wallet"
- Enter the wallet address, select the network, and optionally add a name and tag
- Log in as an admin user
- Navigate to the Signers dashboard
- Click "Add User"
- Enter the signer's name, department, and associated addresses
- Click on any wallet address in the dashboard to see:
- Current threshold and signer count (fetched fresh from Safe API)
- List of all signers with mapped names
- Click on a signer address to see their profile
- Click on any signer address to see:
- All addresses associated with the signer
- All multisig wallets where the signer is an owner
- Click on a wallet to navigate to its detail page
POST /api/auth/login- Login with username/passwordPOST /api/auth/logout- LogoutGET /api/auth/session- Get current session
GET /api/wallets- List all wallets (with optional filters)POST /api/wallets- Create new wallet (admin only)GET /api/wallets/[id]- Get wallet details with fresh Safe API dataPUT /api/wallets/[id]- Update wallet (admin only)DELETE /api/wallets/[id]- Delete wallet (admin only)
GET /api/signers- List all signersPOST /api/signers- Create signer profile (admin only)GET /api/signers/[id]- Get signer with all associated walletsPUT /api/signers/[id]- Update signer (admin only)POST /api/signers/[id]/addresses- Add address to signer (admin only)DELETE /api/signers/[id]/addresses/[addressId]- Remove address (admin only)
See DEPLOYMENT.md for a complete step-by-step guide to deploy on Vercel with PostgreSQL database.
Quick Summary:
- Push code to GitHub
- Create Vercel project and link repository
- Create PostgreSQL database in Vercel Storage
- Set environment variables (
SESSION_SECRET,SAFE_API_KEY, etc.) - Deploy - migrations and data import run automatically!
- wallets: Stores wallet addresses, names, chains, and tags
- signers: Stores signer names and departments
- signer_addresses: Maps multiple addresses to a signer
- wallet_signers: Junction table for wallet-signer relationships
- users: User accounts for authentication
- Wallet threshold, nonce, and owner lists are fetched fresh from Safe Transaction Service on each request (not cached)
- The system automatically maps owner addresses to signer names based on the
signer_addressestable - All admin operations require authentication and admin privileges