Commit graph

  • bfdbf8f031 bounce-sync: stop blocklisting good carriers on first auth/policy bounce main justin 2026-06-26 23:53:20 -05:00
  • f3442872f2 trucking builder: widen catch-all bounce window 2d->5d to stop volume whipsaw justin 2026-06-26 23:48:31 -05:00
  • 48fb9f7fbb Add CMS revalidation-overdue mailable-pool builder (red-result urgent leads) justin 2026-06-26 14:43:12 -05:00
  • b350a1367d fix(hc-cron): stop re-mailing the whole list daily (per-day send lists) justin 2026-06-26 12:19:41 -05:00
  • 4276adab80 infra(mail): fix warmed sending IPs dropping off ens18 on reboot (Jun 24 outage) justin 2026-06-25 17:28:33 -05:00
  • 7ad4c920c6 fix(deploy): cd to script's own dir instead of hardcoded /opt/performancewest justin 2026-06-25 16:07:47 -05:00
  • 618fafe1d5 order: payment-first express checkout + fix dead Tawk chat widget justin 2026-06-25 11:32:48 -05:00
  • ae68edbc58 fix(monitoring): repair both dead mail-alert crons + de-noise DMARC digest justin 2026-06-24 06:28:50 -05:00
  • c20edb28cd docs(deliverability): document Gmail re-enablement stale-Date/burial fix justin 2026-06-24 01:24:24 -05:00
  • 9dd6f53eb2 infra(mail): remove 18 dormant snowshoe IPs from postfix + host justin 2026-06-23 23:45:41 -05:00
  • 14357a0223 fix(nginx): unblock public API routes powering lead tools/flows (HC sales killer) justin 2026-06-23 15:51:30 -05:00
  • a90cdc9066 fix(trucking-email): route order CTAs to the correct service page (not $399 catch-all) justin 2026-06-23 15:19:23 -05:00
  • e3f439221a fix(trucking-email): kill recurring @TrackLink 404 at the source-clone boundary justin 2026-06-23 15:02:05 -05:00
  • 60d2572f19 fix(intake): HC checkout 400 — resolve customer email/name from intake_data justin 2026-06-23 13:40:19 -05:00
  • f773718e4d fix(intake): send application/json Content-Type on ReviewStep validate justin 2026-06-23 13:11:35 -05:00
  • 5546c58bf0 fix(intake): repair order wizard — checkout was fully broken on trucking/HC justin 2026-06-23 13:08:41 -05:00
  • 3325259af7 fix(email): drop @TrackLink from per-subscriber CTAs (404 + collapse bug) justin 2026-06-22 17:01:39 -05:00
  • 1e9dcfcfd1 mail(rampcap): step trucking cap back up to 400/h (day 19-20), 500/h ceiling justin 2026-06-22 12:49:54 -05:00
  • 62292b96af docs(deliverability): document Jun 22 re-send of never-delivered DKIM-window audience justin 2026-06-22 11:59:29 -05:00
  • 5a3063ecb3 campaigns: MAIN_EXCLUDE_OPERATORS override + Gmail-only exclusion for post-DKIM re-send justin 2026-06-22 07:35:22 -05:00
  • 2d220a273d ops(carbonio): add noreply@ mailbox auto-purge + daily cron justin 2026-06-21 04:55:50 -05:00
  • e414ec4a5f fix(email): correct Reply-To header shape for listmonk (was silently dropped) justin 2026-06-21 01:03:07 -05:00
  • 297db74fee trucking: support full-price control arm in coupon A/B (pct 0 = no code) justin 2026-06-21 00:12:30 -05:00
  • 2f0753f00e trucking: add idempotent patcher for main-campaign coupon blocks (186/188 computed prices) justin 2026-06-20 17:43:46 -05:00
  • 579919197d trucking: compute coupon discounted prices on the fly (true per A/B arm) + fix CTA URL bug justin 2026-06-20 17:43:11 -05:00
  • 6fce3ec9eb trucking: A/B/C coupon price test (20/30/40% off) + SpamAssassin harness justin 2026-06-20 16:41:47 -05:00
  • 1acae2f20c healthcare: fix 4 bugs in segment-assignment + free-check email justin 2026-06-20 16:14:44 -05:00
  • 0320dc17ba healthcare: one-email-per-provider by urgency priority + free check as default justin 2026-06-20 16:01:23 -05:00
  • 4ed1498ef3 healthcare: reframe NPPES email as a FREE NPI compliance check justin 2026-06-20 15:46:26 -05:00
  • a430d5e329 healthcare: honest NPPES framing -- stale != out of business / no auto-penalty justin 2026-06-20 15:30:03 -05:00
  • 744f0a89cf healthcare: bound NPPES-stale window [3,10]yr + restore verify_ok gate justin 2026-06-20 15:28:12 -05:00
  • 9e155d214c healthcare: cite REAL NPPES last_updated date in 'outdated' email justin 2026-06-20 15:21:15 -05:00
  • d8e3e40dda healthcare emails: remove prices, fix click tracking, de-risk claims justin 2026-06-20 09:37:02 -05:00
  • 9a9b0b9130 Add Ontario alongside BC on CRTC page justin 2026-06-20 06:40:18 -05:00
  • b1629160d5 crtc collapse: skip card-wrapped headings whose body isn't a sibling (fixes empty US-wholesale + banking expanders; vendor directory left inline) justin 2026-06-20 01:30:26 -05:00
  • 345c22e561 crtc page: add 'is this real?' proof expander (public RMD/499 stats + named CA operators, defamation-safe); keep standalone expanders out of auto-collapse justin 2026-06-20 01:12:10 -05:00
  • 0562fd2bd3 crtc page: add 5-min-read TL;DR + collapsible deep-detail sections (non-destructive JS/CSS enhancement) justin 2026-06-20 01:08:41 -05:00
  • 4f52d12629 docs: mark MX-exclusion plan complete (all 3 fixes shipped) justin 2026-06-20 00:21:52 -05:00
  • bc93d93c5b mail: Fix 2 — bound the untagged (NULL mx_provider) bucket in the selector justin 2026-06-20 00:19:14 -05:00
  • b7cce370d7 docs: mark MX-exclusion plan Fix 1 + Fix 3 shipped justin 2026-06-20 00:06:56 -05:00
  • 9eeed47c4b mail: close MX-exclusion gaps — exclude consumer mx: operators + add mx-tag cron justin 2026-06-20 00:03:47 -05:00
  • 285a4a087c docs: plan to close MX-exclusion gaps in trucking warmup justin 2026-06-19 23:55:15 -05:00
  • 98364009b0 docs: international compliance expansion plan (UK/AU/IE/NZ) + vertical portability matrix justin 2026-06-19 10:44:11 -05:00
  • 433b10ce98 mail: CRTC/USF campaign — add @TrackLink + UTM to CTAs (was recording 0 clicks) justin 2026-06-19 10:05:01 -05:00
  • 707d538847 mail: DMARC parser — classify whole 207.174.124.0/24 as ours (warmup pool) justin 2026-06-19 08:54:41 -05:00
  • 8e5590b492 mail: DMARC aggregate-report parser + dedicated dmarc@ mailbox ingestion justin 2026-06-19 08:50:20 -05:00
  • b45332b5f7 infra(cron): nightly mail-reputation snapshot (pw-mail-reputation) justin 2026-06-19 08:38:35 -05:00
  • 08f651dc1e feat(deliverability): mail reputation monitor (SNDS-equivalent from postfix logs) justin 2026-06-19 08:35:45 -05:00
  • bd7ba23841 docs(deliverability): Yahoo CFL ENROLLED for both domains (reporting fbl@) justin 2026-06-19 08:29:12 -05:00
  • b8b6444084 docs(deliverability): Yahoo CFL verification keys added for both domains justin 2026-06-19 02:13:48 -05:00
  • a9bbfbf59b docs(deliverability): Microsoft MANUAL 2 fully DONE — SNDS access + JMRP both set justin 2026-06-19 02:03:30 -05:00
  • f293466519 docs(deliverability): JMRP complaint dest set to fbl@performancewest.net justin 2026-06-19 01:00:16 -05:00
  • 60540f949d docs(deliverability): JMRP done — both IPs registered (pw1/.94, pw2/.107) justin 2026-06-19 00:59:49 -05:00
  • 776817c727 docs(deliverability): correct SNDS entry URL (snds.microsoft.com does not resolve) justin 2026-06-19 00:46:25 -05:00
  • 7828ee4587 docs(deliverability): fix SNDS/JMRP URLs for Microsoft's 2026 substrate migration justin 2026-06-19 00:45:59 -05:00
  • e18f23634a docs(deliverability): document consumer-domain exclusion two-layer model + scrub justin 2026-06-19 00:01:17 -05:00
  • 72c69a05c9 infra(cron): daily Listmonk consumer-domain reconciliation (pw-listmonk-scrub) justin 2026-06-19 00:00:46 -05:00
  • b40fc7ec36 feat(deliverability): exclude Apple consumer mail + scrub stale consumer subs from Listmonk justin 2026-06-18 23:55:58 -05:00
  • 49842bddbb docs(deliverability): Microsoft #1 priority + role mailboxes created (Carbonio) justin 2026-06-18 23:31:20 -05:00
  • 3ca960aca5 docs+infra(deliverability): document bulk subdomain; ansible signs send.performancewest.net justin 2026-06-18 23:12:05 -05:00
  • 5c3b4291e7 feat(deliverability): send bulk campaigns from dedicated subdomain send.performancewest.net justin 2026-06-18 23:07:23 -05:00
  • 1056705cf9 docs(deliverability): Google Postmaster TXT added+verified via Hestia DNS master justin 2026-06-18 22:05:01 -05:00
  • 5253f16675 docs: deliverability runbook (incident, IP consolidation, monitoring setup) justin 2026-06-18 17:46:28 -05:00
  • 545e6f7ed7 infra(mail): consolidate sending IPs (kill snowshoe) now that DKIM is fixed justin 2026-06-18 17:41:07 -05:00
  • f43957882f docs(billing): record OIG/SAM recurring validation status justin 2026-06-18 09:38:51 -05:00
  • 5c1f239307 test(workers): NPI recurring-cycle fulfillment path (13 assertions) justin 2026-06-18 09:38:26 -05:00
  • 0083bc1354 docs(billing): record Stripe subscription webhook events as ENABLED + api-version caveat justin 2026-06-18 08:45:22 -05:00
  • 8af2685d07 fix(webhooks): read invoice.subscription in both API shapes (acacia + dahlia) justin 2026-06-18 08:42:29 -05:00
  • cf021e2f91 feat(healthcare): OIG/SAM exclusion screening as $79/mo Stripe Subscription justin 2026-06-18 07:54:38 -05:00
  • f481a1d13c analytics: filter email-scanner / headless traffic out of Umami stats justin 2026-06-18 02:02:34 -05:00
  • 40da017b79 campaigns: auto-rollout catch-all pool gated by warmup day + live bounce rate justin 2026-06-18 01:39:09 -05:00
  • c36ef07310 crtc site: defensible framing + 'who this is for' compliance posture justin 2026-06-18 00:22:58 -05:00
  • 720197095c CRTC USF email: defensible framing + conversational-voice caveat justin 2026-06-18 00:20:44 -05:00
  • a82b356921 CRTC USF email: reframe to 'run your whole VoIP as a Canadian carrier' justin 2026-06-18 00:10:06 -05:00
  • d9ecb94b27 CRTC USF email: add honest US-termination + STIR/SHAKEN section justin 2026-06-18 00:03:31 -05:00
  • 8099afc5ab CRTC USF email: note US DIDs available from Canadian carriers + point to guide justin 2026-06-17 23:53:19 -05:00
  • 1c63e8f4b5 CRTC USF email: add FCC photo-ID KYC requirement to the burden list + Canada contrast justin 2026-06-17 23:46:04 -05:00
  • 2611b5458b CRTC USF campaign: shared campaign_helpers + Q3 38.8% USF email builder justin 2026-06-17 23:40:01 -05:00
  • e379e2b10f CRTC: ERPNext as portal source of truth + harden discount expiry + carrier guide PDF justin 2026-06-17 23:34:13 -05:00
  • eed5e4a258 campaigns: disable daily discount by default — test normal-price deals justin 2026-06-17 22:51:28 -05:00
  • a04ecf7df3 chore(email): decommission SMTP2GO references — local MTA only justin 2026-06-17 22:46:59 -05:00
  • eba525f83f docs: runbook fix #8 — telecom/transactional HTML-only plaintext fix + campaign 407 finding justin 2026-06-17 21:17:06 -05:00
  • b375385efd fix(email): add text/plain part to every transactional + telecom email justin 2026-06-17 21:07:40 -05:00
  • 899b880e7f trucking: weekly FMCSA source refresh so new non-compliant carriers are caught justin 2026-06-17 20:44:54 -05:00
  • 4171f48736 docs: record post-incident email hardening (7 fixes) in runbook justin 2026-06-17 20:30:59 -05:00
  • 466460112b email: handle unquoted hrefs in plaintext converter + add tests justin 2026-06-17 20:28:15 -05:00
  • 4dc5690666 infra: codify the email-campaign pipeline in Ansible (new mail-pipeline role) justin 2026-06-17 20:26:01 -05:00
  • c183957939 email: suppress defunct/legacy/satellite ISP domains in cold sends justin 2026-06-17 20:16:00 -05:00
  • a32a3b05a0 email: add plaintext MIME part + stable Message-ID hostname justin 2026-06-17 20:09:02 -05:00
  • 2e4388a803 mail: add logrotate for Postfix mail.log (postlogd copytruncate) justin 2026-06-17 19:47:13 -05:00
  • 4d5901921e mail: fix OpenDKIM not signing campaign mail (Docker-injected) + codify in Ansible justin 2026-06-17 19:31:19 -05:00
  • f7212b3969 scripts: one-off fresh password-set link for Paul Wilson (ERPNext auth) justin 2026-06-17 10:19:53 -05:00
  • 9c87759501 auth: make ERPNext the single source of truth for customer passwords justin 2026-06-17 10:09:32 -05:00
  • 557b45f65d fix(erpnext): self-heal outgoing Email Account password from SMTP_* env justin 2026-06-17 09:48:16 -05:00
  • 1eb29f80be fix(verifier): mx_unreachable was mislabeling live big-ISP mailboxes justin 2026-06-17 05:48:08 -05:00
  • c2737f2001 feat(deliverability): burner-domain list verification + plan doc justin 2026-06-16 22:28:24 -05:00
  • 1652a3b8bc fix(campaigns): stop sending trucking blasts to mx_unreachable dead domains justin 2026-06-16 22:24:15 -05:00
  • 35f204c2b8 fix(mcs150): point intake email to per-slug wizard (not sales page) + add Trailers field justin 2026-06-16 16:21:57 -05:00
  • 674979c928 tweak(sc-coc): tell carrier to check with insurer before answering + Reply-To info@ justin 2026-06-16 09:35:13 -05:00
  • ab9491be6a fix(deploy): hard-reset to origin/main + assert HEAD advanced (stop silent strands) justin 2026-06-16 09:25:11 -05:00