Seven badges under the logo, each saying something true about this project rather than decorating the page.
badge
where the claim comes from
CI
the workflow's own badge — live, not a picture of a green tick
licence AGPL-3.0-or-later
LICENSE and root package.json
Stalwart 0.16.19 | 0.15.5
the generations it has actually been run against, per the README
JMAP RFC 8620 / 8621
the protocols it implements
node ≥ 20.10
engines in package.json
TypeScript strict
strict: true, checked in both tsconfigs
no IMAP · no SMTP · no database
the line the README already uses to describe itself
All seven were fetched and rendered locally before committing, so none is a broken image or a 404 waiting to happen. Colours are deliberate rather than default: the licence badge picks up the app's own teal.
Also removes the standalone licence badge further down, which would otherwise have been the second one on the page.
One to remember: the Stalwart badge is static, so it needs changing when the live instance moves — exactly as the prose above it does. Everything else is either dynamic or tied to a file that would have to change anyway.
Seven badges under the logo, each saying something true about this project rather than decorating the page.
| badge | where the claim comes from |
| --- | --- |
| **CI** | the workflow's own badge — live, not a picture of a green tick |
| **licence AGPL-3.0-or-later** | `LICENSE` and root `package.json` |
| **Stalwart 0.16.19 \| 0.15.5** | the generations it has actually been run against, per the README |
| **JMAP RFC 8620 / 8621** | the protocols it implements |
| **node ≥ 20.10** | `engines` in `package.json` |
| **TypeScript strict** | `strict: true`, checked in *both* tsconfigs |
| **no IMAP · no SMTP · no database** | the line the README already uses to describe itself |
All seven were fetched and rendered locally before committing, so none is a broken image or a 404 waiting to happen. Colours are deliberate rather than default: the licence badge picks up the app's own teal.
Also removes the standalone licence badge further down, which would otherwise have been the second one on the page.
**One to remember:** the Stalwart badge is static, so it needs changing when the live instance moves — exactly as the prose above it does. Everything else is either dynamic or tied to a file that would have to change anyway.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
**Merged** 2026-08-25 as coffey-labs/ihasmail@1514fd9e0a97
<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.
Seven badges under the logo, each saying something true about this project rather than decorating the page.
LICENSEand rootpackage.jsonenginesinpackage.jsonstrict: true, checked in both tsconfigsAll seven were fetched and rendered locally before committing, so none is a broken image or a 404 waiting to happen. Colours are deliberate rather than default: the licence badge picks up the app's own teal.
Also removes the standalone licence badge further down, which would otherwise have been the second one on the page.
One to remember: the Stalwart badge is static, so it needs changing when the live instance moves — exactly as the prose above it does. Everything else is either dynamic or tied to a file that would have to change anyway.
🤖 Generated with Claude Code
Merged 2026-08-25 as coffey-labs/ihasmail@1514fd9e0a
Rebuilt from: git history, session transcript.