Overnight shifts in the calendar — now it's clear you finish at 07:00, not start
Before, a 21:00–07:00 shift appeared identical on both days and looked like a double shift. Now day two shows a clear 'finishes 07:00' with a back-arrow — so nobody second-guesses anymore.

Mia is a nurse and works night shifts. She enters "Shift 21–07" in the calendar, sets the date to Wednesday, and a true thing happens: the shift extends past midnight into Thursday. So far so good. But what we showed before — "21:00–07:00" on both Wednesday and Thursday — made it look like she was working two night shifts back-to-back. She herself knew the score, but a partner or bonus parent glancing at the calendar saw double shifts.
That's fixed now.
What you see today
On Wednesday (the day the shift starts) the event shows as before — with start time 21:00 and a small subline: "→ finishes 07:00 next day". It's a forward arrow, because that's what happens: the shift continues into the next day.
On Thursday (the day the shift ends) you instead see ← Finishes 07:00 with a back-arrow and no full row height. It's not a shift starting — it's just the marker that Mia's night ended early in the morning, and the rest of Thursday is free.
The arrow is the key. Forward arrow on day 1 means starts and continues. Back-arrow on day 2 means ends. No words like "night" or "continuation" — just a symbol that's instantly readable even for people scrolling fast.
A concrete example
Olle (Mia's husband) opens the calendar on Friday morning to check the weekend. Before, he might have seen:
Wednesday: Mia shift 21:00–07:00 Thursday: Mia shift 21:00–07:00
And he'd hesitate for two seconds thinking: "wait, is she working two nights, or how does this work?". Then he'd look at the dates to puzzle it out.
Now he sees:
Wednesday: Mia shift 21:00 → finishes 07:00 next day Thursday: ← Finishes 07:00
No doubt. Mia works one night, comes home Thursday morning, sleeps, and the rest of Thursday is free.
Why we changed it
We've been listening to nurses, firefighters, truck drivers and bakers for a few months. The recurring question has been just that — "so does this count as one shift or two?". That little uncertainty costs — extra mental load, more questions to the partner, lower trust in the calendar. And a calendar you don't trust doesn't get used.
This is the kind of plumbing that should sit in the background. You shouldn't have to interpret.
Trade-offs
This only applies to events spanning midnight. A normal 9-to-5 shift doesn't have this problem and shows unchanged.
iOS only for now. The web still shows day-spanning events the old way. It'll land in one of the next releases.
The arrow doesn't replace the full text on day 2. If you want to know which event is finishing — tap the row, and the event's detail view opens with title, location and notes.
Under the hood
FBEventCard got a new parameter displayDate — the date the card is currently being rendered on. Internally it compares to the event's startDate and endDate using Calendar.isDate(_, inSameDayAs:), and a RailMode enum is set to one of:
.normal— the event starts and ends on the same day (common case).startsToday— starts today but ends tomorrow (show start time + forward-arrow subline).endsToday— started yesterday and ends today (show a compact row with back-arrow and end time)
The RailMode.endsToday rendering is deliberately narrow — it takes less vertical space in the grid, because it isn't a shift you need to plan around, it's a note that the morning is locked but the rest of the day is free.
Try it
Add a night shift — say 22:00 today through 06:00 tomorrow — to the calendar. Flip to tomorrow's day. You'll see the narrow row at the top with the back-arrow. Tap it to open the detail view if needed.
Update the iOS app via TestFlight to get the change. It's the kind of small thing you notice when you stop double-checking — and that's our favourite kind of fix.