Files
warmbly/docs
Matthew Meszaros 1e37fb6aa3 feat: capture and score a signup's origin instead of discarding it (#234)
* feat: give an organization one fused abuse posture, because every existing control watches a single subject and an actor slightly wrong on several axes sits under all of them: organizations gains risk_state, risk_score, risk_reason and an append-only risk_signals evidence blob, modelled on the warmup participant health machine that already works rather than a second vocabulary for the same idea; restricted cuts per-mailbox cold volume to a quarter and forces the free warmup pool so a risky tenant cannot spend the paid pool's shared reputation, suspended stops sending at the send gate, and watch deliberately changes nothing a customer can feel so evidence accumulates before anything is taken away; an operator's suspension outranks the derived band so a detector clearing cannot release a workspace a human suspended, transitions ride the audit spine to every teammate's dashboard, a banner says which limit is active and why rather than letting volume drop silently, and the posture never travels in a workspace archive since it is one platform's verdict reached from evidence the destination never saw

* feat: make the suspension actually stop sending, and emit the audit transitions the PR claimed: emailsend.SendEmail is only the manual and API path, so campaign and warmup sends went nowhere near the gate and a suspended workspace kept sending on its schedule, while the restricted multiplier floored every mailbox at one a day which quietly turned suspension into a trickle rather than a stop; the campaign scheduler now defers the whole campaign with a reason and the warmup task skips as org-suspended, since warmup is outbound mail from the same domains; separately the band change emitted no audit entry at all despite the entity type and the frontend spine entry both existing, so no banner moved for a teammate and there was no trail of who was restricted when, and only a real transition is logged so a detector re-recording the same finding cannot fill the feed; one of my own live tests also asserted how far out a slot lands, which depends on the hour the suite runs, and now asserts the property it was about

* feat: capture and score a signup's origin instead of discarding it

* feat: document what a signup records, and prove the origin write is on the account path with a seam test rather than only testing the scorer

* chore: drop the em dashes and trim the comments the review flagged
2026-08-28 11:26:44 -07:00
..
2026-01-30 18:07:06 +01:00
2026-01-30 18:07:06 +01:00
2026-01-30 18:07:06 +01:00
2026-01-30 18:07:06 +01:00
2026-01-30 18:07:06 +01:00

Warmbly docs

The documentation site served at docs.warmbly.com, built with Next.js and Fumadocs. Content lives in content/docs/ as MDX, split into three sidebar sections:

  • guides/: how every part of the product works
  • learn/: cold email and deliverability fundamentals
  • api/: API reference (authentication, permissions, endpoints, error codes)

Development

pnpm install
pnpm dev          # dev server on :3000
pnpm types:check  # mdx + route types + tsc
pnpm lint         # eslint

Static export

pnpm build writes the entire site to out/ as a fully static export, servable from any static host or CDN. Search runs client-side from a prebuilt index (/api/search), OG images are generated at build time, and every page has a raw-Markdown mirror under /llms.mdx/docs/ plus llms.txt / llms-full.txt indexes.

Serving notes: the export uses trailing-slash URLs (guides/mailboxes/index.html), and the custom 404 page is emitted as 404.html. Configure your host to serve it for unknown paths.

Conventions

  • Frontmatter title is the page H1; do not repeat it as a # heading in the body. Set a lucide icon per page via the icon field.
  • A folder becomes a sidebar tab when its meta.json sets "root": true.
  • Avoid em dashes in prose; use a period, comma, colon, or parentheses.