• v2026.08.04 — Minstrel gets a mark
    test-web / test (push) Successful in 47s
    android / Build + lint + test (push) Successful in 4m37s
    release / Build signed APK (tag releases only) (push) Successful in 8m36s
    release / Build + push container image (push) Successful in 1m37s
    Stable

    bvandeusen released this 2026-08-03 20:58:25 -04:00 | 0 commits to main since this release

    Per-day CalVer. Branding only — no server changes, no schema migrations. Merged via PR #117; main CI green on fa7ea41c (Android incl. debug assemble, web, and the image build). The Go lane correctly didn't run: nothing outside web/ and android/ was touched.

    Minstrel had no mark. favicon.png was a 1×1 pixel placeholder, so every browser tab showed the blank-page glyph, and Android shipped legacy bitmaps only — modern launchers letterboxed a square instead of masking it to the device's icon shape.

    The mark

    A Didone M whose right leg is an eighth note: stem, flag and notehead in the forest-teal accent as one object, the letter in the text colour.

    It's deliberately subject-neutral. "Minstrel" pulls hard toward a lute, a bard, a troubadour — and any of those would tell someone opening the app for the first time that this is a player for renaissance-faire music rather than for everything they own. A geometric letter plus universal notation says music without saying which music. The family look arrives through the palette and the drawing, not through the subject.

    It changes with its background, because it has to

    Parchment on a white surface is invisible. So the letter flips with whatever it sits on, while the note keeps the accent in both — teal holds against either:

    • In the app, the mark takes the surrounding text colour, so one asset serves both light and dark themes.
    • In the browser tab, an SVG favicon swaps the letter's colour with your system scheme; a tab strip is chrome the app doesn't control.
    • On your home screen and in iOS, the mark sits on its own dark plate, because those composite onto backgrounds we can't predict — iOS forces white behind anything transparent.

    The plate colour was picked by measurement rather than taste: the note only clears the 3:1 contrast floor for graphics against the deepest obsidian, and lightening the plate would have made it worse, not better.

    Android gets a proper adaptive icon

    New mipmap-anydpi-v26 foreground/background layers, with the mark inside the 66dp safe zone so no launcher mask can clip it — round, squircle, teardrop, whatever your launcher uses. It also supplies a monochrome layer, so Android 13+ themed icons tint correctly with your wallpaper instead of falling back to a generic badge.

    Install

    1. Install the attached signed APK for the new launcher icon.
    2. Redeploy the server image to pick up the web favicon and header mark. Optional if you only care about the app icon — this release carries no server changes.

    Verify

    CI covered lint, resource compilation, unit tests and a full debug assemble. These are the parts it can't reach:

    • Your launcher. Long-press the icon, check it isn't clipped, and if you use themed icons confirm it tints rather than falling back.
    • Your tab strip. The mark should be legible at 16px among other tabs, and the letter should invert if you switch your system between light and dark.
    • The header, on both themes — the letter should flip while the note stays teal.

    Also

    The house design system gained the principle behind this work: a mark's subject must not imply something narrower than what the app actually holds, and non-text graphics must meet 3:1 by measurement rather than by eye. The previous wording banned a vocabulary; two drafts of this mark satisfied that ban and still failed the intent.

    🤖 Generated with Claude Code

    Downloads