Skip to main content
Version: 0.4.x

W'xOps Portal

An Internal Developer Portal built on Kubernetes-native tooling. One login, one catalog, one place to scaffold, observe, and manage services across environments.

W'xOps platform landscape — stakeholders, the WxIDP portal, and the WxInfrastructure/WxPlatform planes

Why This Exists

In the AI era, a developer can scaffold, implement, and ship a service in a single day. The bottleneck isn't writing code anymore — it's context.

When a new team member joins on day 2, they inherit a system built on day 1 by someone who may have already moved on. Without a portal, they ask: "What is this service? Why was it built this way? What does it depend on? Is it running? Where are the secrets? Who owns it?"

The answers live in Slack threads, meeting notes, tribal knowledge, and half-written wikis. They rot within weeks.

W'xOps Portal makes the entire project lifecycle self-documenting:

Day-2 questionPortal answers with
What is this service?Catalog entity: description, owner, system, type
Why was it built this way?RFC and ADR docs linked via relatedTo
What template was used?Scaffold info card: template-id, scaffold date
What does it depend on?Relationships: dependsOn, consumesApis
Is it running?ArgoCD sync status via Pinniped (per environment)
What version is deployed?CI/CD card: latest image tags per branch
Where are the secrets?Vault path annotation (write-only, no exposure)
How do I operate it?Runbook doc linked to the component
Who owns it?Owner field → team, with team members listed
What happened before I joined?Activity feed: PRs, promotions, config changes

How It Fits Together

SystemRolePortal interaction
GiteaGit hosting, CI/CD, container registryRead repos/commits/PRs/workflow runs. Write: create repos, commit files, open PRs
VaultSecret managementWrite-only: create/update secrets. No read, no delete
PinnipedSSO + K8s authUser login (OIDC/PKCE), session forwarded to K8s for cluster reads
ArgoCDGitOps continuous deliveryRead Application CRs via K8s API (sync status, health, deployed images)
CrossplaneInfrastructure provisioningXTenantApp, XTenantDatabase CRs; read status via K8s API
KubernetesRuntime platformRead-only from portal — pods, services, ingress status via Pinniped credentials

Core Features

Service Catalog

A registry of all services, APIs, databases, teams, and documentation. Catalog data lives in gitops-infra/service-catalog/ as Backstage-compatible YAML. The portal reads it via Gitea API with a 5-minute cache — no catalog server required.

Service Catalog

Golden-Path Scaffolding

One-click project creation from curated templates. The portal creates a Gitea repo, XTenantApp manifests, catalog entities, Vault secrets, and a gitops-infra PR — all from a single form. ArgoCD picks up the merge; Crossplane provisions.

Golden Path

Lifecycle Promotion

PR-driven, role-gated promotion from experimental through development, staging, and production. The Promotion panel on each Component detail page manages overlays, shows open PRs, and tracks deployed image tags per environment.

Darlane (Inner-Loop Debug)

On-demand parallel debug pods provisioned by the XTenantApp Composition. Sync files live with wxops darlane sync, mirror production traffic via Mirrord, exec directly — without touching the main deployment.

Darlane

wxops CLI

Terminal access to login, catalog browsing, service debugging, file sync, and pod restart — without direct Gitea or Kubernetes credentials.

CLI Reference

Multi-Cluster Access

One Pinniped login, all spoke clusters. The portal proxies K8s reads using the user's own token — RBAC controls what each user sees; no service accounts needed on spokes.

Architecture