Changelog

What's new.

All releases, features and fixes - most recent first.

v0.21.1 Latest

Patch fixes

7 June 2026
  • - Large scans no longer stall near the end - background job history is kept short so the database stays responsive and processing finishes reliably
v0.21.0

Deploy Safety, Recovery and Housekeeping

7 June 2026
  • - Maintenance mode - processing can be paused safely before a deploy, with a banner shown to users and new scans temporarily blocked, then resumed automatically once the deploy is healthy
  • - Interrupted scans recover on their own - a scan that was mid-enqueue when the app restarted picks up where it left off instead of stalling
  • - Re-scan from the same upload - the original file is kept until a scan finishes, so a scan can be re-run without uploading again
  • - Failure reports - when a scan fails, a detailed report is generated for support so problems can be diagnosed quickly
  • - New Scan health area for operators - see scans in progress, recent failures and their reports at a glance
  • - Smoother live timing - scan progress and speed now tick on a steady clock
v0.20.2

Patch fixes

7 June 2026
  • - More stable verification under load - disposable-domain checks no longer funnel through a single process, removing the timeouts and stalls that could slow large scans
v0.20.1

Patch fixes

7 June 2026
  • - Fixed large scans appearing stuck at 0 - progress now updates steadily from the start instead of waiting for a whole batch to finish
v0.20.0

Scan Reliability and Resilience

6 June 2026
  • - Live scan progress is smoother - the bar advances steadily and the speed chart shows the real processing speed sampled every 10 seconds
  • - Scans no longer get stuck - an interrupted scan is recovered automatically and only marked failed after repeated stalls with no progress
  • - Your full list is kept - every row is preserved and counted, including rows that repeat the same email with different data
  • - Repeated emails are verified once and the result reused, so lists with duplicates finish faster
  • - More reliable under load - results and counters are saved together, so a crash or restart cannot lose progress or leave a scan hanging
  • - Test coverage increased to 83.1%
v0.19.0

Batch Pipeline Cleanup

6 June 2026
  • - Speed chart now shows per-period throughput instead of cumulative average - chart reacts to current processing speed rather than flattening over time
  • - Legacy single-email verification worker removed - all verification runs through the batch pipeline
  • - Test coverage increased to 80.9%
v0.18.1

Patch fixes

6 June 2026
  • - Reduced verification concurrency from 20 to 5 - prevents DB connection pool exhaustion when 20 batch workers all save results simultaneously
v0.18.0

Batch Scan Processing

6 June 2026
  • - Verification pipeline rebuilt around batch jobs - one Oban job now handles 1000 emails instead of one job per email, reducing queue size by 1000x for large scans
  • - SMTP checks run concurrently within each batch using async streams - 10 parallel connections per batch worker
  • - All scan counters updated in a single database query per batch - eliminates the thundering herd of individual counter increments
  • - Scan resume on restart now re-queues incomplete batches instead of individual emails - faster recovery and less DB overhead
  • - Verification concurrency restored to 20 batch workers - effectively 200 concurrent SMTP connections with far lower database pressure than before
v0.17.4

Patch fixes

6 June 2026
  • - Reduced verification concurrency to 5 to prevent DB I/O saturation on large scans
v0.17.3

Patch fixes

6 June 2026
  • - Fixed connection pool instability - pool increased to 60, Lifeline rescue timeout reduced from 30 to 5 minutes so stuck jobs after restart unblock faster
v0.17.2

Patch fixes

6 June 2026
  • - Fixed connection pool exhaustion under load - verification concurrency reduced to 20, DB pool increased to 35
v0.17.1

Patch fixes

6 June 2026
  • - Fixed production crash - scan resumer no longer loads all rows into memory at once, processes in batches of 1000
  • - Fixed PostgreSQL parameter limit crash when resuming large scans with thousands of emails
  • - Fixed duplicate job queueing on server restart - each email row now processed exactly once
  • - Fixed stuck scan detector falsely failing large scans - now checks inactivity (2h with no progress) instead of total run time
  • - Scan rows cleaned from database after scan finishes to keep storage lean
  • - Verification concurrency increased to 50 workers for faster processing
v0.17.0

Scan Resilience

6 June 2026
  • - Verification results now persisted to database - each email result stored in scan_rows table, no data lost on restart
  • - Scans resume automatically on startup - any interrupted scan continues from where it left off without losing processed rows
  • - Source CSV files stored on S3 instead of local disk - scans survive machine restarts and redeploys
  • - Speed chart fits screen width on all devices - no more horizontal stretching on 2K, 4K or mobile
  • - Scan status updates in real-time without page refresh when processing starts
