511 lines
18 KiB
Markdown
511 lines
18 KiB
Markdown
|
|
<div align="center">
|
||
|
|
|
||
|
|
<img src="imgs/vapora.svg" alt="Vapora Logo" width="400">
|
||
|
|
|
||
|
|
- 🌊 Cloud-native project management with AI agents
|
||
|
|
- 🎯 Kanban workflows with glassmorphism UI
|
||
|
|
- 🤖 Unified agent runtime powered by MCP
|
||
|
|
- ⚡ Built with Rust from backend to frontend
|
||
|
|
|
||
|
|
[](LICENSE)
|
||
|
|
[](https://www.rust-lang.org)
|
||
|
|
[](https://kubernetes.io)
|
||
|
|
[](https://istio.io)
|
||
|
|
|
||
|
|
[Features](#-features) • [Quick Start](#-quick-start) • [Architecture](#-architecture) • [Docs](docs/) • [Contributing](#-contributing)
|
||
|
|
|
||
|
|
</div>
|
||
|
|
---
|
||
|
|
|
||
|
|
```txt
|
||
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
|
╦ ╦╔═╗╔═╗╔═╗╦═╗╔═╗
|
||
|
|
╚╗╔╝╠═╣╠═╝║ ║╠╦╝╠═╣
|
||
|
|
╚╝ ╩ ╩╩ ╚═╝╩╚═╩ ╩
|
||
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
|
Vaporate complexity
|
||
|
|
Where ideas vaporize into reality
|
||
|
|
```
|
||
|
|
|
||
|
|
## 🌟 What is Vapora?
|
||
|
|
|
||
|
|
**Vapora** is a next-generation project management platform that combines elegant Kanban workflows with intelligent AI agents. Built entirely in Rust, it offers a cloud-native
|
||
|
|
architecture designed for teams that demand both beauty and performance.
|
||
|
|
|
||
|
|
### Key Highlights
|
||
|
|
|
||
|
|
- **🎨 Tron-Inspired UI**: Glassmorphism design with vaporwave aesthetics powered by UnoCSS
|
||
|
|
- **🤖 AI-First**: Unified agent runtime using Model Context Protocol (MCP)
|
||
|
|
- **🚀 Full-Stack Rust**: From frontend (Leptos WASM) to backend (Axum) to infrastructure
|
||
|
|
- **☁️ Cloud-Agnostic**: Runs on any Kubernetes cluster with Istio service mesh
|
||
|
|
- **🔌 Extensible**: Plugin system for custom agents and integrations
|
||
|
|
- **🔒 Multi-Tenant**: Enterprise-grade isolation with namespace-level security
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ✨ Features
|
||
|
|
|
||
|
|
### 📋 Project Management
|
||
|
|
|
||
|
|
- **Kanban Board**: Drag-and-drop tasks across Todo → Doing → Review → Done columns
|
||
|
|
- **Real-time Collaboration**: Optimistic updates for instant UI feedback
|
||
|
|
- **Smart Organization**: Feature tags, priority levels, task ordering
|
||
|
|
- **Responsive Design**: Works seamlessly from mobile to ultra-wide displays
|
||
|
|
|
||
|
|
### 🤖 AI Agent Runtime
|
||
|
|
|
||
|
|
- **MCP Gateway Integration**: Unified interface for OpenAI, Claude, and custom agents
|
||
|
|
- **Plugin Architecture**: Extend functionality with MCP-compatible plugins
|
||
|
|
- **Built-in Capabilities**:
|
||
|
|
- 🔍 **Code Analysis**: Tree-sitter parsing + LLM semantic review
|
||
|
|
- 📚 **RAG Search**: Semantic search over knowledge base with local embeddings
|
||
|
|
- 📝 **Doc Generation**: Auto-generate technical documentation from code
|
||
|
|
- ⚙️ **Task Execution**: Automate GitHub PRs, Jira updates, webhooks
|
||
|
|
|
||
|
|
### 🏗️ Infrastructure
|
||
|
|
|
||
|
|
- **Kubernetes Native**: Built for K8s (K3s, RKE2, or vanilla)
|
||
|
|
- **Istio Service Mesh**: mTLS, circuit breakers, rate limiting out of the box
|
||
|
|
- **Secrets Management**: RustyVault or Cosmian KMS (Rust-native)
|
||
|
|
- **Storage**: Rook Ceph for distributed persistent volumes
|
||
|
|
- **CI/CD**: Tekton Pipelines with Gitea integration
|
||
|
|
- **Registry**: Zot for lightweight OCI artifact storage
|
||
|
|
- **Observability**: Prometheus + Grafana + Loki + Tempo + Kiali
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🛠️ Tech Stack
|
||
|
|
|
||
|
|
### Backend
|
||
|
|
|
||
|
|
<pre>
|
||
|
|
Rust Async runtime with Tokio
|
||
|
|
Axum Fast, ergonomic web framework
|
||
|
|
SurrealDB Multi-model database with scopes
|
||
|
|
NATS JetStream Message queue for agent jobs
|
||
|
|
Rig AI agent framework
|
||
|
|
</pre>
|
||
|
|
|
||
|
|
### Frontend
|
||
|
|
|
||
|
|
<pre>
|
||
|
|
Leptos Reactive Rust WASM framework
|
||
|
|
UnoCSS Instant on-demand atomic CSS
|
||
|
|
leptos-use Hooks and utilities
|
||
|
|
thaw Component library
|
||
|
|
</pre>
|
||
|
|
|
||
|
|
### Infrastructure
|
||
|
|
|
||
|
|
<pre>
|
||
|
|
Kubernetes Orchestration (K3s/RKE2)
|
||
|
|
Istio Service mesh + ingress
|
||
|
|
Rook Ceph Distributed storage
|
||
|
|
Tekton Cloud-native CI/CD
|
||
|
|
RustyVault Secrets management
|
||
|
|
Zot OCI registry
|
||
|
|
Gitea Self-hosted Git
|
||
|
|
</pre>
|
||
|
|
|
||
|
|
### Agents
|
||
|
|
|
||
|
|
<pre>
|
||
|
|
MCP Gateway Docker MCP gateway for unified agents
|
||
|
|
OpenAI AgentKit OpenAI agent integration
|
||
|
|
Claude Agent SDK Anthropic Claude integration
|
||
|
|
fastembed Local embeddings (privacy-first)
|
||
|
|
tree-sitter Code parsing
|
||
|
|
</pre>
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚀 Quick Start
|
||
|
|
|
||
|
|
### Prerequisites
|
||
|
|
|
||
|
|
- **Rust 1.75+** ([rustup](https://rustup.rs))
|
||
|
|
- **Node.js 20+** (for UnoCSS)
|
||
|
|
- **Docker** (for local development)
|
||
|
|
- **Kubernetes cluster** (for production)
|
||
|
|
|
||
|
|
### Local Development
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Clone the repository
|
||
|
|
git clone https://github.com/vapora-platform/vapora
|
||
|
|
cd vapora
|
||
|
|
|
||
|
|
# Install dependencies
|
||
|
|
cargo build
|
||
|
|
|
||
|
|
# Setup SurrealDB (Docker)
|
||
|
|
docker run -d --name surrealdb \
|
||
|
|
-p 8000:8000 \
|
||
|
|
surrealdb/surrealdb:latest \
|
||
|
|
start --bind 0.0.0.0:8000 file://data/database.db
|
||
|
|
|
||
|
|
# Run migrations
|
||
|
|
cd migrations && surrealdb import --conn http://localhost:8000 *.surql
|
||
|
|
|
||
|
|
# Start backend
|
||
|
|
cd ../vapora-backend
|
||
|
|
cargo run
|
||
|
|
|
||
|
|
# Start frontend (new terminal)
|
||
|
|
cd ../vapora-frontend
|
||
|
|
trunk serve
|
||
|
|
|
||
|
|
Visit http://localhost:3000 🎉
|
||
|
|
|
||
|
|
Docker Compose (Full Stack)
|
||
|
|
|
||
|
|
docker compose up -d
|
||
|
|
|
||
|
|
Includes: Backend, Frontend, SurrealDB, NATS, MCP Gateway
|
||
|
|
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
🏗️ Architecture
|
||
|
|
|
||
|
|
```
|
||
|
|
┌─────────────────────────────────────────────────────┐
|
||
|
|
│ Frontend (Leptos + UnoCSS) │
|
||
|
|
│ Glassmorphism UI • Kanban Board • Drag & Drop │
|
||
|
|
└────────────────────┬────────────────────────────────┘
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────────────────────────────────────────┐
|
||
|
|
│ Istio Ingress Gateway │
|
||
|
|
│ mTLS • Rate Limiting • Circuit Breaker • Telemetry │
|
||
|
|
└────────────────────┬────────────────────────────────┘
|
||
|
|
│
|
||
|
|
┌────────────┼────────────┐
|
||
|
|
▼ ▼ ▼
|
||
|
|
┌────────┐ ┌──────────┐ ┌───────────────┐
|
||
|
|
│ Axum │ │ Agent │ │ MCP Gateway │
|
||
|
|
│ API │ │ Runtime │ │ │
|
||
|
|
└───┬────┘ └────┬─────┘ └───────┬───────┘
|
||
|
|
│ │ │
|
||
|
|
│ │ ▼
|
||
|
|
│ │ ┌──────────────┐
|
||
|
|
│ │ │ MCP Plugins │
|
||
|
|
│ │ │ - Code │
|
||
|
|
│ │ │ - RAG │
|
||
|
|
│ │ │ - GitHub │
|
||
|
|
│ │ │ - Jira │
|
||
|
|
│ │ └──────────────┘
|
||
|
|
│ │ │
|
||
|
|
▼ ▼ ▼
|
||
|
|
┌─────────────────────────────────────┐
|
||
|
|
│ SurrealDB Cluster │
|
||
|
|
│ (Rook Ceph Persistent Vol) │
|
||
|
|
└─────────────────────────────────────┘
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────────────────────────┐
|
||
|
|
│ RustyVault / Cosmian KMS │
|
||
|
|
│ (Secrets + Key Management) │
|
||
|
|
└─────────────────────────────────────┘
|
||
|
|
```
|
||
|
|
|
||
|
|
Data Flow
|
||
|
|
|
||
|
|
1. User interacts with Leptos UI (Kanban board)
|
||
|
|
2. API calls go through Istio Ingress with mTLS
|
||
|
|
3. Axum backend handles CRUD operations
|
||
|
|
4. SurrealDB stores projects, tasks, agents (multi-tenant scopes)
|
||
|
|
5. Agent jobs queued in NATS JetStream
|
||
|
|
6. Agent Runtime invokes MCP Gateway
|
||
|
|
7. MCP Gateway routes to OpenAI/Claude with plugin tools
|
||
|
|
8. Results streamed back to UI with optimistic updates
|
||
|
|
|
||
|
|
---
|
||
|
|
📸 Screenshots
|
||
|
|
|
||
|
|
Kanban Board with Glassmorphism
|
||
|
|
|
||
|
|
```
|
||
|
|
┌─────────────────────────────────────────────────────────┐
|
||
|
|
│ Vapora 🔍 Search Projects Agents + New │
|
||
|
|
├─────────────────────────────────────────────────────────┤
|
||
|
|
│ │
|
||
|
|
│ ┌─────────┬─────────┬─────────┬─────────┐ │
|
||
|
|
│ │ 📌 TODO 🔵 DOING 🟣 REVIEW ✅ DONE │ │
|
||
|
|
│ │ (5) │ (3) │ (2) │ (12) │ │
|
||
|
|
│ ├─────────┼─────────┼─────────┼─────────┤ │
|
||
|
|
│ │ ┌─────┐ │ ┌─────┐ │ ┌─────┐ │ ┌─────┐ │ │
|
||
|
|
│ │ │Task │ │ │Task │ │ │Task │ │ │Task │ │ │
|
||
|
|
│ │ │Card │ │ │Card │ │ │Card │ │ │Card │ │ │
|
||
|
|
│ │ └─────┘ │ └─────┘ │ └─────┘ │ └─────┘ │ │
|
||
|
|
│ │ │ │ │ │ │
|
||
|
|
│ │ Glass │ Neon │ Vapor │ Fluid │ │
|
||
|
|
│ │ Blur │ Glow │ Waves │ Motion │ │
|
||
|
|
│ └─────────┴─────────┴─────────┴─────────┘ │
|
||
|
|
└─────────────────────────────────────────────────────────┘
|
||
|
|
```
|
||
|
|
|
||
|
|
Agent Plugin Marketplace
|
||
|
|
|
||
|
|
```
|
||
|
|
┌─────────────────────────────────────────────────────────┐
|
||
|
|
│ MCP Plugins 🔌 Install New │
|
||
|
|
├─────────────────────────────────────────────────────────┤
|
||
|
|
│ ┌──────────────────────────────────────────┐ │
|
||
|
|
│ │ 🔍 Code Analysis Plugin │ │
|
||
|
|
│ │ Analyze code with tree-sitter + LLM │ │
|
||
|
|
│ │ • Rust, TypeScript, Python │ │
|
||
|
|
│ │ • Complexity metrics │ │
|
||
|
|
│ │ [✓ Installed] │ │
|
||
|
|
│ └──────────────────────────────────────────┘ │
|
||
|
|
│ │
|
||
|
|
│ ┌──────────────────────────────────────────┐ │
|
||
|
|
│ │ 📚 RAG Search Plugin │ │
|
||
|
|
│ │ Semantic search over knowledge base │ │
|
||
|
|
│ │ • Local embeddings (fastembed) │ │
|
||
|
|
│ │ • Top-k retrieval │ │
|
||
|
|
│ │ [Install] │ │
|
||
|
|
│ └──────────────────────────────────────────┘ │
|
||
|
|
└─────────────────────────────────────────────────────────┘
|
||
|
|
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
📦 Project Structure
|
||
|
|
|
||
|
|
```
|
||
|
|
vapora/
|
||
|
|
├── vapora-backend/ # Axum API server
|
||
|
|
├── vapora-agents/ # Agent runtime + MCP integration
|
||
|
|
├── vapora-mcp-plugins/ # MCP plugin collection
|
||
|
|
│ ├── code-plugin/
|
||
|
|
│ ├── rag-plugin/
|
||
|
|
│ ├── github-plugin/
|
||
|
|
│ └── jira-plugin/
|
||
|
|
├── vapora-shared/ # Shared models and utilities
|
||
|
|
├── vapora-frontend/ # Leptos CSR application
|
||
|
|
├── kubernetes/ # K8s manifests
|
||
|
|
│ ├── base/
|
||
|
|
│ ├── overlays/
|
||
|
|
│ └── platform/
|
||
|
|
├── tekton/ # CI/CD pipelines
|
||
|
|
├── migrations/ # SurrealDB migrations
|
||
|
|
└── docs/ # Documentation
|
||
|
|
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
🔌 MCP Plugin Development
|
||
|
|
|
||
|
|
Create custom agents with the MCP plugin system:
|
||
|
|
|
||
|
|
```rust
|
||
|
|
use vapora_mcp::{Plugin, Tool, Resource};
|
||
|
|
|
||
|
|
#[derive(Plugin)]
|
||
|
|
pub struct MyCustomPlugin;
|
||
|
|
|
||
|
|
impl Plugin for MyCustomPlugin {
|
||
|
|
fn name(&self) -> &str {
|
||
|
|
"my-custom-plugin"
|
||
|
|
}
|
||
|
|
|
||
|
|
fn tools(&self) -> Vec<Tool> {
|
||
|
|
vec![
|
||
|
|
Tool::new("my_tool")
|
||
|
|
.description("Does something cool")
|
||
|
|
.parameter("input", "string")
|
||
|
|
]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
#[async_trait]
|
||
|
|
impl ToolExecutor for MyCustomPlugin {
|
||
|
|
async fn execute_tool(
|
||
|
|
&self,
|
||
|
|
tool: &str,
|
||
|
|
params: serde_json::Value
|
||
|
|
) -> Result<serde_json::Value> {
|
||
|
|
match tool {
|
||
|
|
"my_tool" => {
|
||
|
|
// Your logic here
|
||
|
|
Ok(json!({"result": "success"}))
|
||
|
|
}
|
||
|
|
_ => Err(anyhow!("Unknown tool"))
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
See docs/mcp-plugins.md for full guide.
|
||
|
|
|
||
|
|
---
|
||
|
|
🚢 Deployment
|
||
|
|
|
||
|
|
Kubernetes (Production)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Setup cluster with Istio + Rook Ceph
|
||
|
|
./scripts/setup-cluster.sh
|
||
|
|
|
||
|
|
# Deploy platform services (Vault, Gitea, Zot, etc.)
|
||
|
|
./scripts/deploy-platform.sh
|
||
|
|
|
||
|
|
# Deploy Vapora application
|
||
|
|
kubectl apply -k kubernetes/overlays/production
|
||
|
|
|
||
|
|
# Create a tenant
|
||
|
|
./scripts/create-tenant.sh acme
|
||
|
|
|
||
|
|
Environment Variables
|
||
|
|
|
||
|
|
# Backend
|
||
|
|
SURREAL_URL=http://surrealdb:8000
|
||
|
|
NATS_URL=nats://nats:4222
|
||
|
|
MCP_GATEWAY_URL=http://mcp-gateway:8080
|
||
|
|
RUSTYVAULT_ADDR=https://rustyvault:8200
|
||
|
|
|
||
|
|
# Frontend
|
||
|
|
VITE_API_URL=https://api.vapora.dev
|
||
|
|
|
||
|
|
# Secrets (stored in RustyVault)
|
||
|
|
OPENAI_API_KEY=sk-...
|
||
|
|
ANTHROPIC_API_KEY=sk-ant-...
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
🧪 Testing
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Backend tests
|
||
|
|
cd vapora-backend
|
||
|
|
cargo test
|
||
|
|
|
||
|
|
# Frontend tests
|
||
|
|
cd vapora-frontend
|
||
|
|
cargo test --target wasm32-unknown-unknown
|
||
|
|
|
||
|
|
# Integration tests
|
||
|
|
cargo test --workspace
|
||
|
|
|
||
|
|
# E2E tests (requires running services)
|
||
|
|
./scripts/run-e2e-tests.sh
|
||
|
|
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
📊 Monitoring
|
||
|
|
|
||
|
|
Access Grafana dashboards:
|
||
|
|
|
||
|
|
kubectl port-forward -n observability svc/grafana 3000:80
|
||
|
|
|
||
|
|
Pre-configured dashboards:
|
||
|
|
- Vapora Overview: Request rates, latencies, errors
|
||
|
|
- Agent Metrics: Job queue depth, execution times, token usage
|
||
|
|
- Istio Service Mesh: Traffic flows, mTLS status
|
||
|
|
- Ceph Storage: Capacity, IOPS, health
|
||
|
|
|
||
|
|
---
|
||
|
|
🤝 Contributing
|
||
|
|
|
||
|
|
We welcome contributions! Please see CONTRIBUTING.md.
|
||
|
|
|
||
|
|
Development Workflow
|
||
|
|
|
||
|
|
1. Fork the repository
|
||
|
|
2. Create a feature branch (git checkout -b feature/amazing)
|
||
|
|
3. Commit your changes (git commit -m 'Add amazing feature')
|
||
|
|
4. Push to branch (git push origin feature/amazing)
|
||
|
|
5. Open a Pull Request
|
||
|
|
|
||
|
|
Code Style
|
||
|
|
|
||
|
|
- Rust: Follow rustfmt and clippy recommendations
|
||
|
|
- Frontend: Use UnoCSS shortcuts, avoid inline styles
|
||
|
|
- Commits: Conventional commits (feat:, fix:, docs:, etc.)
|
||
|
|
|
||
|
|
---
|
||
|
|
📄 License
|
||
|
|
|
||
|
|
Dual-licensed under:
|
||
|
|
|
||
|
|
- MIT License (LICENSE-MIT)
|
||
|
|
- Apache License 2.0 (LICENSE-APACHE)
|
||
|
|
|
||
|
|
You may choose either license.
|
||
|
|
|
||
|
|
---
|
||
|
|
🙏 Acknowledgments
|
||
|
|
|
||
|
|
Inspired by:
|
||
|
|
- https://github.com/transcend-engineering/archon - Original glassmorphism UI concept
|
||
|
|
- https://github.com/docker/mcp-gateway - MCP integration pattern
|
||
|
|
- https://rook.io - Ceph storage operator
|
||
|
|
- https://istio.io - Service mesh architecture
|
||
|
|
|
||
|
|
Built with ❤️ using Rust 🦀
|
||
|
|
|
||
|
|
---
|
||
|
|
🔗 Links
|
||
|
|
|
||
|
|
- Website: https://vapora.dev
|
||
|
|
- Documentation: https://docs.vapora.dev
|
||
|
|
- GitHub: https://github.com/vapora-platform/vapora
|
||
|
|
- Discord: https://discord.gg/vapora
|
||
|
|
- Twitter: https://twitter.com/VaporaPlatform
|
||
|
|
|
||
|
|
---
|
||
|
|
#readme
|
||
|
|
|
||
|
|
Made with vaporwave dreams and Rust reality ✨
|
||
|
|
|
||
|
|
---
|
||
|
|
Archivos Adicionales Recomendados
|
||
|
|
|
||
|
|
CONTRIBUTING.md
|
||
|
|
|
||
|
|
# Contributing to Vapora
|
||
|
|
|
||
|
|
Thank you for your interest in contributing to Vapora!
|
||
|
|
|
||
|
|
## Code of Conduct
|
||
|
|
|
||
|
|
Be respectful, inclusive, and constructive.
|
||
|
|
|
||
|
|
## Development Setup
|
||
|
|
|
||
|
|
See [README.md](README.md#-quick-start) for setup instructions.
|
||
|
|
|
||
|
|
## Pull Request Process
|
||
|
|
|
||
|
|
1. Update documentation for any API changes
|
||
|
|
2. Add tests for new features
|
||
|
|
3. Ensure `cargo clippy` and `cargo fmt` pass
|
||
|
|
4. Update CHANGELOG.md
|
||
|
|
|
||
|
|
## Coding Standards
|
||
|
|
|
||
|
|
- **Rust**: Idiomatic Rust, avoid `unwrap()`, use `?` operator
|
||
|
|
- **Error Handling**: Use `anyhow::Result` for services, custom errors for API
|
||
|
|
- **Documentation**: All public items must have doc comments
|
||
|
|
- **Tests**: Unit tests for services, integration tests for API
|
||
|
|
|
||
|
|
## Commit Messages
|
||
|
|
|
||
|
|
Follow [Conventional Commits](https://www.conventionalcommits.org/):
|
||
|
|
|
||
|
|
feat: add code analysis plugin
|
||
|
|
fix: resolve race condition in task reordering
|
||
|
|
docs: update MCP plugin guide
|
||
|
|
chore: bump dependencies
|
||
|
|
|
||
|
|
|
||
|
|
LICENSE-MIT y LICENSE-APACHE
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
⚠️ **Brand Assets Location**: See [`./imgs/`](./imgs/) for complete brand system including logo variations, color palettes, and interactive preview → [Open Logo Preview](./imgs/vapora_logo.html)
|
||
|
|
|
||
|
|
---
|