Daily log screen
The surface somebody returns to every day, judged on how little it costs rather than on how much it shows.
What this screen does
This is the screen a person opens for the ninetieth consecutive day. They are about to record something they have recorded eighty-nine times, and the only question that matters is how fast they can be finished.
It answers two things: have I logged today, and how do I log now. The first is answered before the reader has focused their eyes. The state of today is the most prominent thing on the screen. The second is one target in the lower third, reachable with the thumb of the hand already holding the phone.
Everything else is history, and history is secondary. A log screen that leads with a chart is optimising for the reviewer rather than the person doing the work, and the person doing the work is the one whose effort produces the chart.
What this screen deliberately does not do. It does not interpret. Nothing here grades a reading, congratulates a streak, or warns about a gap: interpretation belongs on the results and trends screens, and a judgement attached to the act of logging is a tax on logging. It does not gamify. A streak counter converts a missed day into a loss and gives people a reason to stop rather than to resume. And it does not pre-fill a measurement.
Composition
No composition tree yet for daily-log-screen. If it turns out to be a single element rather than a compound component, say so here in a sentence. An empty tree and a deliberately flat component look identical, and only one of them is finished.
Rungs are given by position; they are named in The ladder.
DailyLogScreen page ground
├── Header page ground
│ ├── Title what is being logged
│ └── DateControl today, changeable, never automatic
├── TodayStatus one rung above the page
│ ├── Value | EmptyState today's reading, or an honest absence
│ ├── RelativeTime when it was measured
│ └── EditControl correcting is as easy as adding
├── HistoryList page ground
│ └── HistoryRow … date, value and unit in a list, not a chart
│ ├── Value
│ └── RelativeTime
├── LogAction fixed, lower third, thumb reach
└── LogSheet one rung above the screen, on demand
├── Field
│ └── ReadingInput decimal keypad, unit beside the field
├── TimeControl defaults to now, editable
└── SaveAction above the keyboard, alwaysTimelineEntry now ships, so a team building the history list reaches for it as one dated row rather than composing each row by hand from Value and RelativeTime.
Three composition rules this screen demonstrates:
Today is lifted; history is not. Exactly one surface is off the page ground in the resting state, and it is the state of today. The reader's question is answered by elevation before it is answered by reading.
The action is fixed, not scrolled. The log control does not move with the history list. A primary action that scrolls away is a primary action the reader has to hunt for on a screen they use daily.
The sheet is a rung, not a screen. It sits above the surface it came from and leaves it visible, which is what makes dismissing it obviously safe. See Capture a daily log entry for the mechanics.
Preview
NOT IMPLEMENTED. The opsinjs component `daily-log-screen` does not exist in any released version of opsinjs. There is no package to install, no module to import and no props interface to generate code against. Everything on this page is a specification of intended behaviour and may change without notice. Do not write code against it.
daily-log-screen is not built yet
/view/base/base-lyra/screen/daily-log-screen?mode=light, which renders under the product theme rather than the documentation chrome. There is nothing at that address yet.PlannedRoadmapWhat “planned” means
/view/base/base-lyra/screen/daily-log-screen?mode=lightSafety notes
- No measurement is ever pre-filled. The convenience of defaulting to yesterday's value is exactly how a log fills with numbers nobody measured.
- The recorded time is the measurement time, with its time zone, and the reader can change it. A reading logged on a flight must not move a day.
- The unit travels with the value. Stored canonically, converted once at the edge. Unit systems covers both. A stored number with an implicit unit is a future incident.
- A plausibility warning describes; it never blocks or corrects. The one person whose genuine reading falls outside your expected span is the person whose reading matters most.
- A gap in the history is drawn as a gap. Missing days are not skipped over to make the list look continuous. See Data states.
- Logging on somebody else's behalf is visibly attributed, or readings will end up on the wrong person's record.
- No status colour appears on this screen. Logging is not a clinical state, and a reading that turns amber as it is entered is a judgement delivered at the worst possible moment. The two colour axes keeps status off this screen.
- Nothing here is a reminder mechanism. Notifications that chase a missed entry are governed by the alarm budget, not by this screen. Alarm fatigue governs them.
Accessibility
Landmarks and headings. One main, one H1 naming what is being logged. Today
and History are H2s. The heading outline alone tells a reader what the screen holds.
Focus on entry. Focus lands on the main content, and the today status is the first thing announced. When there is no reading, that announcement includes the fact that there is none. The most common defect is a screen where a screen-reader user must traverse the whole history list to discover whether they have logged today.
Focus through the sheet. Opening moves focus into the sheet; it is trapped while modal; Escape dismisses it; and focus returns to the control that opened it, not to the top of the page. Keyboard and focus specifies this.
The keyboard never covers the save. The sheet respects the keyboard-safe inset at every detent and at every text size. This is the failure that makes a logging flow unusable one-handed while looking fine in a screenshot.
Announcements are proportionate. The save is announced politely and does not interrupt. Undo remains reachable by keyboard for as long as it is offered. An undo only a pointer can reach is not an undo.
Validation is heard, not only seen. Messages are associated with their field and announced when they appear. See Screen readers.
Targets. Every control clears 44pt with real separation, and the primary action sits in the one-handed reach zone. Density and touch defines that zone.
Text at 200%. The sheet scrolls internally, the save control stays visible, and the history list reflows to stacked rows rather than truncating values.
Input survives. Rotation, backgrounding and dismissing the keyboard do not discard a half-typed reading. Losing typed input is the fastest way to end a logging habit.