Repository navigation
Conversation
…t inside its window is not late The calendar's day list headed a pile "Today" over visits due on 7 November, 15 November and 29 December. The kernel calls a contact `due` for as long as its window is open, which for an antenatal visit is four weeks, so what the pile holds is everything that can be done on the day being looked at. It says that now, and each row says in words which day it is due and when the window shuts or shut. The home card said "Late since Fri 30 Oct" about a visit whose window runs to 27 November, because the card compared the due date with today instead of reading the state the kernel sent. Only a contact the kernel calls missed is late. One past its due date with its window still open is waiting, and says "Due since". Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…role in words Her course of care showed "Dated 2026-10-16 from marked" and "Due 2026-11-15 · open 2026-11-01 to 2026-11-29 · MO". It now reads "Dated 16 Oct 2026" and "Due 15 Nov 2026 · open 1 Nov to 29 Nov · Medical officer". The role's name is the bundle's own, from the catalogue's vocabulary, and the arc falls back to the bare id rather than inventing a word when no title is declared. The same change gives the tab strip over her record the one the visit screen already uses. Its old class had lost its stylesheet when the control it belonged to was removed, so Care, Encounters, Overview and Timeline drew as four browser buttons running into one another. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A check-up recorded on 26 September sat under 22 October, its due day, with "Recorded 26 Sep" written inside the square. Her page is a history, so a recorded visit now sits on the day it was recorded and carries its due day beside it. The facility calendar still moves a late visit onto today, so it is not lost off the edge of the range. That difference is deliberate and the comments in both files say so. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ty hour grid says why it is empty A chip in a 130px column carrying a name, "due 30 Oct" and the visit's title could not fit on one line and ran over its own edge and the next day's column. It wraps now, keeping the name whole and giving up the title first. Nothing is ever drawn in the hour grid: a visit is owed over a span of days and carries no hour, so they are all chips in the all-day row. The hours stay because appointments are coming, and a line above them now says so rather than leaving a ruled rectangle that reads as a screen that failed to load. The grid also opens at seven in the morning again, which the taller all-day row had broken. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The form asking a nurse for the date a pregnancy was marked high risk showed "16/10/20": the box was capped at twelve characters, which the browser's own date control, with its calendar button, cannot draw a whole date in. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The card stack said "1 of 24" with "14 more for others" beneath it, and nothing on screen said whether the 24 already held the 14. The count now names the list it is counting, "1 of 24 for you", and the control beneath it offers "Show all 38, including 14 for other roles". Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The cards under "Next visits" stacked everything in one column, so the day a visit is owed was a line of small type above the woman's name. A card is now a calendar block on the left, the day large with the month and weekday under it, a dividing edge, then her name, her details, the visit and the role that owes it. The date in the block is the one the words beside it are computed from, read through day.ts rather than picked off the row here, so the two can never disagree. A late visit turns the block and its edge red as well as saying "Late since", so the state is louder than it was and is still carried by more than colour. A phone keeps both columns with a narrower block and a smaller name, which holds an ordinary long name on one line at 375px. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A selected scale, today's date and "Open current encounter" were painted near black, while Commit, every link and every focus ring were blue. Two primary colours on one screen read as two design languages. The near-black primary was a deliberate decision, written in the token file: a button pressed a hundred times a day should not spend the hue that means national identity. In use it did not hold, so the primary is now the accent and ink goes back to being text. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The page had controls in two places: five role chips wrapped above the day on the left, the scales and the date arrows on the right, with the month's name between them reading as a third control rather than the title. There is now one band across the top: the arrows, Today, the month as the heading, a single narrowing control and the three scales as one segmented switch. The roles are inside that control, each with the number of visits it holds, which the strip of chips never said. The day column always says which day it is showing, and carries a way back to today when it is showing another one. A day narrowed to a role that owes nothing says so and offers the way back to everyone, instead of a sentence telling the reader to go and press a chip. A row no longer breaks a word across lines: it read "Second check-" over "up". The visit's title holds a line of its own and her name is the line under it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Tapping a card on the home page landed on one square in an otherwise empty November, with her record below the fold. Her page is a history, so it now opens on every visit she owes or has had, in order, from the day the pregnancy was dated. The calendar is still there, behind a switch, because seeing where visits fall against the weeks is a real second question. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…"due" is sage Owner, on the card: "this is too much text under the headings, the date is barely visible, the date should be a component, not hidden text", and "instead of the blue use sage green like the colour attached". THE DATE IS A TILE. The day is large, the month sits under it, and an edge on the left carries the state, so the four check-ups read as a calendar down the card. It lays out the kernel's YYYY-MM-DD by position and works nothing out; a date in any other shape is shown whole in the same tile. The full date is its accessible name. LESS TEXT. Each check-up was a title, two chips and a sentence: "Due 6 Nov 2026 · open 23 Oct to 4 Dec · ANM". It is now a title, a state chip, the programme's own label and the one fact the tile does not carry, who owes it. The window a visit may be done in, and the full sentence, stay on the row's title and as screen-reader text. A finished check-up shows no second line at all: the tile has its date and the chip says done. The basis line under the heading is shorter and its date is bold: "Last menstrual period . 10 Apr 2026". SAGE FOR WHAT IS OWED. Sampled from the attached colour (hue 160): a mid sage for the light theme (#396F5D, 4.99:1 on its tint, 5.53:1 on the page) and the attached deep green itself as the dark theme's tint, declared in all three theme blocks. Due is sage, missed stays the one red, and done takes no colour so nothing finished competes with what is still owed. TONE, the map the calendar and the grid key their bars on, is unchanged; the card's own choices are a local map. Done was green; with sage beside it the two greens could not be told apart, so done is now quiet. Scoped to this card. The product's blue accent elsewhere is untouched. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Every primary control, selected state and link was blue. It is now the forest green of the colour attached to the request, in both themes. The attached colour itself (#10281F) is almost black at the size of a button, which is what the accent had just stopped being, so it is the hover and pressed step and the resting colour is the same green two steps up: plainly green, white text on it at 7:1, and a shade deeper than the sage that marks a visit as owed, so a filled control and an owed check-up are never read as the same thing. Co-Authored-By: Claude Opus 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.
Seven things a walk through the app with fourteen patients turned up. All of them are in the web app; none of the clinical rules changed. Each was looked at in a running copy of the app before and after.
Screens that were saying something untrue
The day list's heading now agrees with the rows under it. It headed a group "Today" over visits due on 7 November, 15 November and 29 December. Those visits can all be done today, but they are not due today. The group is now called "Open today", and each row says in words when it is due and when its window shuts.
A visit inside its window is no longer called late. The home page said "Late since Fri 30 Oct" about a visit that can still be done until 27 November. It was comparing dates itself instead of reading what the kernel decided. Only a visit the kernel calls missed is late now; one past its due date with time left says "Due since".
A patient's record is written in words. It showed "Due 2026-11-15 · open 2026-11-01 to 2026-11-29 · MO". It now reads "Due 15 Nov 2026 · open 1 Nov to 29 Nov · Medical officer". The role's name comes from the bundle's own vocabulary, never from the renderer.
A recorded visit sits on the day it happened. On her own record a check-up recorded on 26 September was drawn under 22 October, its due day, with "Recorded 26 Sep" inside the square. It now sits on 26 September with its due day noted beside it. The facility calendar still deliberately moves a late visit onto today; that difference is intended and is documented in both files.
Things that were hard to read
The week's chips no longer overlap their own text. A chip carrying a name, a due date and a title could not fit in a column and ran over itself and into the next day. It wraps now, keeping the name whole.
The empty hour grid says why it is empty. Nothing is ever drawn in it, because a visit is owed over days and has no hour. The grid stays, since appointments are coming, and a line above it now explains the blank. It also opens at seven in the morning again.
The patient tab strip is styled, and the date box fits its date. Care, Encounters, Overview and Timeline now use the same strip as the visit screen instead of four plain browser buttons. The mark form's date box showed "16/10/20" with the year cut off; it is wide enough now.
And the home counts add up. "1 of 24" above "14 more for others" gave the reader no way to tell whether the 24 included the 14. It now reads "1 of 24 for you", with "Show all 38, including 14 for other roles" beneath.
The home card's new shape
The cards under "Next visits" now read as a calendar entry: the day of the month large on the left, with the month and weekday beneath it, a dividing edge, then the woman's name, her details, the visit and the role that owes it. It was all one column before, so the day was a line of small type above her name. A late visit turns the date block red as well as saying "Late since". Looked at on a laptop and at phone width.
Second round, from the owner's own walk through
One primary colour. Selected chips, today's date and "Open current encounter" were near black while Commit and every link were blue. The primary is now the accent everywhere.
The calendar page has one band of controls. The role filters were on the left, the scales on the right, and the month's name sat between them like a third control. There is now one band: arrows, Today, the month as the heading, a single narrowing control (each role with the number of visits it holds), and the three scales as one segmented switch.
The day column always says which day it is showing, with a way back to today when it is not today, and a day narrowed to a role that owes nothing offers the way back instead of telling the reader to press a chip.
A patient opens on the list of her visits, in order from the day the pregnancy was dated, instead of on one square in an empty month. The calendar is behind a switch.
No word breaks across lines in a day row: it read "Second check-" over "up".
Screens whose appearance changed
Home (the "Next visits" cards changed shape), the facility calendar (day list, week grid and month grid), a patient's record (tab strip, her calendar and her course of care), and any form with a date in it. Every primary control in the product changed colour from near black to the accent.
Checked
sh scripts/check.shends with "all checks passed", with nothing skipped. Every fix was looked at in a running copy of the app, seeded with the fourteen-patient centre, in its own scratch database.🤖 Generated with Claude Code