# 🏔️ Vela Platform **Self-hosted P&L tracking for C2C server/storage businesses.** Track revenue, costs, and margins across multiple service offers with granular component-level pricing. No SaaS fees, no subscriptions — just Python + SQLite. --- ## 📸 Quick Overview | Page | What it does | |------|-------------| | **Dashboard** `/` | P&L cards (revenue/cost/margin), 12-month trend chart, active offers | | **Transactions** `/transactions` | Log monthly revenue per client, filter by month, auto-summary | | **Offers** `/services` | View/edit component pricing (HDD, RAM, CPU, Support, Transport...), auto-computed totals | ## 🏔️ Offers | Offer | Description | Sell | Cost | Margin | Components | |-------|------------|------|------|--------|-----------| | **Atlas** | 1TB Storage | 4,000 MAD | 2,000 MAD | 2,000 MAD | 7 | | **Atlas+** | 1TB + Sauvegarde | 5,000 MAD | 2,800 MAD | 2,200 MAD | 9 | | **Rif** | 500GB Server | 3,500 MAD | 1,700 MAD | 1,800 MAD | 7 | | **Rif+** | 500GB + Sauvegarde | 4,500 MAD | 2,200 MAD | 2,300 MAD | 9 | ## 🔧 Component-Level Pricing Each offer has a granular breakdown of costs and sell prices. Edit any component independently — totals auto-recompute: ``` HDD (1TB) cost: 600 MAD ×1 sell: 1,000 MAD → margin: 400 MAD RAM (16GB) cost: 300 MAD ×1 sell: 500 MAD → margin: 200 MAD CPU alloc cost: 200 MAD ×1 sell: 400 MAD → margin: 200 MAD Bandwidth cost: 200 MAD ×1 sell: 500 MAD → margin: 300 MAD Support cost: 200 MAD ×1 sell: 700 MAD → margin: 500 MAD ──────────────────────────────────────────────────────────── Total cost: 2,000 MAD sell: 4,000 MAD margin: 2,000 MAD ``` ## 🚀 Quick Start ### Prerequisites - Python 3.11+ - pip or uv ### Install ```bash # Clone git clone http://192.168.1.160:3000/fedora-heremes/vela-platform.git cd vela-platform # Install deps cd backend pip install -r requirements.txt # Run uvicorn main:app --host 0.0.0.0 --port 8788 ``` The app auto-creates the database and seeds demo data on first run. ### systemd (auto-start) ```ini # ~/.config/systemd/user/vela-platform.service [Unit] Description=Vela Platform — P&L Tracking App [Service] ExecStart=%h/vela-platform/backend/venv/bin/uvicorn main:app --host 0.0.0.0 --port 8788 WorkingDirectory=%h/vela-platform/backend Restart=always [Install] WantedBy=default.target ``` ```bash systemctl --user daemon-reload systemctl --user enable --now vela-platform.service ``` ## 👥 Users | User | Role | Password | |------|------|----------| | `admin` | Owner (full access) | `admin123` | | `viewer` | Read-only | `viewer123` | ## 🔌 API All CRUD operations available via REST API. Authenticate with Bearer token. | Method | Endpoint | Description | |--------|----------|-------------| | POST | `/api/auth/login` | Login | | GET | `/api/services` | List offers + components | | POST | `/api/services/{id}/components` | Add component | | PUT | `/api/components/{id}` | Update component | | DELETE | `/api/components/{id}` | Delete component | | GET | `/api/transactions?month=YYYY-MM` | List transactions | | POST | `/api/transactions` | Add transaction | | GET | `/api/pnl?month=YYYY-MM` | P&L report | | GET | `/api/dashboard` | Overview + trend | ## 🤖 MCP Integration Use with AI agents via MCP (Model Context Protocol). Tools available: - `get_services()` — Full offers with component breakdowns - `get_service(id)` — Single offer detail - `add_component(...)` — Add component to an offer - `update_component(...)` — Update a component - `delete_component(id)` — Delete a component - `add_transaction(...)` — Log a sale - `get_pnl(month)` — P&L for a month - `get_dashboard()` — Current overview ## 🧱 Tech Stack - **Python 3** + **FastAPI** — API & web server - **SQLite** + **SQLAlchemy** — Database (zero config) - **Jinja2** + **Bootstrap 5** — Web UI (dark mode) - **Chart.js** — Trend charts - **JWT** — Auth (cookie + Bearer) - **MCP** — AI agent integration ## 📄 License MIT