Modules
Plugin-based spam scanner. Scores text against many small heuristic filters and accumulates a total score. A score of 1.0+ is typically considered spam.
Allow-list of domains whose URLs should not be penalised by URL-aware filters.
Behaviour every filter must implement.
The mutable-feeling accumulator for a scan. Holds the original text,
the running score, and per-filter score totals in match_scores.
String helpers used by filters. Elixir is immutable so remove_and_count/2
returns {count, new_text} instead of mutating in place like Ruby's bang form.