Repository navigation
SupportOS v1.5.0 — Client Segmentation & Outreach
v1.5.0 — the contact-first release
Client Segmentation & Outreach (the full spec), vector search over tickets/threads, business-hours-aware SLA alerts on the Issue Radar, and optional end-to-end encrypted sync for multi-device — built under a fresh independent audit that found and fixed 7 real bugs before shipping. 259/259 tests green (+35).
📣 Client Segmentation & Outreach
- Contact-first deterministic segment engine over the local mirror — properties answer "which customers?", tags answer "which tickets?", the resolver answers "which customers own those tickets?". The AI may suggest or explain a segment, but it can never decide who gets emailed.
- Conversation-level tag semantics (ANY / ALL / NONE) resolved before mapping to contacts: "has ALL of timezone, bug" requires ONE conversation carrying both tags — locked by the spec's critical test cases.
- Why-selected evidence on every row: matched property values, matching tickets with tags/status/dates — the recipient review shows it inline, with a matching-tickets drawer linking into the inbox.
- Customer property VALUES are now synced (with a raw_json backfill that heals pre-1.5 databases), plus background/age/gender/location on customers.
- Saved versioned segments (structured condition trees, never SQL); campaign recipients are a static snapshot with the evidence that selected them.
- One individual Help Scout conversation per customer via
POST /v2/conversations— never a shared BCC send; customer identified by id (no accidental duplicate contacts); sends ride the same rate-limited queue as manual replies in small batches. - Safe lifecycle: validation before queueing, Do-Not-Contact enforcement, duplicate-send protection, per-recipient states with attempt log + audit trail, timeout →
unknown→ reconcile-before-retry (never blindly resent), pause/resume/cancel/retry, crash recovery. - Personalization with preview (
{{first_name}},{{last_ticket_number}}, …) through the same code path as the send; reply intelligence from the local mirror, honestly labeled. - UI: 4-stage wizard (audience → recipient review → compose → explicit final review), campaign monitor with audit events + reports, segments & DNC managers, real-time SSE progress.
🧮 Vector search over tickets/threads
Conversations (subject + customer + tags + thread bodies) are chunked and embedded locally; POST /api/search fuses FTS5 + semantic retrieval with Reciprocal Rank Fusion. Qdrant accelerates when connected; a local cosine scan answers without it. Every hit records which retriever found it.
🚨 Business-hours-aware SLA alerts
GET /api/issues/sla-alerts ages open conversations in business minutes since the last customer message against per-mailbox first-response/resolution targets — breached and at-risk states with per-mailbox rollups, rendered at the top of the Issue Radar. Unconfigured mailboxes are labeled honestly; nothing is guessed.
🔐 Optional end-to-end encrypted sync
.sosync bundles (AES-256-GCM + scrypt): export with a passphrase, move the file however you like, import with integrity + schema checks and an automatic safety backup. No relay server exists by design — a privacy-first product is end-to-end encrypted by construction. Attachments re-download from Help Scout automatically on the other device.
🛡️ Fixed by the fresh independent audit (not the existing test suite)
- hostile deeply-nested condition trees crashed the whole server (DoS) → depth/node caps, clean 422
- malformed JSON bodies returned 500 → clean 400
POST /api/outreach/dncwith a negative id → FK 500 → validated- a mid-batch crash stranded recipients in
sendingforever → reclaimed at batch start, proven by a crash-recovery test - campaign validation/report counts truncated at 1000 recipients → SQL aggregates
- property backfill expected the wire shape while raw_json stores the normalized shape → both accepted
- campaign monitor inbox links used the conversation number instead of the local id
Full changelog: https://github.com/kimpearce888/supportos/blob/main/CHANGELOG.md
Docs: README · API integration · Testing
Installers
Download the installer for your platform below (built on native OS runners in CI):
- Windows:
SupportOS_1.5.0_x64_en-US.msi(or the NSIS-setup.exe) - macOS:
SupportOS_1.5.0_universal.dmg - Linux:
SupportOS_1.5.0_amd64.AppImage
First run offers a 2-minute demo mode — no Help Scout credentials needed.