<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet type="text/xsl" href="/feed.xsl"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Bots on jvalol</title><link>https://jva.lol/tags/bots/</link><description>Recent content in Bots on jvalol</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 15 Sep 2026 12:15:00 -0600</lastBuildDate><atom:link href="https://jva.lol/tags/bots/index.xml" rel="self" type="application/rss+xml"/><item><title>Ninety-seven ghosts and one human</title><link>https://jva.lol/weblog/ninety-seven-ghosts-and-one-human/</link><pubDate>Tue, 15 Sep 2026 12:15:00 -0600</pubDate><guid>https://jva.lol/weblog/ninety-seven-ghosts-and-one-human/</guid><description>A month of bot pressure, absorbed silently by a door that lies to robots, and the metric I rebuilt to count only people.</description><content:encoded>&lt;p&gt;I have metrics to keep an eye on engagement on &lt;a href="https://popsicleboat.com"&gt;PopsicleBoat&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I work hard to keep the comment system clean from spam and bots, a big part of the core ethos of what I&amp;rsquo;m trying to do there.&lt;/p&gt;
&lt;p&gt;Last week I read a number in the metrics that looked bad, or false, or something felt off.&lt;/p&gt;
&lt;p&gt;I have a system where posts have a &amp;ldquo;parked&amp;rdquo; state. There&amp;rsquo;s an automated system for moving those parked posts to actual publication, with a few strategies to prevent automated systems. A human has to be involved. Without the friction you usually see, identifying which images have bikes or whatever.&lt;/p&gt;
&lt;p&gt;Ok, so I&amp;rsquo;m checking the numbers over the last week or so. 97 parked posts, only 1 made it to publication.&lt;/p&gt;
&lt;p&gt;I guess it&amp;rsquo;s kind of cool bots have found the site and that my detection system is working.&lt;/p&gt;
&lt;p&gt;Still, for the numbers, that&amp;rsquo;s just noise. Not signal.&lt;/p&gt;
&lt;p&gt;In a way, the shape of those numbers was the tell. These weren&amp;rsquo;t from humans, these were from bots. The parked posts came in at a steady, almost predictable, rate.&lt;/p&gt;
&lt;p&gt;Bots crawl the web POSTing into any form they find. PopsicleBoat is many things, one of the main things it is (a comment form) attracts scrapers, bots, etc., so those bots were happily just stuffing it.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t check the metrics every day, but my interest was piqued by seeing 97 parked comments. So I looked more into it.&lt;/p&gt;
&lt;p&gt;Because I refuse to add captchas and instead I&amp;rsquo;m designing the solution to the problem that one (sort of) solves, I added a honeypot. Bots think they&amp;rsquo;re submitting a form because it shows up to them, but not to human users. Easy peasy. When a submission fills out a field I know is invisible to human readers, I know it&amp;rsquo;s a bot. Classic honeypot.&lt;/p&gt;
&lt;p&gt;&lt;video autoplay loop muted playsinline preload="metadata" class="flavor" src="https://jva.lol/weblog/ninety-seven-ghosts-and-one-human/bait.mp4" aria-label="Max, in Mad Max: Fury Road, squinting out the windshield and saying that&amp;rsquo;s bait"&gt;&lt;/video&gt;&lt;span class="flavor-caption"&gt;The field only a bot can see and think is real.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I have other strategies in place as well, no need to elaborate. Security by obscurity is the weakest, but also a valid first layer strategy position. (What I&amp;rsquo;m saying is I won&amp;rsquo;t be documenting my secrets.)&lt;/p&gt;
&lt;p&gt;So bots type their garbage, it gets parked, they think they succeeded but I&amp;rsquo;ve got them flagged. I also have them garbage collected every day.&lt;/p&gt;
&lt;p&gt;&lt;video autoplay loop muted playsinline preload="metadata" class="flavor" src="https://jva.lol/weblog/ninety-seven-ghosts-and-one-human/flytrap.mp4" aria-label="A Venus flytrap snapping shut on a frog"&gt;&lt;/video&gt;&lt;span class="flavor-caption"&gt;It thinks it posted! Haha. Sucker.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This results in (so far) 0 junk accounts and 0 garbage comments on anyone&amp;rsquo;s page. The parked junk is cleared out daily.&lt;/p&gt;
&lt;p&gt;The only reason I realized what was happening was because I had metrics set up, know a thing or two about the modern internet, and connected the dots.&lt;/p&gt;
&lt;p&gt;I will illuminate a &lt;em&gt;little&lt;/em&gt; bit, though. For an unsigned in PopsicleBoat user, it looks like this: A reply on its way in passes through three stages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Parked&lt;/code&gt; (anyone and anything can do this) -&amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Continued&lt;/code&gt; (a signed-in person carrying their parked reply) -&amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Posted&lt;/code&gt; (published on the thread, and from there it syndicates back to the blog it belongs to).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For already signed in users, it basically skips the &lt;code&gt;Parked&lt;/code&gt; and &lt;code&gt;Continued&lt;/code&gt; stages. You&amp;rsquo;re already verified as a &lt;em&gt;meat&lt;/em&gt; popsicle, and not as a &lt;em&gt;silicon&lt;/em&gt; popsicle. (see what I did there?)&lt;/p&gt;
&lt;p&gt;This keeps junk out and things clean without being a huge PITA for users. No captchas, no tracking, all free.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t know about you, but the internet has felt to me a bit much for a long time because of reasons like ^. I think this is a better solution without taxing the user beyond a bit of setup for your site.&lt;/p&gt;
&lt;p&gt;Thoughts welcome below (or any of the ways I&amp;rsquo;m reachable)&lt;/p&gt;</content:encoded></item></channel></rss>