On Monday the app's line to Notion went dead. Requests from our servers to the Notion API were rejected while the identical requests succeeded from any other network, which at the time looked like a problem on Notion's end. It was not. On September 1 the cause turned up in our own code; the outage arc below carries the correction. Nightly syncs could not run until the connection was restored, so the site said so plainly while the case went through Notion's support channel. The week still shipped: 27 changes landed across the app and the site. Sign-in stopped caring about email capitalization. Your competitions became a list. Competitions now finish on their own, even on nights when syncs cannot run.
Sprint map
One row per story arc, one column per day.
| Mon 17 | Tue 18 | Wed 19 | Thu 20 | Fri 21 | Sat 22 | Sun 23 | |
|---|---|---|---|---|---|---|---|
| When the sync line went dead | |||||||
| Invites, politer and stricter | |||||||
| Competitions finish on their own | |||||||
| Sign-in forgives capitalization | |||||||
| Your competitions, as a list | |||||||
| The widget fails soft | |||||||
| Small comforts at the door | |||||||
| Under the hood |
The quiet Tuesday and Wednesday are real. Those days went to the outage, work that produces letters rather than merges.
Merges per day
The arcs
Leading with the outage, then in rough chronological order.
When the sync line went dead
Since Monday, August 17, our servers could not reach the Notion API. Requests from our infrastructure were rejected while the identical requests succeeded from any other network. We handed that evidence to Notion's support team. While the case was worked, the app said so instead of failing quietly: a notice sat on the start page and on the connect step, trimmed the next day so it read cleanly on phones. Users caught mid-connect by the outage heard from us directly.
Update, September 1: the fault was ours. Notion's API expects the access token in a specific header format. Our servers had always sent it in a slightly different one, which Notion tolerated for years and stopped tolerating in mid-August. Every request from our backend failed from that day on. The requests we replayed from other networks used the correct format, which is why they succeeded and why we misread the evidence. Notion's support team pointed us at the header. The fix went live on September 1 and the notice came down the same day. We are sorry, to Notion and to everyone whose syncs stopped.
Invites, politer and stricter
Clicking an invite link for a competition you already joined used to produce an error. Now the app recognizes you and simply takes you where you were going. The sending side got stricter. Invite emails carry daily limits per sender and per recipient, so nobody can use our mails to flood an inbox. A rejection from the mail provider no longer wedges a duel's invite slot either; the next attempt goes through instead of hitting a phantom limit.
Competitions finish on their own
A competition used to be closed as a side effect of its participants' nightly syncs. If those syncs did not run, an end date could pass with the scoreboard left hanging open. Closing time is now its own overnight pass: once a competition's final day is over everywhere on Earth, it completes, no matter what else ran that night. The timing is no accident. With syncs interrupted this week, this is the piece that keeps finished competitions from staying open. It went live in production on Friday.
Sign-in forgives capitalization
Email addresses no longer care about their casing. The account created as Jane@example.com signs in as jane@example.com, resets its password, gets its mail. New addresses are stored in one canonical form. Older accounts resolve tolerantly. In the rare case where an account genuinely needs its original spelling, the login screen now says exactly that in plain words instead of failing with a generic error.
Your competitions, as a list
The app used to show the one competition in front of you. Now there is a list: the competitions you belong to, in one place, served by a dedicated read on the server and rendered on the site. The one-competition-at-a-time rule still stands. The list is groundwork; it makes room for holding more than one membership somewhere down the road.
The widget fails soft
An embedded widget whose access token had gone stale used to be a broken box in your Notion page. Now it falls back to demo data with a message that names the problem and points at the fix. A half-configured widget stopped showing an endless spinner too; it stops early and stays quiet instead of pretending to load.
Small comforts at the door
The register page now offers the obvious link for people who already have an account: go sign in. The sign-in and sign-up forms carry proper autofill hints, so password managers put the right value in the right field. The header navigation re-learned how to fit its full row of links on narrow screens.
Under the hood
The server framework and the site's framework both took their current updates. The test suites grew where it hurts: the one-competition rule now has end-to-end coverage including its dead ends, while two long-red widget configuration specs were repaired rather than skipped. Operations picked up a self-healing step for a recurring maintenance chore. A few quieter hardening items shipped alongside; those stay unnamed on purpose.
Compiled from the week's merge history across the Notion Habit Heroes app and this site, August 17 to August 23, 2026. The empty Tuesday and Wednesday bars are real: those days belonged to the outage.