v0.16.0

Scan History and Reliability

6 June 2026
  • - Scan history improvements - status badges, scan meta cards, deliverability bar and pagination components refined
  • - File upload limit reduced to 10MB for stability
  • - Oban job cleanup - Pruner plugin added to automatically remove completed jobs older than 7 days
  • - Oban resilience - Lifeline plugin added to rescue jobs stuck in executing state after restarts
  • - Test coverage increased to 81.6%
v0.15.0

Stability and Quality

19 May 2026
  • - Owner organisations page - search now persists in URL and survives page refresh, reset button clears filters, table column alignment fixed
  • - Scan speed chart - real-time processing speed chart on scan show page, scrolls horizontally with latest data on the right
  • - Scan speed sampling - ScanWriter records emails per minute every 10 seconds, samples cleaned up with exports
  • - File upload error messages - clear human-readable errors for oversized or invalid files
  • - Stripe webhook nil signature fix - missing Stripe-Signature header no longer crashes the webhook handler
  • - Owner area tests - Stats module, dashboard, organisations list and Oban monitor covered
  • - Test coverage increased to approximately 75%
v0.14.0

Owner Area

14 May 2026
  • - Owner area added - super admin section accessible only to the platform owner
  • - Owner dashboard with full platform statistics - revenue, scan activity, organisation growth, health indicators, top organisations and recent payments
  • - Oban monitor - queue stats per queue, executing jobs with cancel action, failed jobs with retry action, auto-refreshes every 5 seconds
  • - Organisations list - all organisations with user count, scan count, credits balance and join date, sortable columns and pagination
  • - Active nav links in both admin and owner sidebars
  • - Owner sidebar aligned to match admin sidebar in size and mobile support
v0.13.0

Streaming and Scan UI

12 May 2026
  • - EnqueueScanWorker now streams CSV files instead of loading everything into RAM - prevents OOM kills on large lists
  • - Oban batch inserts - jobs are now enqueued in batches of 1000 instead of one by one
  • - Crash recovery - if EnqueueScanWorker fails mid-way it resumes from where it left off on retry
  • - Estimated completion time on scan show page - updates in real-time as the scan progresses
  • - Results breakdown chart after unlock - donut chart showing all 6 verification statuses
  • - Test coverage increased from 70% to 75.8%
  • - Fixed debug IO.inspect left in billing page
  • - Dependencies updated including decimal 3.1.0 security patch
v0.12.0

Quality and Email

11 May 2026
  • - Fixed white text on white background in form inputs on auth pages
  • - Stuck scan recovery - scans stuck in processing for 2+ hours automatically marked as failed
  • - Email templates redesigned with HTML and plain text versions matching dark Zoravel brand
  • - Magic link and confirmation emails now use correct domain in all environments
  • - Scan completion notifications no longer reveal results before unlock
  • - S3 production storage verified - exports generated and downloadable correctly
  • - Fly.io machine memory increased to 2048MB to prevent OOM kills on large scans
  • - Processing time estimates added to scan page during verification
  • - Large list warning added - explains SMTP rate limiting for lists over 100k
v0.11.0

Tests and Launch Prep

9 May 2026
  • - Test coverage increased from 62.6% to 70.5% - scan export controller, invitation flow, settings pages and API keys settings covered
  • - Legal pages updated with correct company address and dates - Privacy Policy, Terms & Conditions, Cookie Policy
  • - Resend configured for zoravel.com - SPF, DKIM and DMARC records verified
  • - Transactional emails now send from support@zoravel.com
  • - Phoenix updated to 1.8.6 to patch long-poll memory allocation vulnerability
v0.10.0

Verification Quality

8 May 2026
  • - Verification status system redesigned - 6 clear statuses: valid, invalid, accept_all, disposable, role_based, unknown
  • - safe_to_send boolean field added to API response and CSV export
  • - verification_reason field added explaining why each status was assigned
  • - Spam trap detection using heuristics and curated domain list
  • - Domain blacklist check for domains with poor sender reputation
  • - Unique email and duplicate counts tracked per scan
  • - Extended stats on scan results page - disposable, role-based, accept-all and duplicate counts
  • - UI badges updated for all 6 verification statuses
v0.9.0

Docs, Billing & Quality

