Skip to content

Add Liquid Glass interface style with responsive mobile layout - #7

Merged
rene-roid merged 5 commits into
masterfrom
ui/liquid-glass
Oct 2, 2026
Merged

rene-roid merged 5 commits into
masterfrom
ui/liquid-glass

Conversation

@rene-roid

@rene-roid rene-roid commented Sep 30, 2026 •

Copy link
Copy Markdown
Owner

Summary

Adds a Liquid Glass interface style, modelled on the Umbrel App Store, next to the existing look, and makes the phone layout work properly. The original look stays the default, and a one-time prompt asks which one to use.

  • Interface style setting (ui_style: classic | glass, default classic). It's stored on the server and copied to localStorage so the right style paints before settings load. Updating doesn't restyle anyone's install.
  • One-time style picker. Right after login, a "Pick your look" dialog asks which style to use, with Original preselected. The answer is stored on the server (ui_style_chosen), so it shows once per install, including existing installs the first time they load this version. The "What's new" dialog waits until it's answered, so the two never stack.
  • Liquid Glass style: frosted top bar and dock, pill navigation with plain monochrome icons, pill buttons and search, subtle white borders and a soft glow in the accent colour. Thumbnails and covers keep modest 10px corners.
  • Dashboard banner (Glass only): headline, library stats and a few floating thumbnails from recently added media. It has a close button, and the "Dashboard banner" switch (dashboard_hero) in Appearance brings it back.
  • Responsive navbar. Nav links show as icons between 768 and 1279px wide so nothing gets pushed off the bar. Under 768px they move to a bottom dock: floating and frosted in Glass, a plain tab bar in Original. All five labels fit down to a 320px screen.
  • Phones:
    • The top bar and the sticky filter bar slide away when you scroll down and come back when you scroll up.
    • The thin tag-sidebar strip is gone. A "Libraries & tags" button opens the drawer instead.
    • Opening another page starts it at the top with the bars showing, instead of keeping the previous page's scroll offset.
  • Layout fixes:
    • Sticky toolbars and full-height panes used to assume the navbar is always 60px, so they overlapped when it wrapped to two rows. They now follow its real height (--nav-h).
    • The selection bar and toasts sit above the dock.
    • The dock's bottom spacing lives on the app wrapper, so pages that fit the screen, like Settings and the login screen, don't scroll by the dock's height.

How it's built

  • Shared borders, surfaces and corner radii are Tailwind theme tokens (border-line, bg-surface, bg-bar, rounded-btn, rounded-field, rounded-panel, rounded-media). Their default values give the Original look, and [data-ui='glass'] on <html> swaps them.
  • Styling that only applies to Glass uses a glass: Tailwind custom variant. Only the Dashboard renders different markup per style.
  • Server: three new editable settings (ui_style, ui_style_chosen, dashboard_hero). An unknown ui_style is rejected up front, together with master's new check, so a bad request saves nothing.

Screenshots

First visit: the style picker

Desktop Phone
Style picker on desktop Style picker on a phone

Original, the default

Desktop Phone
Original dashboard on desktop Original dashboard on a phone with the bottom dock

Liquid Glass

Desktop Phone
Liquid Glass dashboard on desktop Liquid Glass dashboard on a phone
Liquid Glass explore on desktop Liquid Glass explore on a phone
Tablet (900px): icon-only nav Settings → Appearance
Liquid Glass dashboard at tablet width Appearance settings with the style switch

Testing

  • bun test --isolate: 129 pass, including new tests for the default style, saving the picker's answer, and rejecting an unknown style without saving the rest of the request.
  • Typecheck, lint (no errors) and vite build are clean.
  • Checked in a browser in both styles at 320, 360, 375, 390, 800, 900, 1280 and 1440px: dock labels, hide-on-scroll, the tag drawer, the selection bar, the media viewer, Settings, the login screen, and the picker flow (shown once, then "What's new", not shown again after a reload).

rene-roid and others added 5 commits September 30, 2026 10:45
A new Appearance setting switches between the original look and a
frosted "Liquid Glass" style modelled on the Umbrel App Store. Shared
borders, surfaces and radii are CSS tokens that [data-ui='glass']
swaps; component-specific differences use a `glass:` Tailwind variant.
The choice is stored server-side (ui_style) and mirrored to
localStorage so the right style paints before settings load.

Glass mode adds a dashboard banner with a close button; it can be
turned back on from Settings (dashboard_hero).

Navigation no longer overflows on narrow screens: under md it moves to
a bottom dock, and nav links collapse to icons until xl. Sticky bars
and full-height panes read the navbar's measured height from --nav-h
instead of assuming 60px.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
On phones the navbar and the sticky toolbar under it (Explore, Discover,
Boards, library pages) slide away while scrolling down and return on any
scroll up. Driven by a data-nav-hidden attribute on <html> and a matching
Tailwind variant.

The collapsed tag-sidebar strip is gone on phones, where it took a column
from the grid; a "Libraries & tags" button next to the Explore title
opens the drawer instead.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Merge the separate Classic/Glass tile and card components into single shared components driven by glass: variants
- Replace ad-hoc rounded-xl/rounded-panel radii on thumbnails with a shared rounded-media token
- Tone down Liquid Glass styling: smaller nav pills/icons, plain icons instead of colored tiles, tighter hero banner and spacing
- Drop unused glass-card CSS helper and old radius overrides
The original style is the default again, so updating no longer restyles
an existing install. A one-time "Pick your look" dialog asks which style
to use, once per install, before the release notes are shown.

Phone fixes:
- Dock labels fit at every width down to 320px.
- Opening another page starts it at the top with the bars showing,
  instead of keeping the previous page's scroll offset.
- The dock's bottom spacing moved from <body> to the app wrapper, so
  pages that fit the screen, like Settings and the login screen, no
  longer scroll by the dock's height.
Conflict in the settings route: master now checks every key before saving
any of them. Kept that, and moved the ui_style check up front as well, so
an unknown style also leaves the rest of the request unsaved.
@rene-roid
rene-roid merged commit 3a63841 into master Oct 2, 2026
1 check passed
@rene-roid
rene-roid deleted the ui/liquid-glass branch October 5, 2026 16:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant