Skip to content

feat(brand): new mark, herald display name, docs palette#1546

Draft
danielcopper wants to merge 1 commit into
mainfrom
feature/logo-redesign
Draft

feat(brand): new mark, herald display name, docs palette#1546
danielcopper wants to merge 1 commit into
mainfrom
feature/logo-redesign

Conversation

@danielcopper

@danielcopper danielcopper commented Jul 21, 2026

Copy link
Copy Markdown
Owner

Prepares the rebrand so it can be reviewed as a whole. Draft on purpose — the checklist at the bottom has to be worked through first.

The mark

The right-hand half of a Steam Deck set in a disc, split along a 45° facet that runs unbroken across disc, body, screen and every control. It replaces the old banner, which was AI-generated and carried a garbled wordmark.

Positions and sizes sit on a millimetre grid mapped into drawing units by one constant, so the layout is adjusted by changing a measurement rather than nudging coordinates. scripts/logo/gen.py renders both the shipped asset and a contact sheet of the alternatives that were considered.

What changed

  • Assetsassets/logo.svg is the source; logo.png and store_image.png are rendered from it. The old banner.png is removed rather than left orphaned.
  • README — restructured around the mark: name, tagline, guide links, badges, then the Quick Access panel shot directly under them. The gallery previously sat below the feature list, far enough down that most readers never reached it. Both install routes collapse into details blocks.
  • Badges — styled in the mark's own two blues instead of six unrelated colours. New: a RomM ≥ 4.9.0 badge, since that is the most common support question. The release badge reads package.json rather than the tag, because the tags carry the old project name.
  • Docs site — off deep purple (which sat in RomM's colour family) onto the mark's palette, set as custom colours in both light and dark schemes. The mark becomes the site logo and favicon.
  • Display nameherald, in the README and in plugin.json.
  • Feature list — corrected against the code. Three claims were wrong, not merely vague: save sync was described as newest-wins (it is hash-based and blocks on genuine divergence), Steam Input as per-shortcut (it is global), and RetroDECK migration as though the plugin moves your install (it follows a move you made). Collections, save slots, RetroAchievements, multi-disc, region switching, core selection and the cleanup tools were missing entirely.

On the rename and existing installs

Decky keys a plugin's settings and data directories off the package name, not off plugin.json's name field. Verified on-device: decky-steamgriddb calls itself "SteamGridDB" and still lives in ~/homebrew/settings/decky-steamgriddb. Changing the display name is therefore free, and this PR does it — existing installs keep everything.

The risk attaches to the package name, which is what renaming the repository to herald would change. Without a migration, DECKY_PLUGIN_SETTINGS_DIR and DECKY_PLUGIN_RUNTIME_DIR would point at fresh, empty directories after the update. That is worse than it sounds, because it is not only settings.json — the SQLite database goes too, and it holds which Steam shortcut belongs to which ROM plus the save-sync baselines. The plugin would no longer recognise the shortcuts it created, so the next sync would add a second copy of every game, and with no baseline the next save sync would see divergence on every title and block on a conflict prompt for each one. The user would be left cleaning up a duplicated library by hand.

The fix is a one-shot copy at startup, shipped in the first release that carries the new package name: derive the old paths from the new ones rather than hardcoding them, act only when the new settings directory is empty and the old one is not, copy rather than move so a rollback still finds its data, write a marker so it cannot run twice, and log it. It has to run in _main before bootstrap() opens the database, and it is file I/O, so it belongs in an adapter rather than a service. It is temporary and gets deleted two or three releases later.

Full plan, tests and the removal step: #1547 — that issue deliberately stays open until the cleanup has happened.

This PR does not rename the package, so nothing here needs the migration yet. Repository and documentation URLs are untouched for the same reason.

Checklist

Mine:

Yours:

  • Send the message to the RomM Discord
  • Decide whether to rename the repository now (recommended: before the Decky store listing, since the name sticks hard once it is published)
  • After renaming: re-link the SonarCloud project (its key contains the old name), and decide whether release tags drop the decky-romm-sync- prefix
  • Pick a typeface for the wordmark
  • Refresh the repository description, topics and social preview image on GitHub
  • Decide whether plugin.json's store description should be tightened the same way the feature list was
  • Verify the display name change on-device: the QAM entry and Decky's plugin list should read "herald" while settings survive the update

docs: the documentation site's palette, logo and favicon are updated in this change.

@github-actions github-actions Bot added the area:ci CI, tooling, SonarCloud label Jul 21, 2026
danielcopper added a commit that referenced this pull request Jul 22, 2026
Everything from #1546 except the rename. The name stays
`decky-romm-sync` so this can land while the new one is still being
decided.

## The mark

The right-hand half of a Steam Deck set in a disc, split along a 45°
facet that runs unbroken across disc, body, screen and every control. It
replaces the old banner, which was AI-generated and carried a garbled
wordmark.

Positions and sizes sit on a millimetre grid mapped into drawing units
by one constant, so the layout is adjusted by changing a measurement
rather than nudging coordinates. `scripts/logo/gen.py` renders both the
shipped asset and a contact sheet of the alternatives.

## README

Rebuilt around the mark: mark, name, tagline, two rows of guide links,
then one row of user-facing badges. The six CI and quality badges move
down to Contributing, where they address the audience that reads them. A
**RomM ≥ 4.9.0** badge is new — that is the most common support
question, and it now answers itself. The release badge reads
`package.json` instead of the tag, because the tags carry the project
name. Both install routes collapse into `details` blocks.

## Feature list

Corrected against the code. Three claims were wrong rather than merely
vague:

- **Save sync** was described as "newest-wins conflict resolution with a
manual override". There is no newest-wins. The decision is hash-based:
it resolves automatically only where that is provably lossless, and any
genuine two-sided divergence blocks until you choose. Getting this
backwards is worse than saying nothing, because it is a claim about
whether saves can be silently overwritten.
- **Steam Input** was described as per-shortcut. There is one global
mode, applied in bulk.
- **RetroDECK path migration** read as though the plugin moves your
install. It notices that you moved it, then relocates the ROMs, BIOS
files and saves it manages.

Artwork was misattributed — only the cover comes from RomM, the rest
needs a SteamGridDB key. Collections, save slots and version history,
RetroAchievements, multi-disc, region switching, core selection and the
cleanup tools were missing entirely. "Controller friendly" is dropped as
table stakes for a plugin that renders in the gamepad UI.

## Docs site

Off `deep purple`, which sat in RomM's colour family, onto the mark's
palette — custom colours in both schemes, since Material has no named
palette in this range. The mark becomes the site logo and favicon.

## Note for review

`markdownlint`'s MD033 is narrowed to an allow-list of the elements the
header needs rather than switched off, so stray HTML elsewhere is still
caught.

The wordmark is deliberately absent: it would have to spell a name, and
that is still open. `gen.py` can compose the lockup as soon as there is
one — it loads the outlines on demand.

Supersedes #1546 if the rename takes longer than expected; otherwise
#1546 rebases onto this.

docs: the documentation site's palette, logo and favicon are updated in
this change.
@danielcopper
danielcopper force-pushed the feature/logo-redesign branch 3 times, most recently from c89cc52 to 237092b Compare July 22, 2026 20:37
Sets the name in the README, the documentation site and the Decky menu, and
adds the wordmark: the name in inscriptional Roman capitals, the register coats
of arms and mottoes are cut in, so the typeface carries the same idea the name
does. The glyphs ship as outlines, not as text, so nothing has to have the font
installed. Two inks are selected through a picture element, because one colour
cannot sit on both GitHub themes.

Decky keys a plugin's settings and data directories off the package name, not
off plugin.json's name field -- verified against the shipped artefact, whose
top-level folder is decky-romm-sync while its plugin.json said "RomM Sync".
Changing the display name is therefore free: existing installs keep their
settings, their database and their shortcut ownership records. Renaming the
package is a separate move that needs a migration first, tracked in #1547 and

The README says so too, so the announcement reads as information rather than a
reason to worry.
@danielcopper
danielcopper force-pushed the feature/logo-redesign branch from 237092b to fd38da3 Compare July 22, 2026 20:55
@sonarqubecloud

Copy link
Copy Markdown

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

Labels

area:ci CI, tooling, SonarCloud

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant