Improve website UX: theming, navigation, Studio and uploads#10
Merged
pedrobritx merged 1 commit intoJun 16, 2026
Merged
Conversation
- Fix theme bug where an explicit light choice was overridden by a dark system preference on mobile (scope the dark @media to :root:not([data-theme])) - Surface the manifesto in a front-page footer - Separate the mobile theme toggle and settings controls with a divider - De-duplicate the Settings/Preferences titles; make museum sources clickable on the Settings and About pages via a shared MUSEUMS list - Add a Settings TV-size picker (55" default) and thread the chosen export resolution through the canvas pipeline - Let Frame Studio accept a dropped image directly, with no Browse detour - Auto-create a date/time-named collection for each upload batch
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
A round of mobile testing surfaced several UX issues. This PR addresses all of them in one branch.
1. Theme bug — light mode showed dark on mobile 🐞
styles/tokens.cssdefined dark tokens via@media (prefers-color-scheme: dark) { :root { … } }, which has equal specificity to[data-theme='light']but comes later in source order — so on a device set to dark, an explicit Light choice was overridden. Scoping the media block to:root:not([data-theme])lets the explicit attribute selectors always win, while still honouring system preference before/without a choice.2. Manifesto surfaced on the front page
Added a footer to the home page with a prominent "Read the manifesto →" link plus Source on GitHub / MIT License links. Previously the manifesto was only reachable via the sidebar (desktop) or buried in Settings (mobile).
3. Mobile top bar — theme toggle vs settings no longer confusable
Added a divider and more spacing between the sun/moon theme toggle and the gear settings link.
4. Settings — redundant titles, clickable sources, fixed About text
5. About — clickable source list
The Collections list now links each museum to its website. A shared
lib/museums.tskeeps Settings and About in sync.6. Multiple TV sizes (Settings-only picker, 55″ default)
FRAME_SIZESlist + a persistedframio:framepreference (mirrors the theme pattern).FrameSettingcontrol in Settings (32″–85″, default 55″); the Output line updates with the chosen resolution.width/heightthread throughcomposeCanvas; the 32″ exports at 1920×1080, all others at 3840×2160. The crop UI (aspect-locked to 16:9) is unchanged.7. Studio — crop directly without browsing first
The empty Studio state now has a drop/choose-a-file uploader, so a reader can crop and export an image immediately. The file→data-URL logic is extracted to
lib/studio/upload.tsand shared with the Library uploader.8. Bundle uploads → date/time collection
Every upload batch now also creates a collection named after the moment (e.g. Upload · 15 Jun 2026, 23:46) via a new
createCollectionWithItemsstore helper; images still appear in Library uploads.Verification
npm run typecheck,npm run lint,npm run buildall pass.https://claude.ai/code/session_01NDgHNC6vqa4XEqhB6XKEz7
Generated by Claude Code