Feature: open a fresh install on the Midnight Ramen background - #70
Merged
Merged
Conversation
Adds a fourth bundled background and makes it the one a brand-new install opens on, replacing Golden Gate as the first impression of the app. The gallery's NN- prefix does double duty: it orders the tiles and it picks the first-run default (ThemeManager.ApplyFirstRunBackground takes whatever sorts first). So making the new image the default means renumbering, and the three existing backgrounds move down one position each. That renaming is deliberate but not free. The file name is the durable identity persisted in ui-settings.json, so someone who had explicitly picked one of the three keeps their background working — the image is a copy in their own data folder — but its tile may stop showing as selected until they pick it again. Users on a custom background, or on none, are unaffected either way; the first-run path is guarded on a missing settings file and cannot fire for anyone who has launched the app before. No code change: BuiltInBackgrounds discovers the folder at startup and the csproj globs it by extension, so shipping an image is a file drop.
This was referenced Sep 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a fourth background to the box — Midnight Ramen — and makes it the image a brand-new
install opens on, replacing Golden Gate as the app's first impression. The three existing
backgrounds all stay in the gallery, one position further down.
This is the background that marks the 0.15.0 release.
Why this matters
A fresh install already opens on a background rather than a bare theme, which is what makes the
gallery discoverable at all. But the default has been a landscape photograph since the feature
shipped, and it does not say much about what the app is. The new image does, and a release is the
right moment to change the thing every new user sees first.
What changed
01-midnight-ramen.jpg— 1536×1024, 485 KB, within the folder's600 KB budget. Dark with warm highlights, which is what a backdrop sitting at 30% opacity behind
a conversation needs to be.
Beach become
02-,03-, and04-. Nothing is removed.BuiltInBackgroundsdiscovers the folder at startup and the csproj globs itby extension, so adding an image is a file drop. The
NN-prefix already both orders the galleryand selects the first-run default, so renumbering is the whole mechanism.
Scope and risk
Low, but with one behaviour worth a reviewer's attention.
The file name is the durable identity persisted in
ui-settings.json, so renaming the threeexisting images has a visible consequence for existing users. Who is affected, precisely:
ChatBgBuiltInis null, and there is no tile to un-markNo one loses a background. Selecting anything copies it into
%LOCALAPPDATA%\MandoCode.Desktopas
chat-bg.<ext>, and that copy is what renders — the install folder is only ever a copy source,so nothing in this PR can reach an existing user's active image.
Existing installs cannot be re-skinned:
ThemeManager.Initializeguards the first-run path on amissing settings file, and the method writes that file unconditionally, so anyone who has launched
the app once is permanently past it.
One pre-existing behaviour this makes visible:
CopyToOutputDirectorycopies but neverdeletes, so a build output — or an install folder that a new release is extracted over — keeps
the old file names alongside the new ones and shows duplicate tiles. The documented install is
"extract it anywhere", and winget's portable package uses a per-version directory, so neither
normal path hits this. It is cosmetic where it does occur and cannot affect anyone's active
background. Flagging it rather than working around it, but happy to add a cleanup step if you
would rather not ship the sharp edge.
Verification
dotnet build src/MandoCode.Desktop— succeeded, 0 warnings, 0 errors.dotnet test src/MandoCode.Desktop.Tests— 489 passed, 0 failed. This includesBuiltInBackgroundsTests, which pins the naming convention this change depends on: ordering bynumeric prefix, prefix stripping for display names, and the file name as durable identity.
Not covered: the first-run path itself is not under automated test — it depends on a missing
%LOCALAPPDATA%settings file, so verifying it means launching with that folder cleared. Worth amanual check before the release tag. The duplicate-tile case described above was observed in a
local incremental build, not in a published output.