Commit Graph
1551 Commits
Author SHA1 Message Date
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