Your suppression list belongs in the mailer, not the call site
Every "we accidentally emailed someone who unsubscribed" incident has the same root cause: the check lived in the code that sends, and one send path forgot it.
17 Aug 2026
Field notes
Practical notes on building, securing, and operating software when the details actually matter.
Every "we accidentally emailed someone who unsubscribed" incident has the same root cause: the check lived in the code that sends, and one send path forgot it.
17 Aug 2026
Validation fails, Laravel returns a 302, and the visitor sees "Service temporarily unavailable" instead of "email is required". Here is why, and what to do.
10 Aug 2026
The command that rebuilds the database from nothing is the one command every new machine runs first, and it is the one nobody runs again after the first month.
20 Jul 2026