Files
warmbly/docs
Matthew Meszaros bc9978dab3 feat: feed per-provider placement back into warmup partner routing (#228)
* feat: feed each sender's per-provider spam placement back into warmup partner selection, so a mailbox failing only at Microsoft stops being handed Microsoft partners instead of waiting for an aggregate band to trip: pickWeightedPartner weighted on inverse domain frequency and routing rules alone, while PoolSpamPlacementsByProvider's segmentation only ever reached the admin overview; the new per-sender query keys on who RUNS the recipient's mail via models.ClassifyProvider rather than email_accounts.provider, because that enum collapses every custom host into smtp_imap which is exactly the bucket the signal matters in, and the weight multiplies by 1/(1+4*rate) with a five-send floor so a failing provider is downweighted but never excluded, since a sender that stops mailing a provider can never discover it recovered

* feat: stop failed warmup sends flattering a provider's junk rate, and stop a re-admitted partner sidestepping the penalty: a warmup_tokens row is written before the send leaves, so counting every token put failed sends in the denominator and understated the rate exactly when the sender was doing worst; the send count now joins tasks on status = completed, and GetPoolParticipantProviders is read unfiltered because that map only resolves a candidate's provider and never decides eligibility, so a just-unblocked partner missing from it scored an unpenalized 1.0

* feat: move the campaign content-lint work off this branch, where it landed by mistake: the pre-send scoring, its preflight check and the warmlint image and attachment heuristics belong to the content-lint change and are unrelated to per-provider partner routing, so this branch now carries only the routing signal it is about
2026-08-28 10:20:35 -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.