Changelog
Changelog
All notable changes to Bulk Email Boxer. Latest at top.
2026-05-03
Added
- Lead-import dedup with helpful UX: duplicate emails within an upload (or already in the campaign) are skipped and the user sees a toast counting exactly what was dropped, with a "find more leads" link.
- 11 prerendered competitor comparison pages at
/alternatives/{competitor}(Instantly, Smartlead, Apollo, Lemlist, Mailshake, Reply.io, Woodpecker, Saleshandy, QuickMail, Outreach, Salesloft). - Standalone
/pricing,/faq,/aboutpages with rich JSON-LD (Product/Offer, FAQPage, AboutPage, BreadcrumbList). /llms-full.txt— concatenated full content of every blog post for one-shot LLM ingestion.- Prerendered static HTML for all 11 blog posts so AI crawlers (GPTBot, ClaudeBot, OAI-SearchBot, PerplexityBot, etc.) can read them.
- Crash-recovery dedup on email send: every dispatched job carries a
dispatch_tokenUUID; workers refuse to send if the token is stale, preventing duplicate sends after a crash recovery. - Stripe
invoice.paidwebhook handler resyncs subscription state on trial → active conversions that don't always firecustomer.subscription.updated.
Changed
- Removed the Coming Soon page; site is live for everyone.
- Expanded
robots.txtfrom 7 to 22 explicit AI-crawler allow rules. - Sitemap grew from 12 to 30 URLs and now includes per-post
lastmoddates. - RSS feed switched from
description-only to full<content:encoded>blocks for LLM aggregator pickup. - Auth: case-insensitive email lookup so
Foo@x.comandfoo@x.comno longer create two separate trials.
Fixed
- JIT user-creation race condition on concurrent first-logins (web + mobile tab opened simultaneously) — now resolves cleanly via
IntegrityErrorcatch instead of a 500. - Cloud Tasks executor: production now defaults to refusing the in-process mock fallback when
ENVIRONMENTenv var is unset. - Trial-reminder Cloud Tasks endpoint returns 503 (instead of 200) when SMTP transport is unavailable, so reminders retry instead of vanishing.
- Vercel rewrite no longer shadowed prerendered static pages at
/pricing,/about,/faq,/alternatives/*. - HTTPS preserved in 307 redirect Location headers (was emitting
http://due to missingTRUSTED_PROXIESconfig). - Removed orphaned git submodule reference that was breaking Cloud Run deploys with
git exit 128.
Security
- Rotated leaked Supabase database password (was in committed file
backend/fix_alembic.pydeleted from HEAD; rotated v9 ofDATABASE_URLsecret + previous versions disabled). - History rewrite: scrubbed AI-authorship metadata (
Co-Authored-By) from all commits. - Repo cleanup: removed 29 tracked
__pycache__files, removedbackend/spam_keywords.txt(gitignored but leftover).
2026-05-02
Added
support@bulkemailboxer.comemail forwarding via Google Workspace user alias domain (MX swapped tosmtp.google.compriority 1 in IONOS DNS).
Changed
- Updated
DEPLOY_STATE.mdto reflect post-launch infrastructure state.
2026-05-01
Added
- Cloud Scheduler integration: 17 cron jobs hitting
/internal/*endpoints (campaign-dispatch, warmup-dispatch, sweep-stuck-jobs, etc.). Scheduler-create script is idempotent. - Comprehensive prelaunch audit + auto-deploy CI workflow (
deploy.yml) for backend.
2026-04-30
Added
- Frontend migrated to Vercel (edge / global CDN). Cloud Run frontend service kept as fallback.
- Markdown-driven blog at
/blog: 8 launch posts on cold-email deliverability, warmup, RFC 8058, comparisons. - Auto-generated sitemap.xml + RSS feed at build time.
- Founder admin dashboard at
/admin(dashboard, users, audit logs, waitlist viewer). - Waitlist endpoint
POST /api/waitlist+ CSV export (GET /api/admin/waitlist.csv, CSV-injection safe). - Coming Soon holding page on
/with founder bypass via?early=boxer2026. - RFC 8058
List-Unsubscribe+List-Unsubscribe-PostSMTP headers on every customer email. - Full security headers (CSP, HSTS, X-Frame-Options, etc.) via Vercel.
2026-04-29
Added
- Initial production deploy: backend on Cloud Run (us-central1), DB on Supabase, Stripe live keys, custom domain
bulkemailboxer.com. - Sentry error tracking wired (PII scrubbing in backend
before_send). - Pre-launch deliverability + legal hardening (DMARC, privacy/terms pages, GDPR self-serve export).