Vanilla JavaScript Projects

Project 98, SEO and site tools

Spam-proof Contact Form

Stop most form spam without making people pick traffic lights. Bots fall into invisible traps, and real people never notice.

Main API
Honeypot + timing
Extra
Content rules
Dependencies
None
Your browser
Checking

Send a message

Fill in the form like a person, or press Act like a bot. The panel shows every check and the spam score.

Spam checks

    Spam score 0 of 100

    Waiting for a message

    How it works

    1. A trap only bots seeThe website field is moved far off screen and hidden from screen readers. People never fill it in, but many bots fill every field.
    2. Humans are not instantReal people need several seconds to type a name, email and message. Forms sent faster than four seconds are suspicious.
    3. Score first, then decideEach failed check adds points. High scores are blocked, middle scores are sent but marked for review, so real people are rarely lost.
    <div style="position:absolute;left:-10000px" aria-hidden="true">
      <input name="website" tabindex="-1" autocomplete="off">
    </div>
    
    const started = Date.now();
    form.onsubmit = (e) => {
      let score = 0;
      if (form.website.value) score += 60;                 // honeypot filled
      if (Date.now() - started < 4000) score += 40;        // too fast
      if ((msg.match(/https?:\/\//g) || []).length > 2) score += 30;
      if (score >= 50) { e.preventDefault(); /* drop silently */ }
    };