Johan Alphonso Braga
WorkProjectsReadingStackCraftDesignStatusResume

Utilities

Ask anything

Elsewhere

GitHub

All projects

Tools / 2026 / Live in the browser

GoodHours

What time works for everyone? Add where each person is and the hours they work, and GoodHours shows the times inside everyone's day, in each person's own time. It warns you when clocks are about to change and writes the invite for you. Sol, a little sun, helps along the way.

GoodHours

01

The problem

Meetings across time zones are drifting into the night: Microsoft's 2025 Work Trend Index found meetings after 8pm up 16% in a year, much of it from teams spread across zones. The usual tool is a converter with fixed offsets, which is wrong for part of every year because countries change their clocks on different dates. In 2026 the UK and EU go back on 25 October and the US on 1 November, so for that week New York is 4 hours behind London instead of 5, and a weekly call set in one city quietly moves an hour for everyone else. When nobody's day overlaps, the same people usually take the late call every week.

02

How I approached it

Every time is computed with Intl.DateTimeFormat and IANA zone names, so each day uses the offset actually in force there, and a wall-clock time in the hour skipped by spring-forward lands just after the gap. Each half-hour start is checked for every person at its start, middle and last minute against their hours and working days, and labelled work hours, early or late (within an hour of their day), their own time, or asleep (10pm to 7am). Shifts that cross midnight belong to the day they started, and working weeks can be any days. Times are ranked by the unhappiest person first and the total second, so one person at 3am never wins because everyone else is comfortable. When the best time still leaves someone out, it checks every pair of times and offers to alternate the pair where the worst-off person's two-week total is lowest, but only when that beats one fixed time. For a weekly meeting it walks the next 8 weeks in the organiser's city and lists the week each person's local time moves. Hours are typed the way people write them (9-5, 8:30am-4pm, 22:00-06:00), 116 cities are found by name, country, old name or zone, and share links carry everyone in the URL fragment.

03

The outcome

A team in New York, London and Manila gets 9am New York as the best time, 2pm in London and 9pm in Manila, with a note that from 28 October Ben's 2pm becomes 1pm and from 4 November Cy's 9pm becomes 10pm. The day strip shows every half hour for every person in four colours, and the invite text gives each person's day and time in their own city. 18 tests cover offsets across the 2026 change weeks, half-hour zones, the skipped spring-forward hour, hours parsing, meetings that run past the end of the day, weekends and Sunday-to-Thursday weeks, night shifts, the rotation rule, clock changes to the minute, weekly drift, invites, share links and city search. Checked headless in Edge at 375 px and desktop width with no console errors.

04

The mascot

Sol is a sun drawn in inline SVG. Sol shows how the time you're looking at feels: a bright sun when it's work hours for everyone, an orange evening sun when someone is stretching, and a sleepy moon with stars and a drifting z when it's the middle of the night for someone. Sol's eyes follow the pointer or the box being typed in, a tap gives a tip for the current step, and Sol speaks up when clocks are about to change or nobody's day lines up. Five quick taps make Sol spin. Everything Sol says goes through an aria-live region, Sol can be tucked away, and nothing moves under reduced motion.

05

What I learned

Converting a time between zones is one line of code. The work was everything around it: clock changes that land on different weeks, meetings that only half fit a day, and deciding fairly who takes the late call.

Also shipped the same day: Four older projects got real fixes: Velocity Lens packs the sprint for the most value and reads your backlog from CSV, Workflow CLI Kit reads README headings the way Markdown does and builds runbooks from a project's real scripts, Hollow Purple's gestures work at any angle and distance, and SAT0RU keeps both hands when the tracker labels them the same side. See the commits ↗

goodhours.johanthegoat.xyz Open in a new tab ↗
Next projectRoomCoat →