mirror of
https://github.com/warmbly/warmbly.git
synced 2026-10-04 00:02:05 +00:00
* fix: make a campaign's linked segments the audience rather than an accumulator, so detaching one withdraws the leads it enrolled instead of leaving the old list mixed in with the new, tracked by a new campaign_leads.source that keeps a hand-picked lead, an overlapping segment's member and anyone the campaign has already emailed out of the withdrawal, and reported back as withdrawn/contacted counts the dialog confirms and explains (issue #510) * fix: serialize the linked-segment sweep against a link replacement by taking the same campaign lock, so a sweep that read the old set cannot re-enrol the audience the replacement just withdrew, and word the dialog's confirm and toast so the campaign, not the segment, is what has already emailed a lead * fix: stop the one-shot segment enrol from re-stamping leads that are already in the campaign, since the Leads tab's Add back runs through it and pinning a whole linked audience as hand-picked because one held-out member was restored is the accumulation this change exists to end * fix: lock the leads a detachment is about to withdraw before deciding, because a send is reserved by stamping campaign_contact_progress and only then locking the lead row, so a reservation committing mid-pass was invisible to the delete's snapshot and could withdraw a lead whose first email had already gone; and report the already-emailed count on every toast branch, since a detach where the whole audience had been emailed changed no count and said nothing after confirming a removal * fix: add the campaign_leads.source check constraint NOT VALID, which still enforces every insert and update while skipping a full scan of the largest table in the product under ACCESS EXCLUSIVE to learn that a one-statement-old column holds its own default everywhere
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 workslearn/: cold email and deliverability fundamentalsapi/: 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
titleis the page H1; do not repeat it as a#heading in the body. Set a lucide icon per page via theiconfield. - A folder becomes a sidebar tab when its
meta.jsonsets"root": true. - Avoid em dashes in prose; use a period, comma, colon, or parentheses.