This website requires JavaScript.
Explore
Help
Sign In
starred
/
warmbly
Watch
1
Star
0
Fork
0
mirror of
https://github.com/warmbly/warmbly.git
synced
2026-09-06 16:01:28 +00:00
Code
Issues
Packages
Projects
Releases
Wiki
Activity
Files
6869676001cd599740adf13e6b10016ca074e79a
warmbly
/
web
/
src
T
History
Matthew Meszaros
af9e852314
Merge branch 'main' into fix/step-attachments-mount
2026-09-04 06:34:53 -07:00
..
app
Merge remote-tracking branch 'origin/main' into fix/click-without-open-tracking
2026-09-03 05:22:05 -07:00
components
Merge branch 'main' into fix/step-attachments-mount
2026-09-04 06:34:53 -07:00
hooks
feat: refetch the campaigns list on a slow cycle while the realtime socket is not connected, so send counts kept current by live invalidation cannot sit on their five-minute cache with no event coming to refresh them, and document what the header's connection dot means and what still refreshes while it is down
2026-09-04 04:03:01 -07:00
lib
feat: send the files a step actually carries by honouring campaign_attachments.sequence_id in the send, test-send and preview paths instead of attaching every campaign file to every step, count them per step in the preflight content score, and refuse an upload naming another campaign's step
2026-09-04 06:16:16 -07:00
stores
feat: render the assistant's stream like a live agent and surface its keybindings in the panel: text_delta chunks append to a live-flagged trailing block that the closing full-text event replaces, the trailing block of a running turn types itself out through a rAF SmoothText typewriter with the blinking caret so even chunky providers read as continuous generation, and the empty state gains kbd chips for toggle, new chat, pop out, and minimize plus an all-shortcuts link into the shortcuts dialog
2026-07-19 10:42:10 +02:00
global.css
feat: wire variable chips, per-recipient AI blocks, and conditionals into RichTextEditor, EmailContentEditor, the preview renderer, and chip styles
2026-07-22 17:04:51 +02:00
main.tsx
feat: give every campaign email a working opt-out: a reply-to-opt-out line by default or an unsubscribe link (workspace setting under Settings > Sending with a per-campaign override and a {{.UnsubscribeLink}} variable), signed per-recipient unsubscribe links served on the API origin so the List-Unsubscribe header no longer points at a dead warmbly.com page, a confirm page on GET with RFC 8058 one-click on POST and a resubscribe button, reply opt-out detection through the whole-word compliance lexicon with quoted history stripped, a first-class suppression list (Contacts tab, GET/POST/DELETE /suppressions with address and domain entries, audited removal, contact drawer action), the contact Subscribed flag enforced in campaign routing, migration 000122 with a shared recipient_suppressed() predicate, and docs for all of it
2026-09-03 01:52:40 -07:00
setupTests.ts
ci: drop tsc from web build, relax Elixir warnings, pin picomatch / path-to-regexp
2026-05-23 16:37:53 +00:00