Skip to content
Selected work

05 · AppsCode · Product Design

Platform Console

Every AppsCode (opens in a new tab) console depends on one question: who are you, and what may you do here? The Platform Console answers it, for one person, for a team and for a whole self-hosted platform. I own its UI: the structure, every flow and screen, and the Vue code behind them.

Sign-in for every AppsCode console
1Sign-in for every AppsCode console
Kinds of sign-in source: LDAP, SMTP, PAM, OAuth2
4Kinds of sign-in source: LDAP, SMTP, PAM, OAuth2
Days to bring back a deleted account
30Days to bring back a deleted account
Designer
Mohin Uddin
Role
Product Design, Information Architecture, UI Engineering
Timeline
AppsCode · ongoing
Technology
Vue 3, Nuxt, Tailwind CSS v4, Figma, AppsCode Design System
Overview
Your overview: the account you’re in, what you can reach, and two-factor still off, in amber
Teams
Teams in an organisation, each with the permission it gives its members
  • 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: how personal, organisation and platform settings are split, every flow and state, and the Vue UI code.
Team
Me, with 3–4 engineers who connect the APIs and data
Duration
Ongoing, day by day, across my 7 years at AppsCode

At a glance

  1. 01 · The problem

    Clusters and databases were reachable, but who could reach them was decided one person and one cluster at a time.

    Read the problem
  2. 02 · The approach

    Identity is invisible when it works, so I designed it to stay out of the way and speak up only when something is at risk.

    See the approach
  3. 03 · The result

    One sign-in now reaches every console, and access is managed by team instead of by person.

    See the result

01 · Challenge

Clusters and databases were reachable, but who could reach them was decided one person and one cluster at a time.

  • Access was granted person by person, so it drifted as people joined, changed teams and left.
  • Cloud keys and tokens were pasted wherever they were needed, and nobody could see or revoke them in one place.
  • Companies running the platform themselves had no screen for their own users, sign-in sources or upgrades.

BeforeAccess, person by person

# one person, one cluster, one binding
kubectl create rolebinding alice-view \
  --clusterrole=view --user=alice -n demo
# again for every cluster …
# … and remember to remove it
#   when alice leaves

AfterAccess, by team

Organisation › Teams
  Owners    Admin
  Editors   Write
  Viewers   Read
  DBAs      Custom role

Join a team     → access everywhere
Leave the IdP   → access gone everywhere
Giving someone access, before and after: a binding per person on every cluster, or a team that carries its permission to every console.

02 · Users

Three people open this console, at three levels.

  • Every user

    Sign in once, keep the account secure and give scripts their own tokens.

    What got in the way Separate logins per console, and no view of active sessions or tokens.

  • Organisation owners

    Add people, group them into teams and decide what each team may do.

    What got in the way Granting access one person at a time, and missing someone when they left.

  • Platform administrators

    Run a self-hosted platform: users, sign-in sources, sign-up, branding and upgrades.

    What got in the way Needing database access or the command line for every account change.

03 · Thinking

Identity is invisible when it works, so I designed it to stay out of the way and speak up only when something is at risk.

  1. Rule 01

    One account, every console

    The same sign-in and account switcher appear in every console, so people always know which account they are acting in.

  2. Rule 02

    Grant by team, not by person

    Permissions belong to teams and roles; adding someone to a team is the whole job.

  3. Rule 03

    Every secret revocable on its own

    Tokens, OAuth apps and cloud credentials each have a name, an expiry and their own delete, so one leak never means resetting everything.

  4. Rule 04

    Nudge, don’t block

    A missing safeguard, like two-factor, shows in amber on the overview instead of stopping people at the door.

04 · Overview

The first page answers “what can I reach, and is my account safe?” in one glance.

Your overview: the account you’re in, what you can reach, and two-factor still off, in amber
Your overview: the account you’re in, what you can reach, and two-factor still off, in amber

05 · Access

Teams and roles carry permissions, so access follows people as they join, move and leave.

  • Owners, editors, viewers or a custom role: each team gives its members one permission level.
  • Custom roles pick fine-grained permissions, with a live summary of what the role allows before it’s saved.
  • An organisation can connect its identity provider, so people sign in with the account they already have and lose access when they leave.
Teams in an organisation, each with the permission it gives its members
Teams in an organisation, each with the permission it gives its members
Create custom role: fine-grained permissions with a live summary of what the role allows
Create custom role: fine-grained permissions with a live summary of what the role allows

06 · Security

The account reaches production, so its safety settings are plain, and every key can be revoked on its own.

  • Password, two-factor and hardware security keys sit on one page.
  • Tokens show their expiry and last activity, and each one is deleted without touching the others.
  • Cloud credentials are stored once and picked by name when a cluster is imported, never pasted again.
Account security: password rules, two-factor authentication and hardware security keys
Account security: password rules, two-factor authentication and hardware security keys
Access tokens with their expiry and recent activity, each deleted on its own
Access tokens with their expiry and recent activity, each deleted on its own

07 · Administration

Self-hosted platforms get their own admin area, so no account change needs a database or a terminal.

Site administration: counts for the whole platform, and every admin task as a described shortcut
Site administration: counts for the whole platform, and every admin task as a described shortcut

08 · Control

Admins decide once who can join, how the platform looks and what happens to accounts that leave.

  • Sign-up can be limited to company email domains, or turned off.
  • Branding sets the app name, colour, logo and favicon, so the platform looks like the company’s own product.
  • Deleted accounts can be reactivated for 30 days before a purge task removes them.
  • Sign-up configuration: limit sign-up to company email domains, or turn self sign-up off
  • Site administration, Branding: app name, primary colour, logo and favicon
  • Deleted accounts that can still be reactivated, and a purge task for those older than 30 days
  • Authentication source: connect the company’s identity provider with OpenID Connect (the redirect URI is blurred)

09 · Outcome

One sign-in now reaches every console, and access is managed by team instead of by person.

  • People switch between accounts and consoles without signing in again, and always see which account they are in.
  • Organisation owners manage access through teams, roles and their own identity provider.
  • Self-hosted platforms are run from the browser: users, sign-in sources, sign-up, branding and upgrades.
  • What I learned: security settings get used when they’re explained in plain words and sit where people already look.

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)