The line to Notion stayed cut all week. We played the strongest card we had: rebuild the integration from scratch with brand-new credentials. Notion's API rejected that one too, seconds after issuing it a valid token, which at the time read as proof that the fault sat on their side. It did not. On September 1 the cause turned up in our own code; the outage arc below has the correction. Meanwhile the week's 16 changes went into honesty about failure: overnight tasks that fail now say so, connecting a workspace became all-or-nothing, a new circuit breaker keeps one shared outage from reading as many personal ones.

7
days covered (Aug 24–30)
16
changes merged (8 app · 8 site)
1
production deploy
7
backlog items cleared
11
changes merged on Friday alone

Sprint map

One row per story arc, one column per day.

Product Reliability Under the hood
Mon 24Tue 25Wed 26Thu 27Fri 28Sat 29Sun 30
The outage, week two
Failures now fail loudly
A breaker against false alarms
Stuck onboarding, now visible
A leaner front door
Under the hood

The empty Monday and Tuesday are real. Early week went to the outage investigation, work that produces evidence rather than merges.

Merges per day

0
Mon 24
0
Tue 25
1
Wed 26
4
Thu 27
11
Fri 28
0
Sat 29
0
Sun 30

The arcs

Leading with the outage, then in rough chronological order.

Reliability

The outage, week two

Since August 17 our servers could not reach the Notion API, while the identical requests succeeded from any other network. This week we tried the cleanest fix available on our side: a rebuilt integration, brand-new credentials with no shared history, switched over in Friday's deploy. Notion's own systems accepted the authorization step and handed us a fresh access token. Seconds later the same systems rejected that token as invalid. We read that as evidence against Notion and said so, here and to their support team.

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 for two weeks. Notion's support team pointed us at the header. The fix went live on September 1 and the notice came down the same day. Two weeks of pointing at a vendor for our own bug is not a good look. We are sorry, to Notion and to everyone whose syncs stopped.

Reliability

Failures now fail loudly

An outage is a stress test for error handling. Ours had soft spots; this week closed them. The overnight task that creates your daily journal page used to be marked as done even when the creation failed, which hid the gap from the safety net that re-runs missed work. Now it fails properly and gets picked up like every other failure. Connecting a workspace became all-or-nothing: if any step of the handshake breaks, the whole connection rolls back, so no account is left stranded between connected and not. The connect step in the browser also runs exactly once now, where a quirk could previously fire it twice against the same authorization.

Reliability

A breaker against false alarms

The app has a safety net that pauses an account whose syncs keep failing, then tells the owner. Sensible for one broken connection; wrong during a provider-wide outage, where it would read one shared problem as many personal ones. That net now carries a circuit breaker. When failures spike across many accounts at once, individual pausing holds off. One incident stays one incident instead of becoming a mailbox full of misdirected apologies.

Reliability

Stuck onboarding, now visible

Connecting a Notion workspace can fail for mundane reasons, a chosen database missing a required column for instance. Until now such a failure existed only in the user's browser for the moment it happened; nothing on our side ever saw it again. The server now records the exact reason, reports it on the connection status and counts it where we watch onboarding health. A friendly follow-up email for people stuck at that step is built too, sitting behind a switch until it earns its keep.

Product

A leaner front door

The home page's featured-competition announcement section came down, component and all, four hundred lines lighter. Featured competitions still exist; they present themselves where competitions live rather than as a banner on the front page.

Under the hood

Under the hood

The site moved to the current Angular and Material releases; both repositories took their routine dependency updates. A sweep through the site's development toolchain cleared every open dependency advisory. The hermetic end-to-end specs learned to mock the new competitions-list read, so that suite stays independent of a live server. A few quieter hardening items shipped alongside; as usual they stay unnamed on purpose.

Compiled from the week's merge history across the Notion Habit Heroes app and this site, August 24 to August 30, 2026. The empty Monday, Tuesday and weekend bars are real: those days belonged to the outage investigation.