Skip to content

Seven screens that said something untrue, or were hard to read - #3

Open
obadiah-1 wants to merge 12 commits into
mainfrom
claude/musing-shirley-6b23c6
Open

obadiah-1 wants to merge 12 commits into
mainfrom
claude/musing-shirley-6b23c6

Conversation

@obadiah-1

@obadiah-1 obadiah-1 commented Nov 5, 2026 •

Copy link
Copy Markdown
Collaborator

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.sh ends 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

obadiah-1 and others added 12 commits November 5, 2026 18:58
…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>
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