Skip to content

Color the favicon by the status of the workflow being viewed - #3900

Open
MoLow wants to merge 1 commit into
temporalio:mainfrom
MoLow:molow-status-favicon
Open

Color the favicon by the status of the workflow being viewed#3900
MoLow wants to merge 1 commit into
temporalio:mainfrom
MoLow:molow-status-favicon

Conversation

@MoLow

@MoLow MoLow commented Sep 10, 2026

Copy link
Copy Markdown

Description & motivation 💭

A workflow run page is a page you leave open and come back to — while a backfill grinds, while a flaky run retries. Until you come back, the tab tells you nothing: every Temporal tab carries the same black mark, so finding the run that just failed means clicking through them.

This tints that mark. On a workflow run page the favicon's disc takes the colour of the status badge's scheme, and goes back to the static icon everywhere else. It follows the status live — terminate a running workflow with the tab open and the icon turns without a reload, because it is derived from the same workflowRun store the header renders from.

The glyph, its proportions and the disc are the ones already shipped in favicon.ico — only the disc's fill changes.

Screenshots (if applicable) 📸

Top row at 64px, bottom row the actual 16px rendering (pixel-doubled):

workflow status favicons

Design Considerations 🎨

Two choices worth a second opinion:

  • Colour source. Each status maps to the same colour scheme its BadgeStatus uses, taken at step 11 of that scheme's scale — the step dark enough that the knocked-out white glyph still holds at 16px. Canceled is the one exception: its badge scheme is neutral, and neutral's step 11 is so close to black that the icon would be indistinguishable from the static one, so it uses slate[9].
  • Statuses that share a colour. Running/Paused and Completed/ContinuedAsNew share a colour, because their badges do. Happy to split them if you would rather the icon be more granular than the badge.

The mark is drawn as an inline SVG data: URI. The path is a copy of vendor/logo.svg — a data: URI cannot reference an external asset, so it has to be inlined somewhere.

Also happy to open an issue first and discuss the idea before this gets reviewed, if that is the preferred order.

Testing 🧪

How was this tested 👻

  • Manual testing
  • E2E tests added
  • Unit tests added

Unit tests cover the status → icon mapping and the store's fallback to no icon once the workflow run is cleared.

Manually verified in Chromium against a local temporal server start-dev, reading link[rel~="icon"] off the live page:

on open              {"badge":"Running","disc":"#0d74ce"}
after terminate      {"badge":"Terminated","disc":"#ab6400"}
back on the list     {"badge":"Running","disc":"(static: favicon.ico)"}

pnpm lint and pnpm check are clean, and pnpm test --run passes.

Steps for others to test: 🚶🏽‍♂️🚶🏽‍♀️

  1. pnpm dev:temporal-cli
  2. temporal workflow start --task-queue demo-q --type DemoWorkflow --workflow-id wf-1
  3. Open that workflow's run page — the tab icon is blue.
  4. temporal workflow terminate --workflow-id wf-1 --reason demo and watch the icon turn amber without reloading.
  5. Navigate back to the workflow list — the icon returns to the static one.

Docs

Any docs updates needed?

No.

🤖 Generated with Claude Code

A workflow run page is something you leave open and come back to. Until
you come back, the tab tells you nothing: every tab carries the same
black Temporal mark, so finding the run that just failed means clicking
through them.

Tint the mark instead. The disc takes the colour of the status badge's
scheme, so a strip of tabs reads at a glance, and the glyph and its
proportions are the ones already shipped in favicon.ico. Any page that
is not a workflow run keeps the static icon.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@MoLow
MoLow requested a review from a team as a code owner September 10, 2026 08:42
@vercel

vercel Bot commented Sep 10, 2026

Copy link
Copy Markdown

@MoLow is attempting to deploy a commit to the Temporal Team on Vercel.

A member of the Team first needs to authorize it.

@CLAassistant

CLAassistant commented Sep 10, 2026

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants