The Record control should use the Stash icon, not record.circle.fill #60

Closed
opened 2026-08-11 10:17:46 -04:00 by agent · 1 comment
Member

The Record control that goes in Control Center, on the lock screen and on the Action Button currently draws SF Symbol record.circle.fill. It should draw the Stash icon instead, so the control is recognisably Stash at a glance rather than a generic record button among other apps' record buttons.

Where it is

StashWidgets/StartRecordingControl.swift:29

ControlWidgetButton(action: StartRecordingIntent()) {
    Label("Record", systemImage: "record.circle.fill")
}

What makes this more than a one-line change

There is no Stash symbol asset in the repo today. Stash/Assets.xcassets holds AppIcon.appiconset, AccentColor.colorset and nothing else — no .symbolset, no SVG. The app icon artwork is not usable here: controls render their icon as a template, monochrome, tinted by the system and masked to the control's shape. A full-colour app icon will come out as a silhouette or not render at all.

So this needs a single-colour, template-rendered glyph derived from the Stash mark, produced as an SF Symbol (.symbolset, an SVG on Apple's symbol template) rather than a bitmap. Rendering it at control size is the test — Control Center draws small, and detail that survives on the home screen may not survive here.

The widget target has no asset catalog. project.yml gives StashWidgets two source paths, StashWidgets and Stash/Activity. Whatever catalog the symbol lands in has to be compiled into the extension, not just the app — the control renders inside the extension and cannot reach the app's bundle. Either add the catalog to the widget target's sources or put the symbol in a path both targets already compile.

Once it exists, the call site becomes:

Label("Record", image: "StashMark")

Acceptance

  • The control shows the Stash glyph in Control Center, on the lock screen, and on the Action Button.
  • It renders in both light and dark, and in the tinted/accented states the system applies — a glyph that is legible in one and mud in the other is not done.
  • It is legible at the smallest size Control Center draws.
  • The label text stays "Record". This changes the icon only.

Not in scope

The Live Activity's own symbols (RecordingLiveActivity.swift) and the in-app record button. Those read correctly as state indicators rather than as app identity, and changing them is a separate call.

The Record control that goes in Control Center, on the lock screen and on the Action Button currently draws SF Symbol `record.circle.fill`. It should draw the Stash icon instead, so the control is recognisably Stash at a glance rather than a generic record button among other apps' record buttons. ## Where it is `StashWidgets/StartRecordingControl.swift:29` ```swift ControlWidgetButton(action: StartRecordingIntent()) { Label("Record", systemImage: "record.circle.fill") } ``` ## What makes this more than a one-line change **There is no Stash symbol asset in the repo today.** `Stash/Assets.xcassets` holds `AppIcon.appiconset`, `AccentColor.colorset` and nothing else — no `.symbolset`, no SVG. The app icon artwork is not usable here: controls render their icon as a template, monochrome, tinted by the system and masked to the control's shape. A full-colour app icon will come out as a silhouette or not render at all. So this needs a **single-colour, template-rendered glyph** derived from the Stash mark, produced as an SF Symbol (`.symbolset`, an SVG on Apple's symbol template) rather than a bitmap. Rendering it at control size is the test — Control Center draws small, and detail that survives on the home screen may not survive here. **The widget target has no asset catalog.** `project.yml` gives `StashWidgets` two source paths, `StashWidgets` and `Stash/Activity`. Whatever catalog the symbol lands in has to be compiled into the extension, not just the app — the control renders inside the extension and cannot reach the app's bundle. Either add the catalog to the widget target's sources or put the symbol in a path both targets already compile. Once it exists, the call site becomes: ```swift Label("Record", image: "StashMark") ``` ## Acceptance - The control shows the Stash glyph in Control Center, on the lock screen, and on the Action Button. - It renders in both light and dark, and in the tinted/accented states the system applies — a glyph that is legible in one and mud in the other is not done. - It is legible at the smallest size Control Center draws. - The label text stays "Record". This changes the icon only. ## Not in scope The Live Activity's own symbols (`RecordingLiveActivity.swift`) and the in-app record button. Those read correctly as state indicators rather than as app identity, and changing them is a separate call.
Author
Member

Decided: the glyph is the moustache alone. Wes, 2026-08-11 — "if we just used the mustache glyph for this, it would be sufficient."

That settles the design half of this and shrinks the issue. The app icon (Stash/Assets.xcassets/AppIcon.appiconset/icon-1024.png) is a white moustache above a white waveform on purple. The moustache is already a flat, closed, single-colour silhouette, which is exactly what a template-rendered symbol has to be — so this is a trace, not a design exercise.

The waveform is dropped, deliberately. Its bars are thin at 1024px and Control Center draws far smaller; they would break up or disappear. The moustache alone carries the identity and it is the half that survives the size.

Revised work:

  1. Trace the moustache from the app icon artwork to a vector path.
  2. Produce StashMark.symbolset on Apple's SF Symbol template, single weight is fine to start.
  3. Compile it into the StashWidgets target — the original constraint stands, the extension cannot reach the app bundle. See project.yml; StashWidgets sources are StashWidgets and Stash/Activity today.
  4. Label("Record", image: "StashMark") at StartRecordingControl.swift:29.

The acceptance criteria in the description are unchanged, and the legibility one is now the only real risk: the moustache's tapering tips are its thinnest feature, and that is what to check at the smallest Control Center size.

**Decided: the glyph is the moustache alone.** Wes, 2026-08-11 — "if we just used the mustache glyph for this, it would be sufficient." That settles the design half of this and shrinks the issue. The app icon (`Stash/Assets.xcassets/AppIcon.appiconset/icon-1024.png`) is a white moustache above a white waveform on purple. The moustache is already a flat, closed, single-colour silhouette, which is exactly what a template-rendered symbol has to be — so this is a trace, not a design exercise. **The waveform is dropped, deliberately.** Its bars are thin at 1024px and Control Center draws far smaller; they would break up or disappear. The moustache alone carries the identity and it is the half that survives the size. Revised work: 1. Trace the moustache from the app icon artwork to a vector path. 2. Produce `StashMark.symbolset` on Apple's SF Symbol template, single weight is fine to start. 3. Compile it into the `StashWidgets` target — the original constraint stands, the extension cannot reach the app bundle. See `project.yml`; `StashWidgets` sources are `StashWidgets` and `Stash/Activity` today. 4. `Label("Record", image: "StashMark")` at `StartRecordingControl.swift:29`. The acceptance criteria in the description are unchanged, and the legibility one is now the only real risk: the moustache's tapering tips are its thinnest feature, and that is what to check at the smallest Control Center size.
wk closed this issue 2026-08-11 15:21:35 -04:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Stash/stash-ios#60
No description provided.