The parts that make Flux a calendar rather than a list. These components own a day: they place a block at a minute, argue with you when two blocks collide, and keep an immutable record of the plan you locked so the day you had can be compared against the day you intended.
A day in Flux is a fixed window: 7am to 10pm, hardcoded as START_HOUR = 7 and TOTAL_HOURS = 15. Everything below places itself inside that window, packs overlapping blocks into columns, and has an opinion about what to do when two things want the same minute.
Entry type the rest of the app imports. It carries the most states of anything in Flux.Six of its states are shown; it has more. The block also renders a drag handle on hover, three drag sub-states (move, resize-start, resize-end), and returns null outright when the computed duration is zero or less. The colours are the app's --chart-2 for atomic and --chart-3 for container, assigned at creation time in QuickAddEntry rather than by the block itself.
The view is a 4-way union: day, week, agenda, circular. It defaults from settings.defaultView but is force-overridden to day on mobile, so the setting silently does nothing on a phone.
Unchanged rows carry no icon and no label. That is deliberate in the source: only divergence is annotated, so the eye lands on what moved.
Two alternate readings of the same entries. The circular view exists to make one thing obvious that a grid hides: how much of the day is not spoken for.
The centre always reads "Today" plus the weekday: it is not date-aware. The Free Time slice is the only one whose tooltip omits a time range, because its start is the literal string "N/A".
The only difference from calendar/circular-view.tsx is the import path and some trailing whitespace. Deleting it is safe; it is shown here because a showcase that quietly omits dead code is a showcase you cannot count.
Flux's answer to "what am I supposed to be doing". These strip the day down to one block and a countdown, and they are the only place the app deliberately shows you less than it knows.
Two findings, both reproduced as shipped. First: the Focus button is absolutely positioned at right-4 over a description row whose time is flushed right, so the 40px button lands exactly on the end time and hides it. Second: the dials look like time controls but only raise a toast reading "Time Adjusted"; they do not move the entry.
Pause does not pause. The timer recomputes from the entry's wall-clock end, so the display freezes while the deadline keeps coming. Resuming shows the time you actually have left, not the time you had when you paused. Overdue clamps to 00:00 rather than counting negative.
The microphone button has no click handler. "Use Voice Input" is decoration in the shipped code. Also worth knowing: the sheet opens from the bottom on mobile and the right on desktop, and switching "Length is flexible" on disables the duration field, because three interlocking effects then derive it from start and end.
Flux's central claim is that a plan you can quietly rewrite is not a plan. Locking freezes the day into an immutable snapshot; everything here exists to put that snapshot next to what actually happened.
The deleted rows in the Planned column are computed, not stored: they are the entries present in the snapshot and absent from today. That is the only place in Flux where deleting something makes it more visible.
The variable picker filters across all five kinds (person, place, tool, topic, condition), and typing a name with no exact match offers to create it as a tag on the spot. Conditions render as outline badges; every other kind is a solid badge. Moving the signal slider writes a correction row on release, not on drag.