T26: Redesign (FIT light / neutral dark themes, sign-in, overview, icons) #25
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "t26-redesign"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
T26 Redesign
New visual identity with two themes and a System/Light/Dark switch. Stacked on #24 (T25).
Themes
#0068B9primary, gold#F9B001accent and marker.#191919page,#1F1F1Fsurfaces,#303030borders,#EFEFEFtext and buttons). Links stay neutral and underlined.src/styles.css) used on every screen and on the consent page. Nodark:variants or raw palette colours in components.prefers-color-scheme, so there is no flash. Theme state is shared between all Preferences controls (src/lib/theme-store.ts).Screens
/and/login): split layout. Sign-in on the left, "What FIT-OS gives you" plus the source-code link on the right. A slowly rotating orbit of the real service logos (Sirius, Marast, Klasifikace, Courses, GitLab) pauses on hover and stays still under reduced motion. No scrolling on desktop: verified at 1024×700, 1280×720, 1366×768, 1440×800 and 1920×1080, in both themes, in cs.FIT-OS▌wordmark, icon navigation, and an avatar menu holding Preferences, Account and Sign out. On mobile the nav becomes a bottom tab bar.lucide-react.Logos
FIT service marks are vendored in
public/services/and their ownership is noted in the README there. They are not covered by the MIT licence. Assistant marks come from@lobehub/icons(MIT), simple-icons (CC0) and devicon (MIT), inlined insrc/components/BrandIcons.tsx.Design review loop
Four rounds of screenshots (light/dark, desktop/mobile) were graded by a Claude Opus subagent and by ChatGPT Astra, with feedback from both applied each round.
Astra code review
Fixed:
useSyncExternalStorestore, with a unit test and a browser smoke test.fit.deadlineswarnings, so a failed or truncated source looked like "nothing due". AddeddueSoonPartial: the overview shows a notice and drops the deadline count from the summary.Dismissed: none.
Follow-up (design feedback)
role="switch"toggle on Connections. Each row expands to show what FIT-OS reads and its scopes, marked granted or not.service_settingstable (migration0002). A row means "off", and rows are deleted with the user (cascade).registry.callrejects calls to a switched-off service with a newservice_disablederror code.fit.today/fit.deadlinesskip that source and add a warning. Course enrollment (Sirius) respects the Sirius switch.fit.statuslistsdisabledServices, and thefit://helptext tells assistants how to handleservice_disabled.setServiceEnabledFnonly accepts same-origin requests from a signed-in session. Each switch allows one in-flight save at a time.Astra review (follow-up):
fit.courses.list/search code=allreached Sirius through the enrollment lookup while Sirius was switched off. Now covered by a test.Follow-up 2 (calendar and polish)
fit.sirius.courseEvents(/courses/{code}/events, verified live with the personal Sirius scope). It returns only class data, never other students, and respects the Sirius switch.Astra review (follow-up 2): all fixed. Superseded parallels responses are ignored (request id). Weekend parallels get a column. The event button keeps type, room and cancelled/moved status in its accessible name, and the details repeat that status.
Follow-up 3 (time grid, agent prompt)
layoutLanes. Deadlines get a strip under the day headers, and today has a now-line. Details open in an overlay popover. Mobile keeps the agenda list.agentSetupPrompt, built from the same snippets as the tabs) has a manual-copy fallback, and every MCP URL mention in the steps is a copyable chip.Astra review (follow-up 3): all fixed. Intervals are day-local and DST-safe, clipped at midnight (
dayInterval, tested). Overlap packing uses the drawn extent of short events. Blocks and deadline lists carry the day for screen readers. A clipboard failure shows the prompt to copy by hand.Checks
bun run lint && bun run typecheck && bun run test: 302 tests pass. Smoke-tested withbun run devand a signed-in session (overview, theme sync, no-scroll sign-in).🤖 Generated with Claude Code