Commit Graph
1681 Commits
Author SHA1 Message Date
Matthew Meszaros 56fce77b0a feat: swap the admin discount search's query-bound UUID cursor for a handler-decoded Offset so the discount list's wire cursor stays opaque 2026-06-28 05:58:25 +00:00
Matthew Meszaros 88266a797e feat: add migration 000052 indexing discount_codes on (created_at DESC, id DESC) so the admin discount list avoids a seqscan+sort once an org runs many promo codes 2026-06-28 05:58:25 +00:00
Matthew Meszaros b71bef8e97 feat: drop the em dash from the welcome email copy to match the repo no-em-dash style rule 2026-06-28 05:31:23 +00:00
Matthew Meszaros 6c2ea71955 feat: capture base-shell render failures to Sentry in renderEmail so every transactional email template's render errors are observable 2026-06-28 05:31:23 +00:00
Matthew Meszaros 8373aebe99 feat: cover the refactored cancelled-deletion email shape with org and user template test cases 2026-06-28 05:31:23 +00:00
Matthew Meszaros fe03275dbe feat: apply email-client review fixes to the danger-zone deletion templates (move the callout background to the td so Outlook renders it, switch the self-closing br to plain br, and interpolate cancelled-deletion names through html/template) 2026-06-28 05:31:23 +00:00
Matthew Meszaros f0bdd72153 feat: add tests and previews covering the trial, invitation, notification, and deletion email generators including html-escaping and no-CTA cases 2026-06-28 05:27:28 +00:00
Matthew Meszaros 233dee8766 feat: move danger-zone deletion emails onto the shared templates package and delete the off-brand standalone emails.go wrapper 2026-06-28 05:27:28 +00:00
Matthew Meszaros a24b48b2f1 feat: add branded danger-zone deletion email templates (org/user scheduled, cancelled, reminder, completed) with semantic red/amber/green accents on the shared shell 2026-06-28 05:27:28 +00:00
Matthew Meszaros 57adf4f9b2 feat: route notification.deliverEmail through GenerateNotificationHTML and drop the hand-rolled htmlEscape/inline-fragment email body 2026-06-28 05:27:28 +00:00
Matthew Meszaros 18486ecfd4 feat: add a generic branded notification email template with an optional CTA button for the in-app notification email channel 2026-06-28 05:27:28 +00:00
Matthew Meszaros 789da671d6 feat: send organization member invitations through GenerateInvitationHTML so they match the rest of the transactional mail 2026-06-28 05:27:18 +00:00
Matthew Meszaros 6b2ee63593 feat: add a branded team-invitation email template with html/template-escaped org and inviter names and a slate CTA button 2026-06-28 05:27:18 +00:00
Matthew Meszaros 7dcd5ac83f feat: render the trial-expiration job notice via GenerateTrialExpiredHTML instead of the raw unstyled h2/ul HTML fragment 2026-06-28 05:27:18 +00:00
Matthew Meszaros f57f211d20 feat: add a branded trial-expired email template rendered through the shared transactional base shell in internal/notify/templates 2026-06-28 05:27:18 +00:00
Matthew Meszaros 4187d15dd0 feat: document the referral program guide and the referral and applied-discounts API endpoints in docs 2026-06-28 05:10:04 +00:00
Matthew Meszaros dce555689f feat: add the referral program marketing page and a Product footer link in site 2026-06-28 05:10:04 +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 8aec22ba71 feat: invalidate referral query keys on the referral and referral_credit realtime audit events in the web spine 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 f49816a7b1 feat: construct and bidirectionally wire the referral service into the backend bootstrap 2026-06-28 05:09:50 +00:00
Matthew Meszaros 8bd3a1137e feat: expose the JWT referral and applied-discounts endpoints with handlers and manage_billing-gated routes 2026-06-28 05:09:50 +00:00
Matthew Meszaros b1f26e24f9 feat: list an organization's promo redemption history through the discount service and repository for the billing page 2026-06-28 05:09:50 +00:00
Matthew Meszaros a21f4d0d0e feat: capture the signup referral code through the auth registration flow and the WireReferral attributor hook 2026-06-28 05:09:50 +00:00
Matthew Meszaros 234e624fdc feat: add the Stripe customer-balance applier and wire referral reward, qualify, and clawback hooks into the Stripe webhook handlers 2026-06-28 05:09:50 +00:00
Matthew Meszaros 8b05f381f7 feat: add the referral service covering code minting, signup attribution, the reward and clawback lifecycle, and Stripe customer-balance sync in internal/app/referral 2026-06-28 05:09:50 +00:00
Matthew Meszaros a6fae9f043 feat: add the referral repository with atomic idempotent reward and clawback ledger primitives plus code and attribution persistence in pg_referral.go 2026-06-28 05:09:50 +00:00
Matthew Meszaros 4e7d82f8c0 feat: read the new plans.referral_reward_percent column through every plan repository scan 2026-06-28 05:09:50 +00:00
Matthew Meszaros 6996588cb4 feat: add referral domain models, Plan month-equivalent and reward-cents helpers, and the referral and referral_credit audit entity types in internal/models 2026-06-28 05:09:50 +00:00
Matthew Meszaros fd25383719 feat: add migration 000051 creating the referral_codes, referral_attributions, and referral earnings ledger and transactions tables plus a plans.referral_reward_percent column 2026-06-28 05:09:50 +00:00
Matthew Meszaros d61f049f6c Merge pull request #49 from warmbly/feature/webhook-settings-onboarding 2026-06-15 08:25:23 +02: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 ce45ba02d9 docs: document the webhook platform and OAuth app webhooks, add the webhooks guide, and update the endpoint scope map 2026-06-15 08:11:53 +02:00
Matthew Meszaros 2c910dcdeb feat: make a campaign step's Original a first-class weighted A/B arm driven by a single draggable traffic-split bar, persisting the control share as an is_control variant row 2026-06-15 08:11:53 +02:00
Matthew Meszaros 03acdb87e3 fix: thread organization_id through contact, CRM, and unibox reads and writes so non-owner org members see and edit their workspace data, and backfill contacts.organization_id for single-membership users (migration 000049) 2026-06-15 08:11:53 +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 660d717456 feat: register the webhook and oauth-app-webhook routes and wire the delivery worker, audit-to-webhook bridge, and app domain resolver into the backend 2026-06-15 08:11:20 +02:00
Matthew Meszaros 9d0c432be7 feat: let OAuth apps subscribe to webhooks by declaring a url/events/secret and materializing per-org endpoints gated by each grant's scopes, with secret rotation and delivery observability (migration 000050) 2026-06-15 08:11:20 +02:00
Matthew Meszaros 173736a004 feat: add a Stripe-grade webhook platform with a typed event catalog, HMAC-signed delivery, retries with backoff, endpoint ownership verification, per-endpoint throttling, an audit-spine event bridge, and firehose emit sites (migration 000048) 2026-06-15 08:11:20 +02:00
Matthew Meszaros 0a81fd361b feat: add safehttp dial-time SSRF guards and the whdomain subdomain-aware allowlist matcher used to harden outbound webhook delivery 2026-06-15 08:11:20 +02:00
Matthew Meszaros 8209f2fbef Merge pull request #48 from warmbly/feature/realtime-tracking
Realtime collaboration + presence privacy, the steps/automations flow overhaul, and the label-email action
2026-06-14 12:13:33 +02:00
Matthew Meszaros ab7ed0571b ci: ignore esbuild GHSA-gv7w-rqvm-qjhr (Deno-installer RCE) since we install esbuild via pnpm/npm with integrity-pinned binaries and ship it in no runtime artifact 2026-06-14 12:08:18 +02:00
Matthew Meszaros 899bdfb2f0 fix: stop the automation builder from showing 'Updated by a teammate' when the change was made by the same user elsewhere (e.g. toggling enabled from the automations list) by consulting the global self-mutation signal 2026-06-14 11:12:07 +02:00
Matthew Meszaros c51946e4da fix: track the current user's own audited mutations from the realtime actor id so collaborative editors can tell a self-made change (list-row toggle, another tab) apart from a teammate's edit 2026-06-14 11:12:07 +02:00
Matthew Meszaros c1bd391ceb docs: add a dependency-free realtime gateway reference client (connect, HELLO, heartbeat loop, seq resume, intents incl CUSTOM), a close-codes table, and OAuth-access-token auth 2026-06-14 11:02:12 +02:00
Matthew Meszaros b83aa51921 feat: make CUSTOM_EVENT fire-event signals an explicit allow on the org channel and return structured {code, reason} errors on a failed channel join 2026-06-14 11:02:12 +02:00
Matthew Meszaros 799e5f10ef feat: surface WebSocket connection-rejection reasons to the client as a structured {code, reason, retry_after_ms} payload (Discord-style 4003/4004/4007/4009/4010) instead of a bare 403, and fix the rate-limit 3-tuple match 2026-06-14 11:02:12 +02:00