Skip to content
Selected work

03 · AppsCode · Product Design

ACE Console

The ACE Console is where teams bring Kubernetes clusters from any cloud under management and run them as one fleet. I own its UI: the information architecture, every flow and screen, and the Vue code behind them.

Cloud providers to import from
8Cloud providers to import from
Ways to bring a cluster in
4Ways to bring a cluster in
Hub to run many clusters as a set
1Hub to run many clusters as a set
Designer
Mohin Uddin
Role
Product Design, Information Architecture, UI Engineering
Timeline
AppsCode · ongoing
Technology
Vue 3, Nuxt, Tailwind CSS v4, Figma, AppsCode Design System
  • Shipped at AppsCodein production consoles
  • Real screenssensitive values blurred
  • Design and UI code by meAPIs by the engineering team

My role

What I did
I own the console’s UI end to end: the information architecture, the flows, every screen and state, and the Vue UI code, built on the design system I made.
Team
Me, with 3–4 engineers who connect the APIs and data
Duration
Ongoing, day by day, across my 7 years at AppsCode (opens in a new tab)

At a glance

  1. 01 · The problem

    Running Kubernetes across clouds meant a terminal, a pile of kubeconfigs and installers run by hand on every cluster.

    Read the problem
  2. 02 · The approach

    Six rules I design every console screen by.

    See the approach
  3. 03 · The result

    One console now takes a cluster from any cloud to a managed fleet.

    See the result

01 · Challenge

Running Kubernetes across clouds meant a terminal, a pile of kubeconfigs and installers run by hand on every cluster.

  • Teams work across several organisations and dozens of clusters, so the costly mistake is the right command on the wrong cluster.
  • Getting a cluster ready meant installing platform components, a GitOps engine, licences and operators, in the right order, one cluster at a time.
  • Nobody could see the whole fleet at once: which cluster was disconnected, not ready or waiting on an upgrade.

BeforeOne cluster, by hand

kubectl config get-contexts
kubectl config use-context prod-eu-1
helm repo add appscode https://charts.appscode.com/stable
helm install ace appscode/ace -n kubeops \
  --create-namespace -f values.yaml
flux install
kubectl get pods -A | grep -v Running

AfterAny cluster, in the console

Add cluster
  1  Provider      EKS · AKS · GKE · DOKS · …
  2  Credential    stored once, reused
  3  Cluster       picked from the provider’s list
  4  Import        checked first, progress streamed live
Bringing a cluster under management, before and after: a sequence of commands per cluster, or one guided flow that checks the cluster before it changes anything.

02 · Users

Three kinds of people share this console, and each arrives with a different question.

  • Platform engineers

    Connect clusters, choose which platform features run on them, and set limits and defaults for everyone.

    What got in the way Installing and wiring operators on each cluster by hand, then watching versions drift apart.

  • DBAs

    Create and run production databases and their day-2 operations.

    What got in the way Needing cluster access and the right kubeconfig before they could even start.

  • DevOps and SREs

    Deploy apps, read workloads and events, open terminals and review security reports.

    What got in the way Checking clusters one by one to find the one in trouble.

03 · Thinking

Six rules I design every console screen by.

  • They come from the users: engineers who notice everything, working where one wrong click can reach production.
  • The same rules run across the consoles, so a habit learned in one works in the others.

Rule 01

When a page can’t work yet, it says why and offers the fix.

  • Database consoleNo cluster, a cluster that isn’t ready, or KubeDB (opens in a new tab) not enabled: each state names the cause and links to the page that fixes it, instead of showing an empty list.
  • Database consoleWhile there is nothing to act on, the sidebar, Create and Terminal stay hidden, so nothing invites a click that can’t work.
  • Cluster consoleA database’s Users tab names the missing KubeVault (opens in a new tab) feature and links straight to it.
  • Platform consoleWhen a session expires, people sign in again and land back on the page they were on.
Cluster console
A database’s Users tab: root user and app binding together, and a missing feature named with a link to enable it
A database’s Users tab: root user and app binding together, and a missing feature named with a link to enable it

04 · Fleet

The home page answers one question first: is anything wrong across my clusters?

The cluster list: every connected cluster with its status, and a tile to add the next one
The cluster list: every connected cluster with its status, and a tile to add the next one

05 · Onboarding

Adding a cluster is one guided flow that checks the cluster before it installs anything.

  • Four paths: import from a cloud account, create a new cluster, paste a kubeconfig, or reach a private cluster through a hub.
  • Credentials are stored once and reused, so provider keys aren’t pasted again for every import.
  • The wizard installs what’s missing and streams each step live, so every cluster ends up configured the same way.
Add Cluster: pick a cloud provider or a self-managed cluster to bring under management
Add Cluster: pick a cloud provider or a self-managed cluster to bring under management

06 · Features

Platform features are switched on per cluster as tested sets, and each card says whether it still works.

  • Databases, backup, observability, cost and security arrive as feature sets with tested versions and defaults.
  • Reconcile and Convert to UI Managed bring drifted or hand-installed features back under the console’s control.
  • On a spoke cluster the console points people to the hub, so a fleet is changed from one place.
Feature sets on a cluster: backup, databases, observability and more, each with its status
Feature sets on a cluster: backup, databases, observability and more, each with its status

07 · Control

Risky actions ask first, and admins decide once how a cluster behaves for everyone.

  • Removing a cluster asks what to clean up first, then streams each step until it’s done.
  • Permissions hide what a member can’t do, and a missing permission reads as a reason, not as a broken button.
  • Sidebar, presets, quotas and licences are set once per cluster, for the whole team.
Remove Cluster asks what to clean up before anything is removed (the cluster ID is blurred)
Remove Cluster asks what to clean up before anything is removed (the cluster ID is blurred)
Sidebar settings: an admin picks, renames and orders the menus the whole team sees on this cluster
Sidebar settings: an admin picks, renames and orders the menus the whole team sees on this cluster

08 · Scale

When one cluster becomes dozens, a hub runs them as groups.

  • A hub groups spoke clusters into sets, and feature sets, versions and access apply to a whole set at once.
  • A set’s overview counts the clusters on the current version, out of date and unaligned, and explains each difference.
  • Private clusters with no public IP join through the hub, so the console can reach them at all.

09 · Outcome

One console now takes a cluster from any cloud to a managed fleet.

  • Clusters come in from 8 providers or a kubeconfig through one guided flow, and each ends up configured the same way.
  • The fleet’s state is visible on one page, and risky actions explain themselves before they run.
  • The same shell, design system and rules carry into the database and platform consoles, so a habit learned here works there.
  • What I learned: on infrastructure, the design people value most is the one that stops the wrong action on the wrong cluster.

From the person who managed this work

“Mohin is not only a talented UI/UX engineer, but also a team player and communicator. He used various tools and methods to conduct user research, create wireframes and prototypes, test usability, and implement feedback.”
M. A. Muhaimin SakibEngineering Manager, now at Anwar Group · Managed Mohin directly at AppsCodeRead it on LinkedIn(opens in a new tab)