Matthew Meszaros
|
d997a5fdbd
|
fix: clear the js-yaml advisory in the docs lockfile too
|
2026-07-21 18:02:40 +02:00 |
|
Matthew Meszaros
|
d4b201eef0
|
fix: bump axios and js-yaml to clear the trivy security scan
|
2026-07-21 17:59:46 +02:00 |
|
Matthew Meszaros
|
f48ae60476
|
feat: build the ai step editors and smooth out the flow lines
|
2026-07-21 17:35:11 +02:00 |
|
Matthew Meszaros
|
66aaaa6584
|
feat: add an ai agent step to campaign sequences
|
2026-07-21 17:35:11 +02:00 |
|
Matthew Meszaros
|
93b64e2afa
|
feat: add shared run time listing and arg resolving for ai agents
|
2026-07-21 17:35:11 +02:00 |
|
Matthew Meszaros
|
a44b7b0215
|
feat: add the unified ai step and ai switch to automations
|
2026-07-21 17:35:11 +02:00 |
|
Matthew Meszaros
|
ffc219a66d
|
feat: clean up the dither charts and give them more room
|
2026-07-21 17:35:11 +02:00 |
|
Matthew Meszaros
|
f898e4975f
|
fix: show the real plan badge, mailbox tags and live sidebar stats
|
2026-07-21 17:35:11 +02:00 |
|
Matthew Meszaros
|
b465f30d42
|
fix: scope account analytics by org id not user id
|
2026-07-21 17:34:59 +02:00 |
|
Matthew Meszaros
|
912a07b6e1
|
feat: make the sandbox seed a full realistic demo org
|
2026-07-21 17:34:59 +02:00 |
|
Matthew Meszaros
|
bebc09289d
|
build: cross compile the go images and fix realtime and the healthchecks
|
2026-07-21 17:34:59 +02:00 |
|
Matthew Meszaros
|
6bd53f532e
|
ci: trim the workflows and speed up the build and push
|
2026-07-21 17:34:59 +02:00 |
|
Matthew Meszaros
|
aeaa26d2d2
|
fix: use a valid local kms dev key and warn when sandbox port 8080 is taken
|
2026-07-21 17:34:59 +02:00 |
|
Matthew Meszaros
|
6227439952
|
Merge pull request #77 from warmbly/self-host/local-stack
No-cloud self-host stack and faster builds
|
2026-07-20 11:59:27 +02:00 |
|
Matthew Meszaros
|
8055c2f05f
|
Merge remote-tracking branch 'origin/main' into self-host/local-stack
# Conflicts:
# cmd/backend/main.go
|
2026-07-20 11:53:21 +02:00 |
|
Matthew Meszaros
|
248347c8e6
|
feat: warn on the mailboxes page when too few mailboxes are warming for a healthy pool, with an add-mailboxes action and a cloud option
|
2026-07-20 11:50:53 +02:00 |
|
Matthew Meszaros
|
2af4bd084e
|
copy: say largest instead of biggest across the marketing site
|
2026-07-20 11:21:57 +02:00 |
|
Matthew Meszaros
|
62b1384b7d
|
docs: sharpen the readme documentation section and drop the em dashes
|
2026-07-20 11:21:57 +02:00 |
|
Matthew Meszaros
|
037779a78b
|
docs: de-stale the local development guide for the no-cloud nats stack
|
2026-07-20 11:12:37 +02:00 |
|
Matthew Meszaros
|
2fdaa28887
|
docs: rewrite the sandbox guide for the one-command flow and the fuller seeded dataset
|
2026-07-20 11:12:37 +02:00 |
|
Matthew Meszaros
|
638c40c629
|
feat: make make sandbox a one-command demo stack and drop the stale kafka/localstack/worker-premium targets
|
2026-07-20 11:12:37 +02:00 |
|
Matthew Meszaros
|
bbc1377a80
|
fix: point sandbox mailboxes at the worker that actually runs, seed that worker row, and wire in the analytics dataset
|
2026-07-20 11:12:37 +02:00 |
|
Matthew Meszaros
|
332851a0d3
|
feat: seed deliverability, contact activity, reply intents, suppression, mailbox errors, an audit trail, a teammate, an api key, and completed/paused campaigns for the sandbox
|
2026-07-20 11:12:37 +02:00 |
|
Matthew Meszaros
|
af048b9d75
|
feat: restore the dovecot imap host behind a sandbox profile so seeded mailboxes really sync
|
2026-07-20 11:12:36 +02:00 |
|
Matthew Meszaros
|
58d7baf79d
|
docs: cover the no-cloud setup and the PUBLIC_HOST knob
|
2026-07-20 09:56:47 +02:00 |
|
Matthew Meszaros
|
49ffaedc9f
|
feat: run make dev on nats and make make up the one-command self-host
|
2026-07-20 09:56:47 +02:00 |
|
Matthew Meszaros
|
9590bd63fb
|
feat: add a no-cloud docker compose stack
|
2026-07-20 09:56:47 +02:00 |
|
Matthew Meszaros
|
a419bde824
|
build: make the docker images cgo-free and cache-mounted so builds are fast
|
2026-07-20 09:56:47 +02:00 |
|
Matthew Meszaros
|
3922333930
|
feat: run the tracking service on nats by default, kafka behind a cargo feature
|
2026-07-20 09:56:29 +02:00 |
|
Matthew Meszaros
|
b1070ce097
|
feat: rip the cloud-provisioning and billing pages out of the admin ui
|
2026-07-20 09:56:29 +02:00 |
|
Matthew Meszaros
|
897da46e6c
|
feat: drop the cloud-provisioning and billing admin routes
|
2026-07-20 09:56:29 +02:00 |
|
Matthew Meszaros
|
543d97f6f3
|
feat: wire the no-cloud providers into the consumer and worker
|
2026-07-20 09:56:29 +02:00 |
|
Matthew Meszaros
|
ed51b081e6
|
feat: wire the no-cloud providers and billing-off into the backend
|
2026-07-20 09:56:29 +02:00 |
|
Matthew Meszaros
|
866e096a2b
|
feat: add a billing-off mode that unlocks every feature
|
2026-07-20 09:56:17 +02:00 |
|
Matthew Meszaros
|
fc91d71492
|
feat: make google, apple and turnstile optional at boot
|
2026-07-20 09:56:17 +02:00 |
|
Matthew Meszaros
|
f94215d27a
|
feat: move kafka behind a build tag so the default build is cgo-free
|
2026-07-20 09:56:16 +02:00 |
|
Matthew Meszaros
|
fb853ea23d
|
refactor: publish mailbox validation over the bus and drop the raw kafka producer
|
2026-07-20 09:56:16 +02:00 |
|
Matthew Meszaros
|
19f753e163
|
refactor: route worker events and tracking through the event bus
|
2026-07-20 09:56:16 +02:00 |
|
Matthew Meszaros
|
e8de52ce30
|
refactor: put the task client behind a scheduler interface
|
2026-07-20 09:56:16 +02:00 |
|
Matthew Meszaros
|
e38de91fec
|
feat: add an in-process postgres task scheduler so delayed sends need no cloud tasks
|
2026-07-20 09:56:02 +02:00 |
|
Matthew Meszaros
|
8de314ae8b
|
feat: serve public blobs from the backend and fix avatar uploads on filesystem
|
2026-07-20 09:56:02 +02:00 |
|
Matthew Meszaros
|
0f1886b9dd
|
feat: add a filesystem blob storage backend
|
2026-07-20 09:56:02 +02:00 |
|
Matthew Meszaros
|
7e84da7f2a
|
feat: add config helpers for the provider switches
|
2026-07-20 09:56:01 +02:00 |
|
Matthew Meszaros
|
d90e07659e
|
chore: remove the dead astra/cassandra code and deps
|
2026-07-20 09:56:01 +02:00 |
|
Matthew Meszaros
|
59d5cc4ca2
|
Merge pull request #76 from warmbly/feature/notifications
Digest-first notifications: fewer emails, targeted audiences, one shared email per team event
|
2026-07-20 08:23:45 +02:00 |
|
Matthew Meszaros
|
07c6ae0aa7
|
feat: kill the settings autosave PUT storm: useAutosave becomes single-flight (the change effect re-arms every render because save is an inline closure, and with the baseline only moving after the response every render during an in-flight save fired another request; concurrent callers now share one in-flight promise and a trailing loop picks up edits made while saving), the notifications settings page hydrates its draft from the server exactly once so refetches never stomp or re-trigger mid-save, and the preferences PUT writes its echoed envelope into the react-query cache instead of invalidating (no more refetch per save)
|
2026-07-20 08:17:50 +02:00 |
|
Matthew Meszaros
|
85ab4ad7b5
|
feat: replace the notification email cadence enum with a configurable bundling window and drop the instant mode entirely: email_digest_minutes (30 minute floor, 30 default, 1440 max, constants in config) replaces email_digest with no per-event option or NOTIFICATION_EMAIL_ALLOW_INSTANT escape hatch, the handler validates the range and email_delivery now returns min/max minutes so clients render the bounds, the web settings page offers window presets (30m/1h/3h/daily) plus a Custom minutes NumberInput and iOS swaps the cadence menu for window presets including the server value when it matches none, the repo clamps stored values on read, and the guide plus deployment guide describe the window and keep only the NOTIFICATION_EMAIL_DAILY_CAP env
|
2026-07-20 08:01:22 +02:00 |
|
Matthew Meszaros
|
682ef3ac24
|
feat: cost guards on the notification email channel: the per-event instant cadence becomes self-host opt-in (NOTIFICATION_EMAIL_ALLOW_INSTANT, default off - PUT rejects it, stored values read back as smart, holds degrade to smart) with the capability exposed as email_delivery on the preferences GET so web and iOS hide the option on hosted deploys, each user gets a rolling 24h budget of non-security notification emails (NOTIFICATION_EMAIL_DAILY_CAP, default 25, 0 unlimited) counted off sent rows with over-budget alerts skipped to the in-app feed while security sign-ins always send, and coalesced group emails re-verify org membership at flush time so a member removed during the hold is dropped from To; deployment guide documents the three envs and the guide notes both limits
|
2026-07-20 07:44:43 +02:00 |
|
Matthew Meszaros
|
5d930057d9
|
feat: harden the notifications settings page against version skew: normalizeNotificationPreferences mirrors the backend defaults merge on the client (missing billing_alert/team_activity/email_digest filled with defaults, invalid cadence coerced to smart) and the page normalizes the fetched preferences before drafting, so an older backend or cached response can no longer crash the category rows
|
2026-07-20 07:36:17 +02:00 |
|
Matthew Meszaros
|
0186ed5c78
|
feat: web notification center + digest settings: the bell dropdown becomes a real notification center with per-category icon chips and tones, Today/Yesterday/Earlier group headers, compact relative timestamps, unread accent styling, All/Unread filter pills, first-load skeleton, empty state and a settings footer link; the settings page gains Billing and Team category sections and an Email delivery section using the shared OptionSelect radio idiom (Instant/Smart with Recommended badge/Hourly/Daily) riding the same autosave PUT, with the read-in-app/security-immediate/shared-email note; the preferences model adds billing_alert, team_activity and the email_digest union, and OptionSelect labels widen to ReactNode for the badge
|
2026-07-20 07:21:20 +02:00 |
|