Commit Graph
194 Commits
Author SHA1 Message Date
Matthew Meszaros f333260b0f feat: derive unibox search params synchronously from the URL scope (lazy initial state plus a render-phase reset keyed on scope and resolved tag accounts) instead of a post-paint effect, so reloading a scoped URL no longer fires and paints the default all-mail query first and then flashes the thread list over to the scoped result 2026-07-19 10:02:43 +02:00
Matthew Meszaros 6790eabd74 feat: wire compose entry points: mount the window globally in the app layout, add the Compose button with an n shortcut tooltip to the unibox header, register the global n key (and update the shortcuts modal entry), and add an Email action to the contact drawer that opens compose prefilled with the contact's address 2026-07-19 07:38:48 +02:00
Matthew Meszaros ec53089232 feat: document the in-composer AI editing — selection-edit cost row in the AI credits guide, the unibox guide now covers the draft review bar (Keep/Adjust/Retry/Discard) and the Edit with AI selection pill, and the billing usage/transaction views label the new writing_edit reason 2026-07-18 11:59:18 +02:00
Matthew Meszaros 4f9e6e6282 feat: full attribution on every AI credit charge — new actor_user_id + context jsonb columns on the transaction log (migration 000070), a typed models.CreditContext carried via request context (models.WithCreditMeta) so base charges, usage settles, web-search fees, and refunds all inherit it without signature churn, wired at every spend site (campaign switches record campaign/step/contact, automation nodes and Ask AI record automation/node/run and the question asked, reply drafts and inbox agent record the thread, the dashboard agent records the session, research records contact/run, and manual features record the triggering user), rendered as a detail line with token counts in the billing transaction log with corrected reason labels, and documented in the AI credits guide 2026-07-18 08:52:16 +02:00
Matthew Meszaros 053ca6a71d feat: usage-based AI credit system — every AI call reserves its flat minimum then settles the real token cost per model (light 1500/standard 400 tokens per credit, drain-to-zero overage settle wired into writing assistant, reply drafts, dashboard agent, inbox agent, research, automation nodes, and campaign switches), org spend controls in a new org_ai_settings table (day/week/month hard limits enforced in Consume, low-balance alert threshold, auto top-up config), a credit-watch monitor hook that fires BILLING_CREDITS_LOW realtime alerts once per day and buys the configured pack off-session via a new Stripe AutoTopUpCredits (idempotent on the PaymentIntent, bounded per month, Redis-locked), GET /subscription/credits/usage + GET/PATCH settings endpoints, and an AI usage & spend controls billing card (spend vs limits, 30-day chart, per-feature and per-model breakdowns, limits/reminder/auto-top-up form) with a realtime low-credit toast 2026-07-18 08:39:41 +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 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 56de65380b feat: inbox agent that drafts a suggested unibox reply on inbound human replies for human approve/edit/discard - paid + per-org opt-in (organizations.inbox_agent_enabled) feature where the consumer's reply hook, on a non-automated reply, detaches a goroutine (panic-contained, never blocks ingest) that checks entitlement, dedupes via ai_thread_drafts partial unique indexes (one pending per thread, unique source_message_id), pre-checks balance, grounds a reply in the thread history + org voice + skills via generation.Provider.Complete, reserves a draft row then charges 5 credits (idempotency inbox_agent:<draft.ID>, row unwound on a fresh context if the charge fails so no unpaid draft lingers), and emits an org-scoped AI_DRAFT_READY event gated on access_unibox; the agent never sends - only a human POST to /unibox/agent-drafts/:id/approve sends through the normal reply path, claiming pending->approved before send with an approved->pending revert on send failure, alongside list + discard endpoints; plus the unibox awaiting_agent_draft badge + agent_drafts search scope, an AgentDraftCard in the thread view with inline-editable approve-and-send/discard, the workspace settings opt-in toggle, CanUseInboxAgent paid gate, migration 000065, and docs (inbox-agent guide, endpoints, realtime) 2026-07-14 06:13:27 +02:00
Matthew Meszaros 2aec6745fa feat: connect external MCP servers whose tools the AI assistant can use - ai_mcp_servers table with bearer tokens sealed by the org DEK cipher (never returned) and SSRF-validated https urls, a dependency-free streamable-HTTP JSON-RPC client (initialize/tools/list/tools/call over safehttp dial-time IP blocking with SSE+JSON handling and body caps), an mcp service that discovers tools on connect and contributes only enabled servers' tools to the dashboard agent as namespaced mcp_<server>_<tool> defs that are always write-class and never auto-allowed, a registry DynamicToolSource hook so per-org tools join the agent's tool set and resume executes them through ToolDefs, /ai/connections CRUD gated on manage_settings with an mcp_server audit entity and spine, a Connections settings page to add servers and review/enable discovered tools, and docs 2026-07-13 20:05:24 +02:00
Matthew Meszaros a2f50b6572 feat: org AI skills (playbooks) that every AI feature loads and follows - ai_skills table (org-scoped, unique name per org, 32KB content cap) with a skills service exposing CRUD plus an enabled-skills preamble injected into the dashboard agent, contact research, and reply-draft prompts and a load_skill read-tool that returns a playbook's full content by name, /ai/skills CRUD gated on manage_settings (JWT) or the AI_AGENT scope (API) with an ai_skill audit entity and spine entry, an AI skills settings page (list rows opening a right-side drawer with name, one-line description, enable toggle, and a markdown body), and docs with two example playbooks 2026-07-13 19:46:25 +02:00
Matthew Meszaros 8d208d8c41 feat: org voice profile grounding every AI writing surface plus context-grounded unibox reply drafts - organizations gains product_description/icp_notes/voice_profile (000059) with a manage_settings workspace settings section, generation.BuildVoiceRules and BuildReplyRules fold the humanizer rules and org grounding into every prompt, WritingGenerator.GenerateWriting now takes a VoiceContext and a provider.Complete primitive powers single completions, POST /unibox/reply/draft assembles thread history plus the counterpart contact (custom fields and campaigns) plus the voice profile into a reply-tuned prompt that charges 2 credits with refund-on-failure and a client idempotency key and never sends, a Draft reply button fills the composer, and docs cover the voice profile and AI reply drafts 2026-07-13 19:04:57 +02:00
Matthew Meszaros 5d6ed2a068 feat: AI credit economy with monthly plan grants, non-expiring purchased top-ups, and Stripe billing - two-pool credit_ledger (monthly allowance reset each cycle on invoice.paid, purchased pool via checkout mode=payment fulfilled webhook-only), consume drains monthly-then-purchased, 3 fixed top-up packs, /subscription/credits balance+checkout+paginated transactions gated on manage_billing, one-time trial grant, billing credits card with balance ring and pack buttons, credit_purchase/credit_grant audit entities and spine, wired plan.monthly_credits through pg_plan reads/writes, retry-safe webhook idempotency, and an AI credits guide 2026-07-13 17:40:20 +02:00
Matthew Meszaros d6b7885e8b feat: mobile push notifications end to end - APNs provider-token client, device_tokens table with session-scoped register/delete endpoints, a push channel in notification preferences (web + iOS toggles), and Redis-backed immediate-then-digest batching (first event pushes now, bursts summarize when the 5h window closes) wired in backend and consumer, with iOS registration/badge sync and docs for the channel, endpoints, and APNS_* deploy env 2026-07-13 16:11:15 +02:00
Matthew Meszaros 226e83683c feat: remount the automation and sequence canvases on param-only navigation and restrict jump-to-teammate to distinct in-app paths so a jump can never save one record's graph into another 2026-07-02 20:33:44 +02:00
Matthew Meszaros b85d2c8249 feat: refresh the deal board instantly when a teammate edits the pipeline's stages and show a live colored ring on a deal card while a teammate drags it 2026-06-30 19:18:55 +02:00
Matthew Meszaros 7f5cc010bb feat: broadcast CRM pipeline and stage edits over live:patch and refresh the pipelines view instantly for teammates 2026-06-30 19:18:55 +02:00
Matthew Meszaros a93868fc77 feat: broadcast CRM task create/update/delete over live:patch and refresh the tasks view instantly for teammates ahead of the audit refetch 2026-06-30 19:18:55 +02:00
Matthew Meszaros 2e110814fc feat: make CRM deal-board stage moves land instantly for teammates on the same pipeline via a live:patch broadcast backed by the audit refetch 2026-06-30 10:34:14 +02:00
Matthew Meszaros dfe8b89730 feat: claim integration-connection presence via a new Drawer headerExtra slot in the connection details drawer 2026-06-30 10:06:49 +02:00
Matthew Meszaros aef7fdf6d5 feat: claim template presence and suppress the page cursor layer while the email template editor is open 2026-06-30 10:06:49 +02:00
Matthew Meszaros e1f9460520 feat: claim task presence and suppress the page cursor layer while the CRM task dialog is open 2026-06-30 10:06:49 +02:00
Matthew Meszaros 04ee4cb331 feat: claim deal presence and suppress the page cursor layer while the CRM deal dialog is open 2026-06-30 10:06:49 +02:00
Matthew Meszaros b618a9d6d4 feat: widen the billing compare-plans grid to the full settings panel (sm two / xl four columns) so all four plan cards fit comfortably 2026-06-28 05:58:31 +00:00
Matthew Meszaros bbc07be875 feat: default the settings Section primitive to a stacked full-width layout and keep the title-rail look as an opt-in split layout so wide content is no longer squeezed into a narrow column 2026-06-28 05:58:31 +00:00
Matthew Meszaros 2f4e4f7ee6 feat: bound the settings layout to its container height so the left rail and content panes scroll internally instead of sliding under the sticky Settings topbar 2026-06-28 05:58:31 +00:00
Matthew Meszaros db94ce0c47 feat: capture the ?ref= referral code in the web signup flow and thread it through registration 2026-06-28 05:10:04 +00:00
Matthew Meszaros faad54b6a3 feat: add a redeemed promo codes table to the web billing settings page with its client, hook, and model 2026-06-28 05:10:04 +00:00
Matthew Meszaros ae09a1646c feat: build the dashboard referral settings page with its API clients, hooks, models, and route registration in web 2026-06-28 05:10:04 +00:00
Matthew Meszaros 38e9ca980f fix: correct the dashboard /auth/me avatar and password endpoints, guard self-row actions on the members page, align the steps-page permission gate with the server, harden realtime event handling, and remove the dead admin roles client 2026-06-15 08:12:35 +02:00
Matthew Meszaros a72addabeb feat: add OAuth app webhook configuration with an event picker, signing-secret reveal and rotate, per-org installs, and a cross-org delivery log 2026-06-15 08:11:35 +02:00
Matthew Meszaros d655ff4f59 feat: add the webhooks settings page with delivery observability, an onboarding setup step, and the webhook API client, hooks, and models 2026-06-15 08:11:35 +02:00
Matthew Meszaros c5dfa5e4e7 feat: remove the HTTP-request action from campaign steps and automations in favor of signed webhooks, keep fire_event for custom payloads, and drop the now-unused outbound quota plumbing 2026-06-15 08:11:35 +02:00
Matthew Meszaros b94a053ac9 feat: replace native date/time inputs with the themed pickers across the dashboard (audit log, admin audit, CRM tasks/deals, contacts and unibox filters, new meeting, campaign schedule) 2026-06-14 09:52:49 +02:00
Matthew Meszaros e24c75a7db feat: render Pipedrive's real monogram in white on a Green Haze tile in integrations, via a full-bleed brand-logo option 2026-06-14 09:52:49 +02:00
Matthew Meszaros 9cf56ee0af feat: match the analytics tab's range/metric controls to the deliverability tab (slate-100 track with a white active pill) instead of the dark slate-900 blocks 2026-06-14 09:52:49 +02:00
Matthew Meszaros fc5e014766 fix: remove dead admin Roles/Users/Plans tabs, point the deliverability 'all mailboxes' link at /app/emails, and add the missing document titles so those dashboard tabs no longer read 'Page not found' 2026-06-14 09:52:49 +02:00
Matthew Meszaros f598237348 feat: redesign the Settings tab into grouped sections with a framer-motion sliding active indicator and animated content transitions 2026-06-14 09:52:49 +02:00
Matthew Meszaros e3c49fe571 feat: move the OAuth apps developer portal into Settings with a multi-step registration onboarding wizard (stepper, animated modal, logo upload) and an animated apps/authorized tab switch 2026-06-14 09:52:49 +02:00
Matthew Meszaros b06a11315f feat: add the OAuth 2.1 dashboard UI: an OAuth apps page (register apps with a scope picker, one-time client secret, rotate, delete, authorized-apps tab with revoke) and a standalone consent screen at /oauth/authorize, plus the API client, hooks, and sidebar entry 2026-06-13 14:07:21 +02:00
Matthew Meszaros c5226147ac fix: use Pipedrive's Green Haze (#08A742) for the provider glyph background instead of the darker favicon green 2026-06-13 13:28:35 +02:00
Matthew Meszaros 9904919ae3 feat: replace the Pipedrive provider glyph with its real mark, a Green Haze circle and white blocky lowercase p, instead of a generic letter tile 2026-06-13 12:55:57 +02:00
Matthew Meszaros 2d41cb541e feat: use Slack's real four-color hash and Close's colored orb mark, fix Calendly, and give Pipedrive a branded Green Haze tile in the integrations provider glyph 2026-06-13 12:37:49 +02:00
Matthew Meszaros 5118033389 feat: render real brand logos in the integrations tab — ProviderGlyph now draws the official simple-icons (CC0) SVG marks for Slack, Discord, HubSpot, Salesforce, Zapier, n8n, Calendly, Make, and Cal.com in each brand's color on a neutral tile, falling back to a tinted initial for providers without a bundled mark 2026-06-13 12:15:06 +02:00
Matthew Meszaros eb74b7dafb feat: fix the Steps tab still pointing at /sequences and replace remaining user-facing Sequences with Steps (route page + folder renamed to steps, document title regex, permission labels, not-found hint, campaign count) 2026-06-12 10:03:02 +02:00
Matthew Meszaros a7a43e0c4c feat: rename the campaign sequences resource to steps across the API and URL (/campaigns/:id/steps), the JSON fields (target_step_id, step_id/step_name/step_index, analytics steps[], create body steps), the web client/models/route segment/labels, the audit step entity type, and the wire-contract docs; internal Go type names and the Kafka avro schema stay 2026-06-12 09:38:11 +02:00
Matthew Meszaros 6e9f2b4807 feat: add a Team presence section to workspace settings with admin-gated Show who's online and Show activity toggles, and make ToggleRow support a controlled persisted mode 2026-06-12 05:59:01 +02:00
Matthew Meszaros 393b683fa2 feat: lock the campaign sequence flow for members without manage-sequences — view-only members can't drag steps, draw branches, or add a step (each attempt pops the permission popup and the Add-step button shows a lock), while pan/zoom/inspect still work 2026-06-11 19:17:20 +02:00
Matthew Meszaros 384579a36b feat: proactively lock the campaign Start/Pause, settings Save and schedule Save buttons for members without send/manage-campaign permission (lock icon + permission popup before any request) 2026-06-11 19:00:09 +02:00
Matthew Meszaros a0221dd312 feat: show one clear, app-wide 'you don't have permission' popup whenever a write action (edit/save/delete) is denied with 403, naming the missing permission or plan, instead of silent failures and generic error toasts across the dashboard 2026-06-11 18:30:53 +02:00
Matthew Meszaros 4440613d94 feat: sidebar shows a lock on features the member can't access and pops an explanatory access dialog on click, so a locked feature reads as unavailable instead of an empty page mistaken for 'no data'; align Accounts gate on Manage mailboxes 2026-06-11 17:17:48 +02:00