A web application for developers to manage plugins in the Vultisig ecosystem.
- Plugin Management: Register, view, and edit plugins
- Team Collaboration: Invite team members with role-based access control
- API Key Management: Create and manage API keys for plugin authentication
- Earnings Dashboard: Track plugin earnings and transaction history
- Secure Authentication: Vultisig wallet integration with EIP-712 signatures
- Node.js 18+
- npm or yarn
- Vultisig browser extension (for authentication)
# Install dependencies
npm install
# Start development server
npm run devThe app will be available at http://localhost:5173
Create a .env file in the project root:
VITE_API_BASE_URL=http://localhost:8080| Layer | Technology |
|---|---|
| Framework | React 18 |
| Language | TypeScript |
| Build | Vite 7 |
| Styling | styled-components |
| UI Library | Ant Design v6 |
| State | React Context + React Query |
| Routing | react-router-dom v7 |
| HTTP | Axios |
| Crypto | ethers.js v6 |
src/
├── api/ # API client and endpoint functions
├── components/ # Reusable UI components
├── context/ # React Context definitions
├── hooks/ # Custom React hooks
├── icons/ # SVG icon components
├── layouts/ # Page layout components
├── pages/ # Route page components
│ ├── AcceptInvite.tsx
│ ├── Earnings.tsx
│ ├── NewPlugin.tsx
│ ├── PluginEdit.tsx
│ └── Plugins.tsx
├── providers/ # Context providers
├── storage/ # Local storage utilities
├── styles/ # Global SCSS styles
├── toolkits/ # Core UI primitives
└── utils/ # Utility functions and types
The portal uses Vultisig wallet authentication:
- Connect your Vultisig wallet via the browser extension
- Sign a message to authenticate
- Receive a JWT token for API access
- Token is automatically included in all API requests
| Role | Description |
|---|---|
| Admin | Full access to all plugin features |
| Staff | Internal Vultisig staff (hidden from regular admins) |
| Editor | Can edit plugin title and description |
| Viewer | Read-only access |
| Action | Admin | Editor | Viewer |
|---|---|---|---|
| View plugin details | Yes | Yes | Yes |
| Edit title/description | Yes | Yes | No |
| Edit server endpoint | Yes | No | No |
| Manage API keys | Yes | No | No |
| Manage team members | Yes | No | No |
| View earnings | Yes | Yes | Yes |
Admins can invite team members via magic links:
- Navigate to a plugin's edit page
- Scroll to "Team Members" section
- Click "Invite Member"
- Select a role (Editor or Viewer)
- Share the generated link (valid for 8 hours, single use)
Invited users:
- Open the invite link
- Connect their Vultisig wallet
- Accept the invitation
Admins can create API keys for plugin authentication:
- Navigate to a plugin's edit page
- Find the "API Keys" section
- Click "Create New Key"
- Optionally set an expiry date
- Copy the key immediately (shown only once)
API keys can be:
- Enabled/disabled via toggle
- Deleted (immediately expired)
All plugin metadata changes require EIP-712 signatures:
- Make changes to plugin fields
- Click "Save Changes"
- Review the changes in the signing modal
- Sign with your Vultisig wallet
- Changes are submitted to the backend
This ensures an auditable trail of who made what changes.
npm run dev # Start development server
npm run build # Build for production
npm run preview # Preview production build
npm run typecheck # Run TypeScript type checking
npm run lint # Run ESLint
npm run lint:fix # Run ESLint with auto-fix- TypeScript strict mode
- ESLint with React hooks plugin
- Automatic import sorting
- Use
Stack,HStack,VStackfor layouts - Use
$styleprop for inline styles (notstyle) - Access theme colors via
useTheme()hook - Use
.toHex()method on color tokens - Use Ant Design components for forms and modals
- Use custom
Buttoncomponent for actions
The portal communicates with the Vultisig Verifier backend:
- Base URL: Configured via
VITE_API_BASE_URL - Authentication: JWT Bearer token in Authorization header
- Content Type: application/json
| Endpoint | Description |
|---|---|
POST /auth |
Authenticate with wallet signature |
GET /plugins |
List user's plugins |
GET /plugins/:id |
Get plugin details |
PUT /plugins/:id |
Update plugin (requires signature) |
GET /plugins/:id/my-role |
Get user's role for plugin |
GET /plugins/:id/team |
List team members (admin only) |
POST /plugins/:id/team/invite |
Create invite link (admin only) |
POST /plugins/:id/team/accept |
Accept team invite |
GET /plugins/:id/api-keys |
List API keys (admin only) |
POST /plugins/:id/api-keys |
Create API key (admin only) |
GET /earnings |
List earnings transactions |
Proprietary - Vultisig