Repository navigation
Open where the doctor is, keyboard shortcuts, quiet motion and one offline line - #3499
Conversation
…k rail A cold open of a bare "/" (the installed app's start address or a typed visit) now goes to the last Work or Clinical page used, or to My Day while a real rostered shift is running. The page is remembered on this device only, as a bare path (no query string, no hash). Any "/" with a query, a reload, Back, an arrival from inside the app, or a set Default landing view keeps today's behaviour. The move uses replace, and it gives up the moment the doctor taps or types. The desktop and tablet work rail gains a Clinical button in the place the Clinical rail keeps My Day, opening the Clinical mode used last. The manifest keeps start_url "/" (its id is "/", so identity would not change either way); the decision is made on the client. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mws6schjKQbpCQqQzPMKSL
On a computer (a mouse or trackpad screen), never while typing in a field and never over an open dialog: - "/" and Ctrl K (Command K on a Mac) now reach the page's own search box on the Psychiatry and Medicines homes, where the shared composer is not on screen. Elsewhere the composer's existing shortcut and Work's AI Search shortcut keep doing this; a key a page has handled is left alone. - "?" on a Clinical page shows a short "Keyboard shortcuts" list. Work pages keep their AI Search list. - The Work Help page gains an "On a computer" row that opens the list. Esc already closes every sheet and dialog (the shared Sheet owns it), so nothing changed there. The composer's position and behaviour are unchanged. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mws6schjKQbpCQqQzPMKSL
One small motion set in src/app/motion.css, on the design system's motion tokens, all off under prefers-reduced-motion and the in-app "reduced" Motion setting (the in-app "full" opts back in): - Tab content fades in over --duration-quick (150 ms) when a role="tab" control switches, and when moving between two Work pages (Work's tab row is pages). The Work band (title and tabs) stays put; only opacity moves, so nothing shifts position. Clinical routes and anything holding the search composer are never faded. - A tapped Work list row lights at once and lets go over --duration-deliberate, so the highlight is still visible as the next page opens. Bottom sheets already rise with a soft settle (the shared Sheet's sheet-up), so nothing is added there. The number count-up was skipped. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mws6schjKQbpCQqQzPMKSL
The app-wide offline notice now reads "Offline, showing what was saved at 19:02": the work-clock (Perth by default) time the page on screen was last opened online, which can understate how fresh the page is but never overstates it. A copy from an earlier day names the day; an unknown time says "saved earlier". It is the same card in Work and Clinical: Work's squeezed one-row variant broke once the line named a time, so it now draws the Clinical card (keeping Work's glass ground). The "needs a connection" sentence stays for screen readers. On Call's saved-copy banner uses the same wording (a server that could not be reached reads "Couldn't refresh, showing what was saved at ...", since that is not lost signal), with the same offline icon. public/sw.js is untouched, and no new offline caching was added. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mws6schjKQbpCQqQzPMKSL
A tab that has already been round the app (more than its own start page and this one in its history) keeps today's "/" exactly, so typing "/" mid-session, or a test that visits a Work page and then "/", is never moved. The installed app's own window still always opens where the doctor was. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mws6schjKQbpCQqQzPMKSL
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configuration
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
This pull request has been ignored for the connected project Preview Branches by Supabase. |
🏁 CodeAnt Quality Gate ResultsCommit: ✅ Overall Status: PASSEDQuality Gate Details
|
Merging this PR will not alter performance
|
A page reached after the signal drops comes from a saved copy of unknown age, so the offline line now says "saved earlier" instead of keeping the previous page's time. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mws6schjKQbpCQqQzPMKSL
|
Full browser suite on this draft (run 38260010530, failed jobs re-run once): Chromium, Firefox, desktop Safari and iPad passed. The one failure that looked specific to this PR, Generated by Claude Code |
🤖 CodeAnt AI — Review Status
|
Thanks for using CodeAnt! 🎉We're free for open-source projects. if you're enjoying it, help us grow by sharing. Share on X · |
There was a problem hiding this comment.
BigSimmo has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
PR Summary by QodoRestore last place on cold open and improve shortcuts, motion, and offline notices
AI Description
Diagram
High-Level Assessment
Files changed (25)
|
Qodo FixerNo findings are available for this PR yet. Findings appear here once Qodo has reviewed the PR. |
|
Claude encountered an error after 2s —— View job I'll analyze this and get back to you. |
Code Review by Qodo
No findings for this group No findings for this group 1. Fallback offline wording is a hand-copied string
|
|
Code review by qodo was updated up to the latest commit d239a51 |
|
Plan monthly usage limit reached ↗ |
…e helper loaded, or if the home now has a search Also adds useSearchParams to one test's navigation mock now that the offline notice reads the query. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mws6schjKQbpCQqQzPMKSL
|
Code review by qodo was updated up to the latest commit 247daaa |
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mws6schjKQbpCQqQzPMKSL
|
Cancelled. View session → |
…ing the work clock up front The bundle budget failed on /open-shifts, /roster/shifts and /teaching/assessments (+~6 KiB gzip on every route from PwaLifecycle in the root layout importing savedLine -> work-time + account-scoped-browser-state).
|
Code review by qodo was updated up to the latest commit ac2ff90 |
…ine's helper when the signal returns The motion styles now ride in the main stylesheet instead of a separate one on the search-app layout. That separate sheet tipped the layout over its chunk count, so the build copied the account code into a second chunk on every Work page. /roster/shifts and /open-shifts are back under the 10% limit (local build: +9.7% and +9.3%). The offline line's wording helper is tried again when the signal returns if its first load failed, so a later offline notice can still name its time. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mws6schjKQbpCQqQzPMKSL
Code Review ✅ Approved 2 closed / 2 findings🟡 Medium risk · Cold-start routing uses local history and roster state, which could send clinicians to an unintended page when either signal is stale. Adds cold-open return to the last-used Work or Clinical page, a Clinical button on the Work rail, ✅ 2 closed✅ Bug: Offline time can claim a cached page is fresher than it is
✅ Bug: Deferred LastPlace misses taps and keys made before its chunk loads
VerificationRules No rules evaluated Functional validation Not enabledAuto-approval Approved OptionsAuto-apply is off → Gitar will not commit updates to this branch. Comment with these commands to change the behavior for this request:
Was this helpful? React with 👍 / 👎 | Gitar |
|
Code review by qodo was updated up to the latest commit d5b6320 |
User description
🤖 Generated with Claude Code
https://claude.ai/code/session_01Mws6schjKQbpCQqQzPMKSL
Summary
Before: the installed app always opened on Clinical Answer; the desktop Work rail had no way back to Clinical; "/" and Ctrl K did not work on the Psychiatry and Medicines homes and there was no shortcuts list; tabs swapped instantly; the offline notice did not say how old the page was.
After:
How: last-page memory is a bare path on the device only. The manifest and its start address are unchanged; the decision happens on the device and uses a replace navigation.
public/sw.jsis untouched.Areas touched: App experience, Personal practice, Design system (plus 15 files not yet placed in any area)
Verification
check:design-system-contract: pass.npm run test:focused: 23 files, 347 tests passed.Risk and rollout
Notes
Site-wide recommendations 1, 5, 9 and 10 (12 Oct 2026). Offline copies of On Call numbers and crisis lines need a service worker change and are not in this PR.
Generated by Claude Code
Summary by cubic
Opens a cold start where the doctor left off instead of always on Clinical Answer: a bare
/in a fresh tab or the installed app goes to the last Work or Clinical page used on this device, or to My Day while a real rostered shift runs. The Work rail gains a Clinical button,/and Ctrl K reach a page's own search box,?opens a keyboard shortcuts list on a computer, tab content fades in quietly, and the offline notice names when the saved copy was taken./moves: reloads, Back, in-app arrivals, any query or hash, a tab already used, and a set Default landing view keep today's behaviour. Only bare page paths are remembered (never token, setup, or search-result pages), and the move gives up the moment the doctor taps or types — the roster probe is deferred so the home page stays within its download budget.Written for commit d5b6320. Summary will update on new commits.
CodeAnt-AI Description
Resume the last-used page and make navigation and offline status clearer.
What Changed
/and Ctrl/Command+K focus an available search box, and?opens the shortcut list on Clinical pages. The list is also available from Work Help.Impact
✅ Fewer steps back to the last-used page✅ Faster keyboard search on Clinical pages✅ Clearer age of offline copies and refresh failures💡 Usage Guide
Checking Your Pull Request
Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.
Talking to CodeAnt AI
Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:
This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.
Example
Preserve Org Learnings with CodeAnt
You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:
This helps CodeAnt AI learn and adapt to your team's coding style and standards.
Example
Retrigger review
Ask CodeAnt AI to review the PR again, by typing:
Check Your Repository Health
To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.