A cross-platform desktop application and web interface for managing providers, models, and bids on the Morpheus Proxy Router blockchain. Built with Vite + React + Tauri for native desktop performance and S3/CloudFront web deployment.
- 🖥️ Cross-Platform Desktop App - Native apps for macOS (Intel/ARM), Linux, and Windows
- 🌐 Web Deployment - Static web hosting on S3/CloudFront
- 🔌 API Connection Management - Connect to Proxy Router with credentials
- 🚀 Provider Bootstrap - Generate complete ENV configurations
- 👛 Multi-Chain Support - BASE network (mainnet + testnet), with Arbitrum legacy support
- 🏢 Provider Management - Register and update provider stakes
- 🤖 Model Management - Create and manage AI models with sync
- 💰 Bid Management - Create competitive bids for models
- 🔔 Notifications - Real-time feedback for all operations
- 🌙 Dark Theme - Modern, sleek interface with purple accents
Download the latest release for your platform:
macOS:
Linux:
Windows:
Access the hosted version at https://myprovider.mor.org
Prerequisites:
- Node.js >= 20.0.0
- Rust >= 1.75.0 (for Tauri desktop builds)
- npm or yarn
Installation:
# Install dependencies
npm install
# Start development server (web only)
npm run dev
# Start Tauri development (desktop app with hot reload)
npm run tauri:devWeb dev server: http://localhost:3000
Important: The hosted version at https://myprovider.mor.org can only connect to HTTPS-enabled proxy-routers due to browser Mixed Content security policies.
You have three options:
Option 1: Enable HTTPS (Recommended for Production)
- Use an Application Load Balancer (ALB) with ACM certificate
- Use CloudFront with custom domain and TLS
- Use nginx/caddy as reverse proxy with Let's Encrypt
- Direct TLS configuration on your proxy-router
Option 2: Run Locally
npm install
npm run dev
# Access at http://localhost:3000From http://localhost:3000, you can connect to HTTP endpoints without browser restrictions.
Option 3: Disable Mixed Content Blocking (Chrome/Brave/Edge)
For testing purposes, you can temporarily disable Mixed Content blocking in Chromium-based browsers:
- Visit
https://myprovider.mor.org - Click the shield icon 🛡️ in the address bar (left side)
- Click "Load unsafe scripts"
- Page will reload with HTTP connections allowed
Note: This is per-session and resets when you close the tab. Not recommended for production use.
Alternative (Persistent):
# Launch Chrome with security disabled (testing only)
# macOS
open -a "Google Chrome" --args --disable-web-security --user-data-dir="/tmp/chrome_dev"
# Linux
google-chrome --disable-web-security --user-data-dir="/tmp/chrome_dev"
# Windows
"C:\Program Files\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir="C:\tmp\chrome_dev"--disable-web-security disables all browser security features. Only use for testing with trusted endpoints.
- Enter your Proxy Router API URL (e.g.,
http://your-provider.domain.io:8082) - Provide admin username and password
- Click "Connect"
The app will verify the connection and load your wallet information.
- View all registered providers
- Create new provider with endpoint and stake (min 0.2 MOR)
- Update existing provider stake
- Browse registered models
- Create new models with:
- Model ID (0x...)
- IPFS CID (0x...)
- Stake (min 0.1 MOR)
- Fee (min 300000000000 wei)
- Tags (comma-separated)
- Select a model from dropdown
- Set price per second (min 10000000000 wei)
- Submit bid
# Web Development
npm run dev # Start Vite dev server (web only)
npm run build # Build for web (static files to dist/)
npm run preview # Preview production build locally
# Desktop Development (Tauri)
npm run tauri:dev # Start Tauri dev (desktop app with hot reload)
npm run tauri:build # Build desktop app for current platform
npm run tauri:build:debug # Build debug desktop app (faster, larger)
# Code Quality
npm run lint # Run ESLintAll network settings and contract addresses are configured in src/lib/constants.ts:
- API URLs: Default API endpoints for mainnet and testnet (users can override these at runtime)
- Contract Addresses: Diamond and MOR token contracts for both networks
- Minimum Values: Provider stake, model stake, marketplace fee, and bid price minimums (in wei)
Note: API URLs in the constants are placeholders. Users will enter their actual Proxy Router API URL when connecting through the UI.
The web version is automatically deployed via GitHub Actions on push to main:
- Builds Vite application →
dist/ - Uploads static files to S3
- Invalidates CloudFront cache
- Live at: https://myprovider.mor.org
Desktop apps are automatically built and released via GitHub Actions:
Version Strategy:
- Push to
main→ Increments major version (v1.0.0, v2.0.0, v3.0.0) - Push to
cicd/*→ Increments minor version (v1.1.0, v1.2.0)
Artifacts: Versionless filenames for clean download URLs:
Morpheus_MyProvider-mac-arm64.dmgMorpheus_MyProvider-mac-x64.dmgMorpheus_MyProvider-linux-x64.AppImageMorpheus_MyProvider-linux-x64.debMorpheus_MyProvider-windows-x64.msi
Latest Release: GitHub Releases
# Install Rust if not already installed
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Build for your current platform
npm run tauri:build
# Output location:
# macOS: src-tauri/target/release/bundle/dmg/
# Linux: src-tauri/target/release/bundle/appimage/
# Windows: src-tauri/target/release/bundle/msi/See ARCHITECTURE.md for detailed technical documentation including:
- Component structure
- API service layer
- State management
- Type definitions
- Deployment strategies
- Vite 7 - Lightning-fast build tool
- React 18 - UI library
- TypeScript 5 - Type-safe development
- Tauri 2 - Rust-powered desktop framework
- Tailwind CSS 3 - Utility-first styling
- Radix UI - Accessible component primitives
- Axios - HTTP client
- Lucide React - Icon library
| Requirement | Minimum | Notes |
|---|---|---|
| Provider Stake | 0.2 MOR | 200000000000000000 wei |
| Model Stake | 0.1 MOR | 100000000000000000 wei |
| Bid Fee | 0.3 MOR | 300000000000000000 wei |
| Bid Price/Sec | 0.00000001 MOR | 10000000000 wei |
Recommended: Have at least 1 MOR in wallet for full setup.
Configure your Proxy Router API endpoints:
- Mainnet:
http://your-mainnet-provider.domain.io:8082 - Testnet:
http://your-testnet-provider.domain.io:8082
GET /healthcheck- API healthGET /blockchain/balance- Wallet infoGET /blockchain/providers- List providersPOST /blockchain/providers- Create providerGET /blockchain/models- List modelsPOST /blockchain/models- Create modelDELETE /blockchain/models/{id}- Delete model (no bids)GET /blockchain/providers/{id}/bids- List bids by providerPOST /blockchain/bids- Create bidDELETE /blockchain/bids/{id}- Delete bidGET /blockchain/allowance- Check allowancePOST /blockchain/approve- Approve spendingGET /swagger/doc.json- Full API docs
- Credentials stored in sessionStorage (cleared on browser close)
- Basic authentication over HTTPS recommended
- All inputs validated before API calls
- Error messages sanitized
- Verify API URL and credentials
- Check network connectivity
- Test healthcheck endpoint directly
- Review browser console for errors
- Ensure sufficient MOR balance
- Verify minimum stake requirements
- Check API error messages
- Confirm wallet has proper authorization
- Fork the repository
- Create feature branch (
git checkout -b feature/AmazingFeature) - Commit changes (
git commit -m 'Add AmazingFeature') - Push to branch (
git push origin feature/AmazingFeature) - Open Pull Request
MIT License - See LICENSE file for details
For issues and questions:
- Check ARCHITECTURE.md for technical details
- See DEPLOYMENT.md for deployment issues
- Review API documentation at
/swagger/doc.json - Open an issue on GitHub
Current Version: 0.1.0
Platform: Vite + React + Tauri
Built with ❤️ for the Morpheus ecosystem