Follow-up to #52. Every screenshot still showed the old mark in the topbar — squashed into the 34px box with an illegible .com smudge underneath. All seven are retaken against the mock server at the original framing (1420×703, mobile 500×703).
Notes on reproducing these
Two things bit me, worth recording:
The Sieve rules aren't seeded.sieveScripts starts empty in the mock, so the four rules in filters.jpg were hand-made for the original shot. They're rebuilt through the rule builder to match: Newsletters, From the boss, Receipts, Build failures.
Date format had drifted. The stored preference was dmy-dot, so the list read 24.08. where the originals read Aug 24. Pinned back to the locale default.
And one papercut I worked around but did not change: the mock injects a Live update <time> message into the Inbox every 120 seconds to demo push, with no way to turn it off. It lands in the middle of a screenshot session and changes the message list and the unread count. I gated it locally behind an env check to get a clean set, then reverted that — it's out of scope here, but a MOCK_NO_PUSH_DEMO=1 guard on that setInterval would make this job reproducible next time. Happy to send it separately if you want it.
README
Header logo width 180 → 150. The mark alone is portrait where the old artwork was landscape, so 180 was rendering a noticeably taller header block.
The note about the FastAPI/HTMX prototype ("only the logo survived") now also says the logo has since lost its wordmark.
Verification
npm run typecheck clean · 224 web tests + 88 server tests passing.
Follow-up to #52. Every screenshot still showed the old mark in the topbar — squashed into the 34px box with an illegible `.com` smudge underneath. All seven are retaken against the mock server at the original framing (1420×703, mobile 500×703).
### Notes on reproducing these
Two things bit me, worth recording:
**The Sieve rules aren't seeded.** `sieveScripts` starts empty in the mock, so the four rules in `filters.jpg` were hand-made for the original shot. They're rebuilt through the rule builder to match: Newsletters, From the boss, Receipts, Build failures.
**Date format had drifted.** The stored preference was `dmy-dot`, so the list read `24.08.` where the originals read `Aug 24`. Pinned back to the locale default.
**And one papercut I worked around but did not change:** the mock injects a `Live update <time>` message into the Inbox every 120 seconds to demo push, with no way to turn it off. It lands in the middle of a screenshot session and changes the message list and the unread count. I gated it locally behind an env check to get a clean set, then reverted that — it's out of scope here, but a `MOCK_NO_PUSH_DEMO=1` guard on that `setInterval` would make this job reproducible next time. Happy to send it separately if you want it.
### README
- Header logo `width` 180 → 150. The mark alone is portrait where the old artwork was landscape, so 180 was rendering a noticeably taller header block.
- The note about the FastAPI/HTMX prototype ("only the logo survived") now also says the logo has since lost its wordmark.
### Verification
`npm run typecheck` clean · 224 web tests + 88 server tests passing.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
**Merged** 2026-08-25 as coffey-labs/ihasmail@abd22695819d
<sub>Rebuilt from: git history, session transcript.</sub>
This repo is archived. You cannot comment on issues.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Follow-up to #52. Every screenshot still showed the old mark in the topbar — squashed into the 34px box with an illegible
.comsmudge underneath. All seven are retaken against the mock server at the original framing (1420×703, mobile 500×703).Notes on reproducing these
Two things bit me, worth recording:
The Sieve rules aren't seeded.
sieveScriptsstarts empty in the mock, so the four rules infilters.jpgwere hand-made for the original shot. They're rebuilt through the rule builder to match: Newsletters, From the boss, Receipts, Build failures.Date format had drifted. The stored preference was
dmy-dot, so the list read24.08.where the originals readAug 24. Pinned back to the locale default.And one papercut I worked around but did not change: the mock injects a
Live update <time>message into the Inbox every 120 seconds to demo push, with no way to turn it off. It lands in the middle of a screenshot session and changes the message list and the unread count. I gated it locally behind an env check to get a clean set, then reverted that — it's out of scope here, but aMOCK_NO_PUSH_DEMO=1guard on thatsetIntervalwould make this job reproducible next time. Happy to send it separately if you want it.README
width180 → 150. The mark alone is portrait where the old artwork was landscape, so 180 was rendering a noticeably taller header block.Verification
npm run typecheckclean · 224 web tests + 88 server tests passing.🤖 Generated with Claude Code
Merged 2026-08-25 as coffey-labs/ihasmail@abd2269581
Rebuilt from: git history, session transcript.