RegPlatformm — Multi-Platform Account Batch Registration System
```markdown
by adisinghstudent · published 2026-04-01
$ claw add gh:adisinghstudent/adisinghstudent-regplatformm-multi-platform-registration---
name: regplatformm-multi-platform-registration
description: Multi-platform account batch registration system supporting OpenAI, Grok, Kiro, Gemini with task engine, HuggingFace worker nodes, Cloudflare routing, credits system, and admin management
triggers:
- set up regplatform registration system
- configure batch account registration
- deploy HuggingFace worker spaces
- set up OpenAI Grok Kiro account registration
- configure Cloudflare worker routing for registration
- manage HF space worker nodes
- set up credits and user management for regplatform
- integrate regplatform with external systems
---
# RegPlatformm — Multi-Platform Account Batch Registration System
> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection.
RegPlatform is a production-ready multi-platform account batch registration system built in Go. It supports automated account registration for OpenAI, Grok, Kiro, and Gemini via a distributed worker architecture: a Go/Gin backend orchestrates tasks, HuggingFace Space nodes execute registrations, and a Cloudflare Worker handles load balancing and routing.
## Architecture
Browser → Nginx → Vue 3 SPA
→ Go Backend (:8000)
├── TaskEngine (worker pool, scheduling)
├── HFSpaceService (elastic node management)
├── WebSocket (real-time logs)
└── PostgreSQL
↓
CF Worker (path-prefix routing)
├── /openai/* → HFNP pool
├── /grok/* → HFGS pool
├── /kiro/* → HFKR pool
└── /ts/* → HFTS pool
## Tech Stack
- **Backend**: Go 1.25, Gin, GORM, PostgreSQL 16
- **Frontend**: Vue 3, Vite, Pinia, TailwindCSS
- **CI/CD**: GitHub Actions → GHCR Docker + GitHub Release
- **Deployment**: Docker Compose + HuggingFace Spaces (worker nodes)
- **Routing**: Cloudflare Worker (path-prefix load balancing)
## Installation & Setup
### Prerequisites
- Go 1.25+
- Node.js 18+
- PostgreSQL 16+
- Docker & Docker Compose
- HuggingFace account(s) with API tokens
- Cloudflare Worker account
### 1. Clone and Configure
git clone https://github.com/xiaolajiaoyyds/regplatformm.git
cd regplatformm
cp .env.example .env
### 2. Environment Variables (.env)
# Required
DATABASE_URL=postgres://user:password@localhost:5432/regplatform
JWT_SECRET=your-secret-key-at-least-32-chars
# Optional
PORT=8000
GIN_MODE=release
DEV_MODE=false
ADMIN_USERNAME=your_admin_username
SSO_SECRET=optional_sso_secret
REDIS_URL=redis://localhost:6379
JWT_EXPIRE_HOURS=72
CORS_ORIGINS=https://yourdomain.com,https://app.yourdomain.com
### 3. Local Development
# Backend
go mod tidy
go run cmd/server/main.go
# Frontend (separate terminal)
cd web
npm install
npm run dev
### 4. Production Docker Deployment
docker-compose -f docker-compose.prod.yml up -d
### 5. First-Time Setup
1. Visit `http://localhost:8000`
2. Register first account — **automatically becomes admin**
3. Go to admin panel → System Settings to configure services
## Project Structure
regplatformm/
├── cmd/
│ ├── server/ # Main server entrypoint
│ ├── openai-worker/ # OpenAI worker binary (→ HFNP)
│ ├── grok-worker/ # Grok worker binary (→ HFGS)
│ └── grpctest/ # gRPC-web debug tool
├── internal/
│ ├── config/ # Viper config loading
│ ├── model/ # GORM data models
│ ├── service/ # Business logic (TaskEngine, HFSpaceService)
│ ├── worker/ # Platform worker implementations
│ ├── handler/ # HTTP route handlers
│ ├── middleware/ # JWT auth, CORS, rate limiting
│ ├── dto/ # Request/response structs
│ └── pkg/ # Internal utilities
├── web/ # Vue 3 frontend
├── services/
│ ├── aws-builder-id-reg/ # Kiro registration microservice
│ └── turnstile-solver/ # Turnstile solver microservice
├── cloudflare/ # CF Worker source
├── HFNP/ # OpenAI HF Space template
├── HFGS/ # Grok HF Space template
├── HFKR/ # Kiro HF Space template
├── HFTS/ # Turnstile HF Space template
├── Dockerfile
├── docker-compose.yml
└── docker-compose.prod.yml
## API Reference
### Authentication Endpoints (Public)
// Register — rate limited 3/min per IP
POST /api/auth/register
// Body: { "username": "user", "password": "Password1" }
// Password: min 8 chars, uppercase + lowercase + digit required
// First registered user auto-assigned admin (Role=100, IsAdmin=true)
// Login — rate limited 10/min per IP
POST /api/auth/login
// Body: { "username": "user", "password": "Password1" }
// Returns: JWT token
// SSO (optional, requires SSO_SECRET env var)
GET /api/auth/sso
// Dev login (DEV_MODE=true only)
GET /api/auth/dev-login
### Auth Token Passing
JWT token can be passed three ways:Cookie: token=<jwt>
Header: X-Auth-Token: <jwt>
Header: Authorization: Bearer <jwt>
### User Endpoints (Authenticated)
GET /api/auth/me // Current user info
GET /api/init // Batch initialization load
POST /api/tasks // Create registration task
POST /api/tasks/:id/start // Start task
POST /api/tasks/:id/stop // Stop task
GET /api/tasks/current // Current running task
GET /api/results // Registration results list
GET /api/results/:taskId/export // Export results
GET /api/credits/balance // Credit balance
POST /api/credits/redeem // Redeem credit code
GET /api/proxies // List proxies
POST /api/proxies // Add proxy
PUT /api/proxies/:id // Update proxy
DELETE /api/proxies/:id // Delete proxy
### Admin Endpoints (Admin Role Required)
GET /api/admin/users // User list
POST /api/admin/credits/recharge // Recharge user credits
GET /api/admin/settings // Get system settings
POST /api/admin/settings // Update system settings
GET /api/admin/hf/overview // HF Space overview
POST /api/admin/hf/spaces/deploy // Batch deploy spaces
POST /api/admin/hf/spaces/health // Health check
POST /api/admin/hf/autoscale // Elastic scaling
POST /api/admin/hf/sync-cf // Sync CF Worker env vars
### Real-Time Endpoints
GET /ws/logs/:taskId/stream // SSE real-time logs
GET /ws/logs/:taskId // WebSocket logs
## Configuration: Admin System Settings
Configure in the admin panel (persisted to DB):
| Key | Description |
|-----|-------------|
| `yydsmail_base_url` | YYDS Mail temp email API URL |
| `gptmail_api_key` | GPTMail API Key |
| `gptmail_base_url` | GPTMail service URL |
| `turnstile_solver_url` | Turnstile solver service URL |
| `cf_bypass_solver_url` | CF Bypass solver URL |
| `yescaptcha_key` | YesCaptcha API Key |
| `openai_reg_url` | OpenAI registration service URL |
| `grok_reg_url` | Grok registration service URL |
| `kiro_reg_url` | Kiro registration service URL |
| `default_proxy` | Default proxy address |
| `new_user_bonus` | Credits granted to new users |
| `max_threads_per_user` | Max concurrent threads per user |
| `max_target_per_task` | Max targets per task |
## Supported Platforms
| Platform | Method | HF Space | Release Tag |
|----------|--------|----------|-------------|
| OpenAI | Go HTTP (Sentinel PoW + PKCE OAuth + Auth0) | HFNP | `inference-runtime-latest` |
| Grok | Go HTTP (gRPC-web + Turnstile + Server Actions) | HFGS | `stream-worker-latest` |
| Kiro | Python (AWS Cognito + Camoufox) | HFKR | `browser-agent-latest` |
| Gemini | Python (Camoufox browser automation) | HFGM | `gemini-agent-latest` |
| Turnstile | Python (Camoufox + Patchright) | HFTS | `net-toolkit-latest` |
## HuggingFace Space Worker Setup
### Worker Binaries (via GitHub Releases)
Each platform's worker is compiled and released separately:
inference-runtime.zip → deploy to HFNP spaces (OpenAI)
stream-worker.zip → deploy to HFGS spaces (Grok)
browser-agent.zip → deploy to HFKR spaces (Kiro)
gemini-agent.zip → deploy to HFGM spaces (Gemini)
net-toolkit.zip → deploy to HFTS spaces (Turnstile)
### Space Management via Admin Panel
1. Add HuggingFace tokens in admin → HF Token Management
2. Auto-discover existing spaces or batch deploy new ones
3. Health check and autoscale from admin panel
4. Sync CF Worker env vars after adding/removing spaces
## Cloudflare Worker Configuration
The CF Worker routes by URL path prefix to the appropriate HF Space pool:
// cloudflare/ directory — key env vars to set in CF dashboard:
// OPENAI_SPACES = comma-separated HFNP space URLs
// GROK_SPACES = comma-separated HFGS space URLs
// KIRO_SPACES = comma-separated HFKR space URLs
// TS_SPACES = comma-separated HFTS space URLs
Use admin panel → **Sync CF Worker** to auto-update these from the DB.
## Code Examples
### Creating a Registration Task (API Client)
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
type CreateTaskRequest struct {
Platform string `json:"platform"` // "openai" | "grok" | "kiro" | "gemini"
Count int `json:"count"`
ProxyID *int `json:"proxy_id,omitempty"`
}
func createAndStartTask(baseURL, token string, req CreateTaskRequest) error {
client := &http.Client{}
// Create task
body, _ := json.Marshal(req)
httpReq, _ := http.NewRequest("POST", baseURL+"/api/tasks", bytes.NewBuffer(body))
httpReq.Header.Set("Content-Type", "application/json")
httpReq.Header.Set("X-Auth-Token", token)
resp, err := client.Do(httpReq)
if err != nil {
return err
}
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
taskID := result["id"]
// Start task
startReq, _ := http.NewRequest(
"POST",
fmt.Sprintf("%s/api/tasks/%v/start", baseURL, taskID),
nil,
)
startReq.Header.Set("X-Auth-Token", token)
_, err = client.Do(startReq)
return err
}
### Consuming Real-Time Logs via SSE
package main
import (
"bufio"
"fmt"
"net/http"
)
func streamLogs(baseURL, token, taskID string) {
req, _ := http.NewRequest(
"GET",
fmt.Sprintf("%s/ws/logs/%s/stream", baseURL, taskID),
nil,
)
req.Header.Set("X-Auth-Token", token)
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
scanner := bufio.NewScanner(resp.Body)
for scanner.Scan() {
line := scanner.Text()
if line != "" {
fmt.Println(line) // SSE data lines
}
}
}
### Exporting Results
func exportResults(baseURL, token, taskID string) ([]byte, error) {
req, _ := http.NewRequest(
"GET",
fmt.Sprintf("%s/api/results/%s/export", baseURL, taskID),
nil,
)
req.Header.Set("X-Auth-Token", token)
resp, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var buf bytes.Buffer
buf.ReadFrom(resp.Body)
return buf.Bytes(), nil
}
### Admin: Recharge User Credits
func rechargeCredits(baseURL, adminToken, username string, amount int) error {
payload := map[string]interface{}{
"username": username,
"amount": amount,
}
body, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", baseURL+"/api/admin/credits/recharge", bytes.NewBuffer(body))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-Auth-Token", adminToken)
resp, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
return nil
}
### SSO Integration (External Systems)
// SSO_SECRET must be set in .env
// External system redirects user to:
// GET /api/auth/sso?token=<hmac_signed_token>&username=<user>
// Generate SSO token (external system side):
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
)
func generateSSOToken(username, secret string) string {
mac := hmac.New(sha256.New, []byte(secret))
mac.Write([]byte(username))
return hex.EncodeToString(mac.Sum(nil))
}
## CI/CD: GitHub Actions
Push to `main` triggers automatic builds:
# .github/workflows/ builds these artifacts:
# - Docker image → GHCR (main service)
# - inference-runtime.zip → GitHub Release (OpenAI worker)
# - stream-worker.zip → GitHub Release (Grok worker)
# - browser-agent.zip → GitHub Release (Kiro worker)
# - gemini-agent.zip → GitHub Release (Gemini worker)
# - net-toolkit.zip → GitHub Release (Turnstile solver)
Workers are then deployed from Release artifacts to HF Spaces.
## Common Patterns
### Rate Limiting Awareness
Register: 3 requests/minute per IP
Login: 10 requests/minute per IP
Handle 429 responses with exponential backoff in clients.
### Admin Role Assignment
Strategy 1: First registered user → auto admin
Strategy 2: Set ADMIN_USERNAME=yourusername in .env
→ that username gets admin on registration
### Proxy Configuration
Proxies are managed per-user. Assign a proxy when creating tasks:POST /api/tasks
{
"platform": "openai",
"count": 10,
"proxy_id": 3
}
Or set `default_proxy` in system settings as a global fallback.
### WebSocket vs SSE for Logs
- Use `GET /ws/logs/:taskId/stream` (SSE) for simple HTTP clients
- Use `GET /ws/logs/:taskId` (WebSocket) for bidirectional or browser use cases
## Troubleshooting
### Database Connection Issues
# Verify DATABASE_URL format
DATABASE_URL=postgres://username:password@host:5432/dbname?sslmode=disable
# Check PostgreSQL is running
docker-compose ps
### Workers Not Receiving Tasks
1. Check CF Worker is deployed and env vars are set
2. Admin panel → HF Overview → verify spaces show as healthy
3. Admin panel → Sync CF Worker to push latest space URLs
4. Check `openai_reg_url` / `grok_reg_url` etc. in system settings point to CF Worker
### JWT Issues
# Ensure JWT_SECRET is set and ≥32 chars in production
JWT_SECRET=your-very-long-secret-key-at-least-32-characters
# Check JWT_EXPIRE_HOURS (default 72)
JWT_EXPIRE_HOURS=72
### CORS Errors
# Set allowed origins explicitly in production
CORS_ORIGINS=https://yourdomain.com,https://app.yourdomain.com
# DEV_MODE=true allows all origins (development only)
DEV_MODE=true
### First User Not Getting Admin
# Option 1: Ensure you're first to register on fresh DB
# Option 2: Set ADMIN_USERNAME before registering
ADMIN_USERNAME=your_desired_admin_username
### HF Space Health Check Failing
- Verify HF tokens are valid and have write access
- Check space build logs in HuggingFace dashboard
- Ensure worker binaries match platform (HFNP=OpenAI, HFGS=Grok, etc.)
- Use admin panel → Health Check to get per-space status
### Dev Mode Login
# Enable only for local testing
DEV_MODE=true
# Then: GET /api/auth/dev-login
# Returns a JWT without password (development convenience)
## Deployment Checklist
- [ ] `DATABASE_URL` set with valid PostgreSQL connection
- [ ] `JWT_SECRET` set to 32+ character random string
- [ ] `CORS_ORIGINS` set to your actual frontend domain(s)
- [ ] HuggingFace tokens added in admin panel
- [ ] HF Spaces deployed for needed platforms
- [ ] Cloudflare Worker deployed from `cloudflare/` directory
- [ ] CF Worker synced from admin panel
- [ ] System settings configured (mail service, captcha keys, reg URLs)
- [ ] `GIN_MODE=release` for production
- [ ] `DEV_MODE=false` for productionMore tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...