Matthew Meszaros
|
6b05ca8e48
|
feat: renumber the sequence AI step migration from 000067 to 000068 after merging main, whose email-auth-state migration takes the 000067 slot in the renumbered sequence
|
2026-07-17 18:29:41 +02:00 |
|
Matthew Meszaros
|
273dd7ce33
|
feat: merge main (deliverability auth-state sweep, watch-band cold throttle, research roadmap) plus the 000067 email-auth-state migration renumber into the campaign AI step branch
|
2026-07-17 18:29:06 +02:00 |
|
Matthew Meszaros
|
ad794bb184
|
feat: document the AI step and AI branching — sequences guide (AI steps, AI-picked tag choices, context controls, AI-label paths with inline label creation), automations guides (Ask AI branch, per-label classify routing), and the AI credits cost table entries for campaign AI steps and Ask AI branches
|
2026-07-17 16:26:58 +00:00 |
|
Matthew Meszaros
|
2945974ca7
|
feat: build the campaign AI step editor and canvas routing — instruction with contact variables, label/output-field lists, an AI action palette reusing the extracted ActionConfigFields with per-action when-hints and AI-picked tag/label choice sets with max-pick caps, what-AI-can-see context toggles, and AI-label connection paths with inline new-label creation that writes the label back to the step
|
2026-07-17 16:26:50 +00:00 |
|
Matthew Meszaros
|
fd2994bdd8
|
feat: build the automations builder UI for AI branching — an Ask AI (yes/no) condition field with prompt textarea, event-variable chips and credit note, per-label connection routing on AI classify nodes via a node-editor "Route connections by label" section with purple label edges, and stale label-edge healing on save
|
2026-07-17 16:26:42 +00:00 |
|
Matthew Meszaros
|
b564b227c0
|
feat: add automations Ask AI branch condition and ai_classify per-label edges — a prompt-driven yes/no condition evaluated via the metered provider (fail-safe to the no path, run-history errors, dry-run charged without auto-pause), label:<x> edges validated against the classify node's label set and followed only on the matching verdict, and no credit minting on local-provider refunds
|
2026-07-17 16:26:30 +00:00 |
|
Matthew Meszaros
|
d18c5ebe4a
|
feat: execute campaign AI steps in the scheduler path — one metered completion per contact (SetAI-wired provider + credits with per-step idempotency and refund-on-failure) that labels progress, fills contact custom fields which feed the chosen actions' templates, runs AI-picked pre-configured actions with per-decision campaign logging and tag/label choice resolution, grounds decisions in campaign history and the newest inbound reply via LatestInboundFromContact, and hands instant chains back to the scheduler at AI nodes
|
2026-07-17 16:26:23 +00:00 |
|
Matthew Meszaros
|
27381aa127
|
feat: branch campaign sequences on the AI step verdict — ai_label/"is" conditions validated as a strict pair and evaluated deterministically at schedule time off the stored label, threaded through FindNextRoutedPair, GetContactProgress, and a new RecordAILabel upsert (no model call in the scheduler polling path)
|
2026-07-17 16:26:14 +00:00 |
|
Matthew Meszaros
|
1bf517678a
|
feat: add the campaign sequence AI step data layer — "ai" action config with instruction, label set, output fields, AI-decided action palette (tag/label choice sets, when-hints) and context opt-outs, write-time validation caps, and migration 000067 adding campaign_contact_progress.ai_label
|
2026-07-17 16:26:08 +00:00 |
|
Matthew Meszaros
|
f2a56448fd
|
feat: renumber the email auth state migration from 000051 to 000067 to resolve the duplicate-version collision with 000051_referrals that broke cmd/migrate after merging the deliverability auth-sweep into the ai-platform migration range
|
2026-07-17 18:18:29 +02:00 |
|
Matthew Meszaros
|
cd5e1e9cf7
|
Merge pull request #72 from warmbly/research/warmup-abuse-cold-effectiveness
feat: deliverability research + observe-only SPF/DKIM/DMARC auth state and watch-band cold throttle
|
2026-07-17 05:29:58 +02:00 |
|
Matthew Meszaros
|
3ea2831040
|
feat: annotate the research roadmap with the observe-only auth-state and watch-band cold-throttle work already shipped on this branch
|
2026-07-17 03:24:18 +00:00 |
|
Matthew Meszaros
|
8af92417bd
|
feat: add authDomainOf unit test covering casing, whitespace, subdomains, and malformed addresses for the auth-check sweep domain extraction
|
2026-07-17 03:23:46 +00:00 |
|
Matthew Meszaros
|
7176bbce3c
|
feat: add dnsauth unit tests covering Result.State() classification (unknown on empty/transient-error, passing on SPF+DMARC, DKIM advisory) and DMARC policy parsing
|
2026-07-17 03:22:48 +00:00 |
|
Matthew Meszaros
|
e5a6643e2f
|
feat: apply the warmup watch-band volume multiplier (0.7x) to cold campaign sends via the shared adjustmentFor helper so a watch-state mailbox slows cold volume before it hard-quarantines
|
2026-07-17 03:21:29 +00:00 |
|
Matthew Meszaros
|
c96dc0b47a
|
Merge pull request #71 from warmbly/mobile-half-frame
feat: iOS app showcase on the homepage — half-cut iPhone with 1:1 SwiftUI screens, story switcher, and frosted notifications
|
2026-07-16 18:44:20 +02:00 |
|
Matthew Meszaros
|
3b3fc0fe62
|
feat: show the iOS app showcase on the homepage, slotted between the integrations feature section and the automations centerpiece so the sky band breaks up two light sections
|
2026-07-16 18:43:11 +02:00 |
|
Matthew Meszaros
|
c68ee02a20
|
feat: drive the mobile showcase — scale-to-fit phone stage capped at real-device size, story segments that fill and auto-advance the screens with tap-to-jump, cycling push notifications with long quiet gaps, and an IntersectionObserver lifecycle that pauses everything off-screen
|
2026-07-16 18:43:02 +02:00 |
|
Matthew Meszaros
|
28830a2718
|
feat: style the mobile showcase motion — screen slide transitions, status-bar glyph cross-fade, notification drop-in under the Dynamic Island, health-ring and chart draw-in states, phone entrance reveal, and prefers-reduced-motion fallbacks
|
2026-07-16 18:42:51 +02:00 |
|
Matthew Meszaros
|
cc1a35e835
|
feat: add the MobileAppShowcase section markup — sky band with a story-bar switcher and a bottom-cut iPhone whose Home/Inbox/Campaigns screens recreate the SwiftUI app 1:1 on a 393pt canvas (AirSkyWash hero, gradient-stroke stat chips, health rings, unibox and campaign rows, fixed status bar, frosted notification with the real app icon)
|
2026-07-16 18:42:37 +02:00 |
|
Matthew Meszaros
|
69c634a68c
|
feat: ship the real Warmbly iOS app icon (AppIcon-Light downscaled to a 10KB 128px png) as site/public/brand/app-icon.png for the mobile showcase notification banner
|
2026-07-16 18:42:27 +02:00 |
|
Matthew Meszaros
|
5b7d29c766
|
Merge pull request #70 from warmbly/domain-inbox-placement
feat: deliverability score + per-provider/per-domain inbox placement on the dashboard
|
2026-07-16 18:02:02 +02:00 |
|
Matthew Meszaros
|
1e1e357c06
|
feat: add a 0-100 deliverability score plus per-provider seed placement and per-domain warmup placement breakdowns to GET /analytics/deliverability, surface them on a customizable deliverability dashboard (toggleable sections + persisted view), and document the new fields in the guides and API reference
|
2026-07-16 17:55:34 +02:00 |
|
Matthew Meszaros
|
26b0c47148
|
Merge pull request #69 from warmbly/dev-quick-start
|
2026-07-16 09:54:39 +02:00 |
|
Matthew Meszaros
|
fe6d3769cc
|
feat: document make dev at the top of the AGENTS.md local development targets (readiness waits, seeding, seeded login, Ctrl-C leaves infra up)
|
2026-07-16 09:51:32 +02:00 |
|
Matthew Meszaros
|
968e43cf2d
|
feat: collapse the sandbox quick start from six terminals to four by starting the core stack with make dev instead of infra+run+web
|
2026-07-16 09:51:32 +02:00 |
|
Matthew Meszaros
|
f7ae908439
|
feat: rework the local development docs around make dev - new One command section with SEED/AI_PROVIDER variants, Rust/Elixir moved to optional prerequisites, and the stale manual-env-exports-plus-air native section rewritten around the pre-wired make targets
|
2026-07-16 09:51:32 +02:00 |
|
Matthew Meszaros
|
c8126d945d
|
feat: lead the README quick start with make dev - one command from clone to a seeded running stack with the dev@warmbly.com login, keeping the infra/run/web split and the all-docker make up as noted alternatives
|
2026-07-16 09:51:32 +02:00 |
|
Matthew Meszaros
|
fa3672464a
|
feat: add one-command make dev target - brings up docker infra and polls real readiness (pg_isready plus kafka/schema-registry/localstack init one-shot exit codes, failing loudly with a make logs hint), applies migrations, loads seed fixtures (SEED=false to skip), installs web deps on first run, then runs backend + consumer + both shared workers + dashboard in one terminal with Ctrl-C teardown
|
2026-07-16 09:51:20 +02:00 |
|
Matthew Meszaros
|
b40148c482
|
Merge pull request #68 from warmbly/ai-platform
|
2026-07-16 08:58:47 +02:00 |
|
Matthew Meszaros
|
d0e8bc1c97
|
feat: add one-command MCP OAuth connect on api.warmbly.com/v1/mcp — RFC 7591 dynamic client registration for public PKCE clients (dcr.go), RFC 9728 protected-resource metadata + WWW-Authenticate challenge via MCPAuthMiddleware, /v1/mcp now accepts an API key or OAuth token, public-client auth with no secret and mandatory PKCE reusing the existing OAuth 2.1 server (nullable-org clients, migration 000066), executable-redirect-scheme hardening on the open register endpoint, plus mcp/oauth/authentication/endpoints docs
|
2026-07-16 08:57:19 +02:00 |
|
Matthew Meszaros
|
30e8d3c13a
|
feat: restyle the docs site without decorative sidebar icons (frontmatter icons dropped, lucide source plugin disabled, AGENTS.md conventions updated), add LangTab language-logo code tabs, and document the new agent tools plus panel resize/placement/shortcuts in the assistant guide and MCP reference
|
2026-07-16 07:50:24 +02:00 |
|
Matthew Meszaros
|
e4a391c8a4
|
feat: make the assistant panel fully placeable: drag the inner edge to resize (360-720px, persisted), dock to the left or right screen edge from the header (persisted, dock bar follows), and panel-scoped shortcuts (Cmd/Ctrl+]/[ switch tabs, Alt+N new chat, Alt+W close tab, Alt+M minimize) listed in the shortcuts dialog
|
2026-07-16 07:50:24 +02:00 |
|
Matthew Meszaros
|
fabb1d2a42
|
feat: broaden the agent tool registry: list_campaign_leads (derived lead statuses + totals, the correct source for cold-lead/follow-up questions), set_campaign_status (approval-gated start/stop), get_dashboard_analytics, list_mailboxes (health + warmup), list_pipelines, list_deals, add_contact_note, and a list_threads description that steers the model to list_campaign_leads and to retry unfiltered before concluding the inbox is empty
|
2026-07-16 07:50:24 +02:00 |
|
Matthew Meszaros
|
73c80530c3
|
feat: adapt the OpenAI-compatible provider to the gpt-5.x/o-series request shape at runtime: a 400 naming max_tokens or temperature flips a sticky per-provider flag (max_completion_tokens / omit temperature) and retries, so newer OpenAI models work while Ollama/Groq/OpenRouter keep the legacy params
|
2026-07-16 07:25:08 +02:00 |
|
Matthew Meszaros
|
0b073bbe8a
|
feat: redraw AgentMark as the recognizable AI glyph (large spark + small companion spark, filled) and bump the header assistant icon to w-4 so it reads clearly as the AI agent
|
2026-07-16 07:18:56 +02:00 |
|
Matthew Meszaros
|
fd0be6e5ff
|
feat: log the real provider error (org, session, provider, model) and transcript-persist failures server-side when an agent run fails, instead of swallowing them behind the generic provider_error SSE message
|
2026-07-16 07:18:56 +02:00 |
|
Matthew Meszaros
|
602f0d2d0c
|
feat: animate the notifications dropdown open/close with the house framer-motion pattern (AnimatePresence fade + 4px slide, 120ms) instead of popping in instantly
|
2026-07-16 07:05:06 +02:00 |
|
Matthew Meszaros
|
4830fb9631
|
feat: drop the black tile behind the assistant logomark; the AgentMark spark now renders bare in sky-600 in the panel header, empty state, and minimized dock
|
2026-07-16 07:02:38 +02:00 |
|
Matthew Meszaros
|
619b63715d
|
feat: force the dashboard light-only (theme resolver and ThemeProvider never apply the .dark root class) and drop the dark/system theme commands from the command palette, fixing the palette rendering dark inside the all-white app on a dark-mode OS
|
2026-07-16 07:02:38 +02:00 |
|
Matthew Meszaros
|
c2bd4a7301
|
feat: animate the sidebar READY status with a dedicated status-breathe keyframe (halo swells 0.6x to 1.4x and fades on a 2.2s cycle, honoring prefers-reduced-motion) since animate-pulse on the tiny halo was imperceptible; CONNECTING dot pulses too
|
2026-07-16 07:02:38 +02:00 |
|
Matthew Meszaros
|
b03964ac29
|
feat: give the sidebar READY status a slow breathing emerald glow instead of a static ring and pulse the CONNECTING dot, so a quiet-but-connected workspace visibly reads as alive
|
2026-07-16 06:56:13 +02:00 |
|
Matthew Meszaros
|
d64c1ddcf7
|
feat: give the assistant a serious monochrome AgentMark logomark (panel header, empty state, top bar), center single-line composer text against the send button, add minimize-to-dock with a live bottom-right status bar (working/step count, needs approval, response ready), unseen dots on tabs, and a live status badge on the header spark button
|
2026-07-16 06:52:30 +02:00 |
|
Matthew Meszaros
|
e87adf1251
|
feat: add agentMinimized and per-tab unseen state to agentSlice and make Cmd+I dock-aware (restores a minimized panel instead of closing it)
|
2026-07-16 06:52:30 +02:00 |
|
Matthew Meszaros
|
a913e73837
|
feat: seed the sandbox org's AI-credit ledger (plan monthly allowance + a 5000-credit purchased top-up with idempotent grant transactions) so the assistant never reports out-of-credits in the demo; re-seeding refills both pools
|
2026-07-16 06:52:30 +02:00 |
|
Matthew Meszaros
|
e64b0b161d
|
feat: sweep stale OPENAI_API_KEY/AI_LOCAL_MODEL mentions out of comments, the provider-not-configured and warmup-admin error strings, env.example, and the deployment guide now that AI_* is the only config surface
|
2026-07-16 06:39:07 +02:00 |
|
Matthew Meszaros
|
29e3bb3a64
|
feat: drop the legacy OPENAI_*/ANTHROPIC_API_KEY/AI_LOCAL_MODEL env fallbacks (no prod deployments exist): AI_PROVIDER/AI_API_KEY/AI_MODEL/AI_BASE_URL/AI_FREE are the only AI vars, empty provider means openai, the anthropic preset and writing client key off AI_API_KEY, and the warmup Batch generator runs only when the selected provider is OpenAI
|
2026-07-16 06:39:06 +02:00 |
|
Matthew Meszaros
|
d0e8daf763
|
feat: fix agent panel interaction bugs: stick-to-bottom scrolling with a Latest pill, per-tab drafts, IME-safe Enter, double-send guard, send lock during history hydration, inert+Escape when closed, autoresizing composer, editor-style tabs (middle-click close, active scroll-into-view, tablist a11y), focus management, memoized turns, centered transcript in expanded mode
|
2026-07-16 06:28:29 +02:00 |
|
Matthew Meszaros
|
de3aed0a9b
|
feat: keep the unsent composer draft per agent tab in agentSlice and respawn a fresh tab when the last one closes so the panel is never blank
|
2026-07-16 06:28:29 +02:00 |
|
Matthew Meszaros
|
d8475a1896
|
feat: render assistant replies as markdown with a dependency-free React renderer (bold, lists, inline code, safe links, fenced code) and prompt the agent to emit that simple subset
|
2026-07-16 06:28:29 +02:00 |
|