Vertex is a modern Internal Developer Platform for teams that want a friendly, safe control plane for Kubernetes applications. It brings cluster health, application delivery, temporary environments, secrets, managed PostgreSQL, and logs into one focused workspace.
The repository is deliberately shaped like a real product: a small vertical-slice MVP, clean boundaries, local demo mode, and replaceable infrastructure adapters for the next stage of the platform.
- Dashboard: cluster health, workload counts, resource usage, and recent events
- Applications: deployment inventory, restart, scale, delete, logs, and a guided deploy wizard
- Environments: namespace lifecycle with ResourceQuota and LimitRange intent
- Secrets: CRUD for opaque Kubernetes secrets with a protected-value UX
- Databases: PostgreSQL provisioning contract with connection details
- Logs: searchable, auto-scrolling pod log viewer
- Settings: cluster capabilities, connection diagnostics, and platform configuration
flowchart LR
Browser[Vue 3 SPA] -->|REST / JWT| API[Vertex API]
API --> App[Application layer]
App --> Domain[Domain model]
App --> Infra[Infrastructure ports]
Infra --> PG[(PostgreSQL)]
Infra --> K8s[Kubernetes API]
Infra --> Helm[Helm / PostgreSQL operator]
Terraform[Terraform] --> K8s
Terraform --> Helm
The backend follows Clean Architecture:
backend/src/
Vertex.Domain/ Entities, value objects, domain rules
Vertex.Application/ Use cases, contracts, validators, ports
Vertex.Infrastructure/ EF Core, PostgreSQL, Kubernetes adapters, seed data
Vertex.Api/ FastEndpoints, auth, middleware, composition root
The frontend is feature-based so each domain surface can grow without turning the app into a component monolith.
Screenshots are intentionally left as placeholders until the product has a stable visual baseline:
docs/screenshots/dashboard.png
docs/screenshots/applications.png
- .NET SDK 10
- Node.js 22+
- Docker Desktop
The API defaults to an in-memory database and a deterministic Kubernetes simulator, which makes the UI available without a cluster.
dotnet run --project backend/src/Vertex.Api
cd frontend
npm install
npm run devThe API runs at http://localhost:5000; the Vue console runs at http://localhost:5173. Open the console URL, not the API URL. The API root intentionally has no UI route, so http://localhost:5000/ returns 404; use /health/live or the /api/* endpoints instead.
The local account is:
Email: admin@vertex.local
Password: vertex-dev
docker compose up --buildThe production-shaped compose profile starts PostgreSQL, Redis, the API, and the frontend. The API is available at http://localhost:5080 and the UI at http://localhost:8080.
The most important API settings are:
| Setting | Default | Purpose |
|---|---|---|
Database__UseInMemory |
true |
Use a local in-memory store for fast onboarding |
ConnectionStrings__Postgres |
Host=localhost;... |
PostgreSQL connection when in-memory mode is off |
Kubernetes__Mode |
Demo |
Demo or Cluster adapter |
Kubernetes__KubeConfigPath |
empty | Optional explicit kubeconfig path; otherwise KUBECONFIG, the default kubeconfig, or in-cluster credentials are used |
Kubernetes__Context |
empty | Optional kubeconfig context override |
Kubernetes__ConnectionTimeoutSeconds |
15 |
Timeout for Kubernetes REST calls, clamped to 1-120 seconds |
Jwt__Key |
development key | Signing key; replace in every real environment |
Cors__Origins__0 |
http://localhost:5173 |
Allowed browser origin |
Terraform is organized into modules for network, monitoring, and the Vertex platform. The root module provisions the namespace, PostgreSQL, Redis, Prometheus, Grafana, ingress-nginx, cert-manager, and the Vertex workloads. Credentials and cloud-specific networking are inputs rather than hard-coded values.
cd terraform
terraform init
terraform plan -var="environment=dev"
terraform apply -var="environment=dev"The Helm chart in helm/vertex can also be installed directly:
helm upgrade --install vertex ./helm/vertex --namespace vertex --create-namespace- Build and publish the API and frontend images from their Dockerfiles.
- Create a production
terraform.tfvarscontaining PostgreSQL and JWT secrets. - Apply the Terraform root module to install cluster dependencies and the platform.
- Set
Kubernetes__Mode=Clusterand deploy the API with a service account that has the permissions described by the Helm chart. - Configure TLS through cert-manager and the supplied ingress resources.
The API exposes /health/live and /health/ready. Workload manifests include resource requests/limits, probes, a PodDisruptionBudget, and HPA-ready labels/configuration.
Set Kubernetes__Mode=Cluster for the API (the Helm chart does this by default). In this mode the dashboard reads the Kubernetes API server version, namespaces, nodes, pods, deployments, storage classes, ingress classes, and recent events through KubernetesClient. CPU and memory utilization are read from metrics.k8s.io when metrics-server is installed; if it is unavailable, Vertex displays — and logs a clear warning instead of fabricating telemetry. Local Demo mode is deliberately seeded and labelled as demo data.
Cluster mode is intentionally lazy. Vertex starts even when kubeconfig or cluster credentials are missing, and the Settings screen exposes a guided setup panel instead of presenting a startup exception. The panel reports the connection error, provides copyable verification commands, and allows the operator to retry the connection.
For a local API process, configure one of these options before restarting the API:
$env:Kubernetes__Mode = "Cluster"
$env:KUBECONFIG = "$HOME\.kube\config"
# Optional: $env:Kubernetes__Context = "my-context"
dotnet run --project backend/src/Vertex.ApiFor a Kubernetes deployment, keep Kubernetes__Mode=Cluster and use the service account mounted into the API pod. The API does not accept or persist kubeconfig contents through the browser; credentials remain in the process environment, mounted file, or Kubernetes service-account token. Use the Settings connection check to confirm access, then install metrics-server if CPU and memory telemetry is required.
- GitHub, GitLab, and Azure DevOps source integrations
- Argo CD application synchronization
- Multi-cluster target selection
- OIDC login, RBAC, and team/project ownership
- Audit log and notification center
- Plugin SDK for custom resource providers
- SLO dashboards and richer Prometheus queries
Vertex is an architectural MVP intended to evolve into an open-source developer platform.