Repository navigation
feat(app): choose the picture atop a new chat, or use your own, from new painted templates - #110
Merged
Merged
Conversation
…new painted templates Settings › Appearance › Header picture picks the painting across the top of a new chat, an empty worktree and Home: the harbour (the default, so nothing changes for existing prefs), six new plates with a day and a night painting each, a picture of your own (kept with the chat background's pictures but chosen apart), or none. A dark theme shows a plate's night; a picture of your own is dimmed there. The plates are chat background scenes too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch was successfully deployed
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.
The painting across the top of a new chat, an empty worktree and Home was always the harbour. Now it's a choice in Settings › Appearance › Header picture: the harbour (default, by time of day as before), six new painted plates, your own picture, or none. The plates are also chat background scenes.
The plates. Six watercolours in the harbour's style: Alpine lake, Meadow, Desert mesa, Snowy fjord, Lavender fields and Sea of clouds.
harbour/night.webpas the style reference.How
headerPicture: { source: "builtin" | "image" | "none", builtin: "harbour" | PlateId, image?, position }.normalizeHeaderPicture(lib/header-picture.ts) turns old or missing prefs, unknown plates and lost pictures into the harbour, so nothing changes for anyone who hasn't chosen.headerArt()is a pure function that picks the painting, mute, dim and position.useHeaderPicture()andHeaderBand(components/art/header-band.tsx) draw all three headers: the launcher, the empty conversation's first prompt, and Home. They replace the directHARBOUR[light]uses, so the three can't drift. With None, each screen drops the band and its large top padding.keepImagenow takes aninUselist, so it never drops a picture either setting uses. Removing one resets whichever setting used it.dimonDitherBand, 0.5, plus mute 0.2, chosen after comparing settings in berth-dark and dracula.Proof: the app on mock data.
Every plate in Catppuccin Latte, Dracula and Tokyo Night, plus Home: all screenshots.
Tests
lib/header-picture.test.ts(8 tests): old or missing prefs, invalid values, the harbour following its light, plates switching to night, your own picture's dim and mute, None and a lost picture.e2e/header-picture.spec.ts(5 tests):?scene=first-prompt(agents at rest open to their first prompt), so the spec can reach the empty conversation.Checks
tsc,typecheck:plugins,check:titles,check:csp,check:themes,pnpm test(452 tests),pnpm build,npx tsc -p e2eand the docs build pass.header-picture.spec.tsandlook.spec.tspass (12 tests, re-run by me on a fresh build; the author ran them 3× as well).first-run.spec.ts:36(Labs on and off) fails, on main as well:getByTestId('settings-labs').getByRole('switch') resolved to 2 elements. This PR doesn't touch it.Docs: a Header picture section in
guides/themes.mdx, the plates on its Scenes line, a link fromguides/labs.mdx, and two changelog bullets.Open questions
🤖 Generated with Claude Code