7 May 2026
  • - API documentation page at /docs with endpoint reference, status values, check fields, error codes and code examples
  • - Stripe Customer Portal - customers can view and download invoices from billing page
  • - Invoice generation enabled on all purchases with billing address and tax ID collection
  • - Scan history page at /scans with pagination, filters by status and paid state, sorting
  • - Dashboard shows 5 most recent scans with link to full history
  • - Reusable scan list components - scan_list, scan_list_row, scan_list_card, scan_pagination
  • - AES256-GCM encryption for sensitive organisation settings using cloak_ecto
  • - Integration tests for email verification pipeline, API endpoint and scan context
  • - ExCoveralls configured for coverage reporting
v0.8.0

API, Legal & Storage

5 May 2026
  • - Terms & Conditions, Privacy Policy and Cookie Policy pages added
  • - S3 storage for production exports with gzip compression and AES256 encryption
  • - Presigned URL downloads from S3 in production
  • - Automated cleanup of orphaned and stale source CSV files every 6 hours
  • - API keys per organisation - generate, list and revoke from settings
  • - REST API endpoint POST /api/v1/verify for single email verification
  • - API authentication via Bearer token
  • - Rate limiting - 60 requests per minute per API key with 429 and Retry-After header
v0.7.0

App UI Polish & Billing

4 May 2026
  • - Emerald colour scheme across all authenticated pages - consistent with landing page
  • - Auth pages redesigned - dark background matching landing page design
  • - Admin layout with slide-in mobile drawer navigation using Alpine.js
  • - Dashboard scan list shows mobile cards on small screens with expiry info
  • - Scan show page with timing metadata - queued at, started at, finished at, processing speed
  • - Scan show page with deliverability bar and percentage breakdown after unlock
  • - New scan page shows accurate total email count from full file
  • - Reusable scan UI components extracted - scan_meta_card, scan_deliverability_bar, scan_unlock_gate, scan_downloads
  • - Settings split into three tabs - Team, Invitations, Notifications - each with its own URL
  • - Billing page redesigned with pack details, price per 1k, how credits work section
  • - Payment history with mobile-friendly card layout
  • - Global format_number helper available across all templates
  • - Timing fields added to scans - queued_at, started_at, finished_at, error_message
v0.6.0

UI/Design & Landing Page

3 May 2026
  • - Modern dark landing page with hero, terminal demo, features, pricing and FAQ sections
  • - Zoravel logo designed - icon with pulse line symbol
  • - Reusable public_nav and public_footer layout components
  • - Public changelog page at /changelog with timeline layout
  • - Admin layout redesigned - fixed sidebar with icons on desktop
  • - Mobile slide-in drawer navigation with Alpine.js
  • - Dashboard stats cards - credits, total scans, emails verified
  • - Theme toggle repositioned to top right on desktop and mobile top bar
  • - SEO meta tags and OG/Twitter card tags added to root layout
  • - Sitemap at /sitemap.xml
v0.5.0

SMTP, Infrastructure & Organisation Settings

2 May 2026
  • - SMTP handshake check - verifies whether a mailbox actually exists without sending email
  • - Catch-all domain detection - flags domains that accept all addresses as risky
  • - Plug.Static updated to use only_matching for correct digest file serving
  • - Umami analytics added to production layout
  • - Export files cleaned up automatically after 72 hours via hourly cron job
  • - Payment history recorded on every successful Stripe checkout
  • - Payment history table on billing page
  • - Role-based access control - owner and member roles
  • - Team invitation flow - invite by email with 7-day expiry token
  • - Organisation settings page with team members and pending invitations
  • - Scan completion notifications via email, Slack, Teams, and webhook
v0.4.0

Email Verification

2 May 2026
  • - CSV upload with automatic email column detection and 10-row preview
  • - Full email verification pipeline - syntax, DNS/MX, disposable and role-based detection
  • - Real-time scan progress via PubSub - no page refresh needed
  • - Results written directly to disk, not database - scales to millions of emails
  • - Global DNS cache shared across all scans - 4x speedup on repeated domains
  • - Unlock flow - scan is free, credits deducted only when downloading results
  • - Export files contain all original CSV columns plus verification status columns
  • - Admin dashboard shows live scan progress and status
v0.3.0

Billing

30 April 2026
  • - Credit balance added to organisations
  • - Stripe Checkout integration for one-time credit pack purchases
  • - Stripe webhook handler with signature verification
  • - Billing page with credit balance and pack selection
v0.2.0

Auth & Organizations

30 April 2026
  • - User authentication - register, log in, log out, reset password
  • - Organisations with key-value settings table
  • - Onboarding flow for new users
  • - App and admin layouts
v0.1.0

Project Setup

29 April 2026
  • - Phoenix project initialised with PostgreSQL and binary IDs
  • - Fly.io deployment configured with GitLab CI/CD pipeline
  • - Coming soon page live on zoravel.com