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.

7
days covered (Aug 17–23)
27
changes merged (14 app · 13 site)
1
production deploy
15
backlog items cleared
2
merge waves carried the week (Mon · Fri)

Sprint map

One row per story arc, one column per day.

Product Reliability Under the hood
Mon 17Tue 18Wed 19Thu 20Fri 21Sat 22Sun 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

10
Mon 17
0
Tue 18
0
Wed 19
2
Thu 20
15
Fri 21
0
Sat 22
0
Sun 23

The arcs

Leading with the outage, then in rough chronological order.

Reliability

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.

Reliability

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.

Reliability

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.

Product

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.

Product

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.

Product

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.

Product

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

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.