Repository navigation
feat(ui): window with a sidebar and status cards, after the chosen mockup - #20
Merged
Merged
Conversation
…ckup The window follows the mockup the owner picked: a violet-to-cyan frame, a sidebar (Overview, Backups, Storage, Settings) under the traffic lights, a large title and glass cards with gradient borders. Every card shows what the app already reads; nothing is made up: - SSD buffer: buffer size, free disk space and the upload queue (where the mockup has a sparkline - the app keeps no buffer history). - Google Drive Time Machine: the upload state from `UploadState`, a progress bar only while Time Machine runs (no empty "0%" bar), otherwise the age of the last completed backup. - System status and Disks: green only when the state really is good; a hard failure (image detached, Drive not mounted, no backup for hours, upload needing action) is red, an unknown or self-passing one amber. - The mockup's backup history chart is left out: no history exists. Nothing was removed: the setup steps, the error banner (now in every section), the upload card, buffer details, space limit, OAuth credentials and every button are still there, sorted into the sections. Sections with a problem get a coloured dot in the sidebar. The backup watchdog's problem sentences, which the window never showed, are listed under Backups. The views now observe `AppStatus` themselves. It is a separate ObservableObject, so the window redrew only when the controller assigned `credentials` at the start of a refresh, and showed the previous cycle. The menu bar popover gets the same frame, pill and tiles, plus the age of the last completed backup. Pulsing status dots and button animations respect Reduce Motion, cards turn opaque with Reduce Transparency, and pills use fills dark enough for white text. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Redesign of the window and the menu bar popover after the mockup the owner picked (violet-to-cyan frame, sidebar, large title, glass cards with gradient borders, green status cards with pills). Only views, the theme and the Polish table change; the controller, services and status model are untouched.
Do not merge without a look at the running app - merging to main releases to Homebrew.
What follows the mockup
.windowStyle(.hiddenTitleBar)), gradient frame with a soft glow, ambient violet and cyan glow behind the content.UploadState.headline(dot pulses while uploading); gradient progress bar with "84% | Backing up: 3.4 GB of 4 GB" only while Time Machine runs, fromtmutil status; otherwise the age of the last completed backup.headline; Disks - Drive mount, backup image, Time Machine destination.Real data and error states
AppStatus.healthy, or every disk fact OK). A hard failure is red ("Action needed", "Not attached", "Drive disconnected"): image detached/dead (ENXIO counts as not attached), Drive not mounted, Time Machine not pointing here, upload needing action, no backup for hours. Unknown or self-passing states (tmutil did not answer, queue unknown, Google 750 GB limit) are amber.What is left out, and why
Nothing removed
Setup steps (with folder choice and image size), upload card, buffer details, space limit (limit field, Save, Measure now, quota command), OAuth credentials, Back up now / Stop, Check image consistency, Refresh, Open CloudMachine, Quit - all still there, sorted into sections:
Small fixes on the way
AppStatusdirectly. It is a separateObservableObjectwhose changes do not go through the controller, so the window redrew only whencredentialswas assigned at the start of each refresh, and showed the previous cycle's readings.LocalizedStringKey.@AppStorage("dashboardSection")).Accessibility
L10n); 16 new keys added and 8 that are no longer used removed.How it was checked
swift-format lint --strict --recursive Sources Tests- clean. Locally this was the Xcode toolchain's swift-format, not the Homebrew one CI uses, so CI has the final word.swift build- OK.swift test --filter "L10nTests|AppStatusHealthTests|UploadStateTests"- 35 tests, 0 failures (every key translated, no unused entries, no Polish in code). The full suite was not run locally; CI runs it.AgentRepair.afterLaunch), and that is the owner's production backup.cacheDisplaydoes not render blurs, so the glows in those screenshots look like hard circles; in the app they are blurred. Worth checking in the real window: the frame's corner radius against the system window corners, and the traffic lights over the sidebar.🤖 Generated with Claude Code