Skip to content

byeongsu-hong/squad

Repository files navigation

Squad Multisig Manager

A modern web application for managing Squads V4 multisig wallets across multiple SVM (Solana Virtual Machine) chains.

Features

Core Functionality

  • πŸ” Ledger Hardware Wallet Support - Secure transaction signing with Ledger devices
  • 🌐 Multi-Chain Support - Manage multisigs across Solana, Soon, Eclipse, SonicSVM, Solaxy, and more
  • πŸ“ Proposal Management - Create, approve, reject, and execute multisig proposals
  • πŸ“Š Monitoring Dashboard - View and manage proposals across all multisigs in a single table view
  • πŸ” Transaction Details - View detailed transaction data including instructions and account keys
  • βš™οΈ Custom RPC Configuration - Configure custom RPC endpoints for each chain
  • πŸ’Ύ Local Storage - All data stored locally in your browser

Performance & UX

  • ⚑ Smart Caching - Intelligent RPC response caching (30s TTL) to reduce network requests
  • πŸ” Debounced Search - Optimized search with 300ms debounce for smooth filtering
  • πŸ“„ Pagination - Handle large proposal lists with 20 items per page
  • πŸ’ͺ Optimistic Updates - Instant UI feedback during proposal actions
  • 🎨 Loading Skeletons - Beautiful loading states instead of spinners
  • πŸ“ˆ Proposal Statistics - Real-time stats showing active, executed, and rejected proposals

Advanced Features

  • βœ… Batch Operations - Approve or reject multiple proposals at once
  • 🏷️ Tagging System - Organize multisigs with custom tags
  • 🏷️ Address Labeling - Label wallet addresses with custom names, descriptions, and colors
  • πŸ“€ CSV Export - Export proposals and multisig data to CSV
  • 🎯 Smart Filtering - Filter by status (🟒 Active, βœ… Executed, ❌ Rejected, 🚫 Cancelled), chain, and tags
  • πŸ”„ Transaction History - View executed and cancelled proposals with default active filter
  • πŸ“¦ Import/Export - Backup and restore multisig configurations
  • πŸ‘₯ Member Management - Propose changes to members and threshold via UI
  • ✈️ Pre-flight Checks - Transaction validation before execution
  • πŸ‘€ User Highlighting - See your address highlighted in transaction details
  • ⌨️ Keyboard Shortcuts - Quick access with Cmd+K for search, Shift+? for shortcuts
  • πŸ”Ž Quick Search - Global search across multisigs and proposals

Getting Started

Prerequisites

  • Node.js 18+ and pnpm
  • Ledger device (for signing transactions)

Installation

# Install dependencies
pnpm install

# Run development server
pnpm dev

Open http://localhost:3000 to view the app.

Build

# Production build
pnpm build

# Start production server
pnpm start

Usage

1. Connect Ledger

Click "Connect Wallet" and connect your Ledger device with the Solana app installed.

2. Create or Import Multisig

  • Create New: Set up a new multisig with custom threshold and members
  • Import Existing: Import an existing multisig by address

3. Manage Proposals

Per-Multisig View

  • Select a multisig from the sidebar to view its proposals
  • Approve, reject, or execute proposals inline
  • View threshold status and approval/rejection counts
  • Sidebar Metrics: See Members, Threshold, Active, and Executed counts in Alert badges
  • View your connected wallet highlighted with "You" badge

Monitoring Dashboard

  • View all proposals across all multisigs in a single table
  • Batch Operations: Select multiple proposals to approve/reject at once
  • Smart Filtering: Filter by status with emoji indicators (🟒 Active, βœ… Executed, ❌ Rejected, 🚫 Cancelled)
  • Search: Find proposals by multisig name or address with debounced search
  • Pagination: Navigate through large proposal lists (20 items per page)
  • Statistics: See real-time proposal counts and success rates
  • Export: Download proposal data to CSV for external analysis
  • Pre-flight Checks: Transactions are validated before execution
  • View detailed transaction data with your wallet highlighted

4. Member Management

  • Open member management dialog from multisig options
  • Add new members by entering their Solana address
  • Remove existing members
  • Update the approval threshold
  • Preview changes before creating a configuration proposal

5. Keyboard Shortcuts

  • Cmd+K (or Ctrl+K): Open quick search
  • Shift+?: View all keyboard shortcuts
  • Navigate search results with arrow keys
  • Press Enter to select

6. Address Labeling

Label wallet addresses for easier identification:

  • Click the Tag icon in the header to open the Address Label Manager
  • Add Label: Enter address, label name, optional description, and choose a color
  • Search Labels: Filter through saved labels
  • Edit/Delete: Manage existing labels from the list
  • Quick Access: Add labels directly from member lists and transaction details
  • Visual Display: Labeled addresses show colored badges with custom names

7. Configure Chains

Click the Settings icon to:

  • Edit RPC URLs
  • Add custom chains
  • Update program IDs
  • Reset to defaults

Performance Optimization

Smart Caching

The app implements an intelligent caching layer to optimize RPC requests:

  • Automatic Caching: RPC responses are cached for 30 seconds by default
  • Cache Invalidation: Cache is automatically cleared when:
    • Manual refresh is triggered
    • Proposals are approved, rejected, or executed
  • Pattern-Based Invalidation: Supports invalidating related cache entries
  • TTL Management: Configurable time-to-live for different data types

UI/UX Optimizations

  • Debounced Search: Search inputs wait 300ms before filtering to reduce unnecessary re-renders
  • Pagination: Large lists are paginated (20 items/page) to maintain smooth scrolling
  • Loading Skeletons: Skeleton loaders provide visual feedback during data fetching
  • Optimistic Updates: UI updates immediately during actions, reverting only on error

These optimizations reduce unnecessary RPC calls, provide instant feedback, and ensure smooth performance even with 100+ proposals.

Tech Stack

  • Framework: Next.js 16 (App Router)
  • Styling: Tailwind CSS + shadcn/ui
  • State Management: Zustand
  • Blockchain: @sqds/multisig, @solana/web3.js
  • Hardware Wallet: @ledgerhq/device-management-kit
  • Testing: Vitest + @testing-library/react
  • Form Validation: Zod + React Hook Form
  • Icons: Lucide React

Project Structure

squad/
β”œβ”€β”€ app/                    # Next.js app router pages
β”‚   β”œβ”€β”€ page.tsx           # Home page (multisig list)
β”‚   β”œβ”€β”€ monitoring/        # Monitoring dashboard
β”‚   └── proposals/         # Proposals page
β”œβ”€β”€ components/            # React components
β”‚   β”œβ”€β”€ ui/               # shadcn/ui components (Button, Card, Alert, Badge, etc.)
β”‚   β”œβ”€β”€ skeletons.tsx     # Loading skeleton components
β”‚   β”œβ”€β”€ monitoring-view.tsx              # Main monitoring dashboard
β”‚   β”œβ”€β”€ proposal-list.tsx                # Per-multisig proposal view
β”‚   β”œβ”€β”€ proposal-stats.tsx               # Proposal statistics cards
β”‚   β”œβ”€β”€ multisig-stats-card.tsx          # Alert/Badge based metrics
β”‚   β”œβ”€β”€ member-management-dialog.tsx     # Member & threshold management
β”‚   β”œβ”€β”€ address-label-manager-dialog.tsx # Address labeling UI
β”‚   β”œβ”€β”€ address-with-label.tsx           # Address display with labels
β”‚   β”œβ”€β”€ keyboard-shortcuts-dialog.tsx    # Shortcuts reference
β”‚   β”œβ”€β”€ quick-search-dialog.tsx          # Global search
β”‚   └── ...               # Feature components
β”œβ”€β”€ lib/                   # Utility functions
β”‚   β”œβ”€β”€ hooks/            # Custom React hooks
β”‚   β”‚   β”œβ”€β”€ use-proposal-actions.ts    # Shared proposal actions
β”‚   β”‚   β”œβ”€β”€ use-address-label.ts       # Address label hooks
β”‚   β”‚   β”œβ”€β”€ use-debounce.ts            # Debounce hook
β”‚   β”‚   β”œβ”€β”€ use-pagination.ts          # Pagination hook
β”‚   β”‚   β”œβ”€β”€ use-local-storage.ts       # localStorage hook
β”‚   β”‚   β”œβ”€β”€ use-clipboard.ts           # Clipboard operations
β”‚   β”‚   └── use-keyboard-shortcuts.ts  # Keyboard shortcut manager
β”‚   β”œβ”€β”€ utils/            # Utility functions
β”‚   β”‚   └── format-address.ts          # Address formatting utilities
β”‚   β”œβ”€β”€ squad.ts              # SquadService (blockchain interaction)
β”‚   β”œβ”€β”€ cache.ts              # Smart caching layer
β”‚   β”œβ”€β”€ config.ts             # Centralized configuration
β”‚   β”œβ”€β”€ export-csv.ts         # CSV export utilities
β”‚   β”œβ”€β”€ transaction-simulator.ts  # Pre-flight checks
β”‚   β”œβ”€β”€ storage.ts            # localStorage abstractions
β”‚   └── validation.ts         # Zod schemas & validators
β”œβ”€β”€ stores/               # Zustand stores
β”‚   β”œβ”€β”€ chain-store.ts         # Chain configuration
β”‚   β”œβ”€β”€ multisig-store.ts      # Multisig management
β”‚   β”œβ”€β”€ address-label-store.ts # Address label management
β”‚   └── wallet-store.ts        # Wallet state
β”œβ”€β”€ types/                # TypeScript types
β”‚   β”œβ”€β”€ multisig.ts       # Multisig & Proposal types
β”‚   β”œβ”€β”€ chain.ts          # Chain types
β”‚   β”œβ”€β”€ address-label.ts  # Address label types
β”‚   └── wallet.ts         # Wallet types
└── __tests__/            # Test files (74 tests)
    └── lib/              # Library tests
        β”œβ”€β”€ hooks/        # Hook tests
        β”œβ”€β”€ cache.test.ts
        β”œβ”€β”€ address-label.test.ts
        β”œβ”€β”€ format-address.test.ts
        β”œβ”€β”€ export-csv.test.ts
        └── validation.test.ts

Development

# Run tests
pnpm test

# Run linter
pnpm lint

# Format code
pnpm format

License

MIT

About

backup interface sucks. vibed

Resources

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •