Honeypots, rate limits, duplicate and repetition checks, and an IP blocklist: how I stopped contact form spam in Laravel without adding a CAPTCHA.