A campaign's recipient list pages both ways, with totals, at any size

FeatureEmailService
Shipped
September 12, 2026 at 10:23 PM UTC
Author
Kamo
Commit
5a6f27f

The list was already read a page at a time, but only forwards, as an endless scroll with no total — and a status filter found its rows by walking the list in address order, which for a dozen failures among a billion recipients reads the billion. - /recipients/page takes before= and last= as well as after=: previous reads the address index backwards from the first row shown, and the last page reads backwards from the end — one seek either way, never a walk. - Each page carries its total, taken from the campaign's counters rather than by counting rows; a search counts to 10,000 and then says so. - A status with few rows is read through the (campaign, status) index and sorted; a common one along the address order. The same counters decide.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing