| Status: Ready for Development | Duration: 3 weeks | Team: 3 agents (Developer, Reviewer, Deployer) |
┌─────────────────────────────────────────────────────────────┐
│ Frontend (React + Tailwind) @ localhost:3000 │
│ - Dashboard (orders, proxies, accounts, profit) │
│ - Real-time updates via WebSocket │
│ - Charts (Recharts) │
│ - GitHub Pages static build │
└──────────────────┬──────────────────────────────────────────┘
│ HTTP + WebSocket
┌──────────────────▼──────────────────────────────────────────┐
│ Backend (Node.js + Express) @ localhost:3001 │
│ - API routes (CRUD for orders, proxies, accounts, expenses) │
│ - Discord webhook listener │
│ - SQLite database (Prisma ORM) │
│ - WebSocket server for real-time updates │
└──────────────────┬──────────────────────────────────────────┘
│
┌──────────────────▼──────────────────────────────────────────┐
│ Data Layer (SQLite) │
│ - Orders, Proxies, Accounts, Expenses, Settings │
└─────────────────────────────────────────────────────────────┘
Duration: 4 days | Deliverable: Backend API running locally
Tasks:
GET /api/dashboard - Summary statsGET /api/orders - List ordersPOST /api/orders - Create order (from Discord)GET /api/proxies - List proxiesPOST /api/proxies - Add proxyPUT /api/proxies/:id - Update proxy healthDELETE /api/proxies/:id - Delete proxyGET /api/accounts - List accountsPOST /api/accounts - Add accountGET /api/expenses - List expensesPOST /api/expenses - Log expenseGET /api/settings - Get settingsPUT /api/settings - Update settingsSuccess Criteria:
npm run devDuration: 4 days | Deliverable: Frontend dashboard UI with all screens
Tasks:
Success Criteria:
npm run devDuration: 3 days | Deliverable: All features tested, bugs fixed, PRs approved
Tasks:
Success Criteria:
Duration: 2 days | Deliverable: Live demo on GitHub Pages
Tasks:
Success Criteria:
Commits: Feature branches → PRs for review
Output: Approved PRs, bug reports, performance notes
Output: Live GitHub Pages demo, CI/CD pipeline working
botting-os/
├── backend/
│ ├── src/
│ │ ├── server.ts # Express app
│ │ ├── db.ts # Prisma setup
│ │ ├── routes/
│ │ │ ├── orders.ts
│ │ │ ├── proxies.ts
│ │ │ ├── accounts.ts
│ │ │ ├── expenses.ts
│ │ │ └── settings.ts
│ │ ├── services/
│ │ │ ├── orderService.ts
│ │ │ ├── proxyHealthCheck.ts
│ │ │ └── discordListener.ts
│ │ └── websocket.ts
│ ├── prisma/
│ │ ├── schema.prisma
│ │ └── migrations/
│ ├── package.json
│ └── tsconfig.json
│
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ │ ├── Dashboard.tsx
│ │ │ ├── OrdersList.tsx
│ │ │ ├── ProxyDashboard.tsx
│ │ │ ├── AccountsList.tsx
│ │ │ ├── ProfitChart.tsx
│ │ │ └── SettingsPage.tsx
│ │ ├── pages/
│ │ ├── store/
│ │ │ └── appStore.ts # Zustand
│ │ ├── services/
│ │ │ └── api.ts # Fetch calls
│ │ ├── App.tsx
│ │ └── index.tsx
│ ├── package.json
│ ├── tailwind.config.js
│ └── tsconfig.json
│
├── docs/
│ ├── BOTTING_OS_MVP_PRD.md
│ ├── IMPLEMENTATION_PLAN.md
│ └── API.md
│
├── .github/
│ └── workflows/
│ └── deploy.yml # CI/CD
│
└── README.md
GET /api/dashboard
Response: {
activeOrders: 12,
deadProxies: 3,
flaggedAccounts: 2,
profitThisWeek: 450.50,
successRate: 87.3
}
GET /api/orders?store=Nike&status=success
POST /api/orders
PUT /api/orders/:id
GET /api/orders/:id
GET /api/proxies
POST /api/proxies
PUT /api/proxies/:id (update health)
DELETE /api/proxies/:id
POST /api/proxies/:id/test
GET /api/accounts
POST /api/accounts
PUT /api/accounts/:id
DELETE /api/accounts/:id
GET /api/expenses
POST /api/expenses
GET /api/settings
PUT /api/settings
POST /api/discord/webhook
// Server → Client
event "order:new" → { id, store, product, price, timestamp }
event "proxy:update" → { id, health, responseTime }
event "account:update" → { id, healthScore, restrictions }
// Client → Server
event "proxy:test" → { id }
event "account:check" → { id }
model Order {
id String @id @default(cuid())
discordMessageId String?
store String
product String
size String?
price Float
profit Float
status String // pending | success | failed
failureReason String?
timestamp DateTime @default(now())
checkoutTime Int? // milliseconds
}
model Proxy {
id String @id @default(cuid())
ip String @unique
port Int
location String?
lastTestedAt DateTime?
health String // green | yellow | red
responseTime Int? // milliseconds
errorCount Int @default(0)
rotationCount Int @default(0)
uptime7d Float @default(100)
createdAt DateTime @default(now())
}
model Account {
id String @id @default(cuid())
store String
email String @unique
passwordHash String
accountAge Int // days
healthScore Int // 0-100
lastOrderAt DateTime?
restrictions String? // none | flagged | captcha | verification
status String // active | dead | archived
createdAt DateTime @default(now())
}
model Expense {
id String @id @default(cuid())
category String // proxies | bots | accounts
amount Float
date DateTime @default(now())
description String?
}
model Settings {
id String @id @default(cuid())
key String @unique
value String
updatedAt DateTime @updatedAt
}
Phase 1 Complete When:
Phase 2 Complete When:
Phase 3 Complete When:
Phase 4 Complete When:
Agents communicate via:
Felix (me) coordinates: