﻿<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="text" xml:lang="en">Age Verification</title>
  <link type="application/atom+xml" href="https://d.moonfire.us/tags/age-verification/atom.xml" rel="self" />
  <link type="text/html" href="https://d.moonfire.us/tags/age-verification/" rel="alternate" />
  <updated>2026-04-15T17:42:52Z</updated>
  <id>https://d.moonfire.us/tags/age-verification/</id>
  <author>
    <name>D. Moonfire</name>
  </author>
  <rights>Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International</rights>
  <entry>
    <title>Leicmin</title>
    <link rel="alternate" href="https://d.moonfire.us/blog/2026/04/04/leicmin/" />
    <updated>2026-04-04T05:00:00Z</updated>
    <id>https://d.moonfire.us/blog/2026/04/04/leicmin/</id>
    <category term="development" scheme="https://d.moonfire.us/categories/" label="Development" />
    <category term="leicmin" scheme="https://d.moonfire.us/tags/" label="Leicmin" />
    <category term="covid" scheme="https://d.moonfire.us/tags/" label="Covid" />
    <category term="fedran" scheme="https://d.moonfire.us/tags/" label="Fedran" />
    <category term="age-verification" scheme="https://d.moonfire.us/tags/" label="Age Verification" />
    <category term="300-weeks" scheme="https://d.moonfire.us/tags/" label="300 Weeks" />
    <category term="mfgames-nitride" scheme="https://d.moonfire.us/tags/" label="MfGames.Nitride" />
    <category term="mfgames-writing" scheme="https://d.moonfire.us/tags/" label="MfGames Writing" />
    <category term="patreon" scheme="https://d.moonfire.us/tags/" label="Patreon" />
    <category term="subscribe-star" scheme="https://d.moonfire.us/tags/" label="Subscribe Star" />
    <category term="allegro" scheme="https://d.moonfire.us/tags/" label="Allegro" />
    <category term="large-language-model" scheme="https://d.moonfire.us/tags/" label="Large Language Model" />
    <summary type="html">I spent six months working on a flight or fight response and created a self-hosted web application to calm it down.
</summary>
    <content type="html">&lt;p&gt;I haven't posted in three months. That isn't to nothing has been happening, only that I was so focused on the &amp;ldquo;now&amp;rdquo; that I didn't really have a chance for any retrospection (which is effectively what a lot of my posts are) or idle thoughts (which cover most of the rest). Part of that is how my thoughts work, I withdraw from everything when I'm struggling with problems.&lt;/p&gt;
&lt;p&gt;There is always the usual family crises (we lost a family member last week and there is a good chance we're going to lose a close one &amp;ldquo;soon&amp;rdquo;), work pressure, and the difficulties of being a parent.&lt;/p&gt;
&lt;h2&gt;Age Verification&lt;/h2&gt;
&lt;p&gt;On top of that, the various news about &lt;a href="https://action.freespeechcoalition.com/age-verification-bills/"&gt;age verification laws&lt;/a&gt;, the casual tossing around of felonies and crippling monetary fines, and the rise of privacy-busting legislation were hitting my communities. Too many legislation were salivating at the openings that the Texas got with the Supreme Court ruling, the idea of forcing all cases to be dragged into the state with the most restrictions, and generally finding Machiavellian ways to force creators from closing up shop without explicitly saying that porn was illegal (because it isn't).&lt;/p&gt;
&lt;p&gt;I know &lt;a href="https://fedran.com"&gt;Fedran&lt;/a&gt; is &amp;ldquo;mostly&amp;rdquo; excluded from most of those age verification laws. There are a million words on the site and less than 10% of them are what I would consider &amp;ldquo;adult&amp;rdquo; or graphic. I could easily say it isn't pornographic, but then Tennessee's &lt;a href="https://wapp.capitol.tn.gov/apps/BillInfo/Default?BillNumber=HB1614&amp;amp;GA=113"&gt;Protect Tennessee Minors Act&lt;/a&gt; got put into effect and it appears to &lt;a href="https://ondato.com/blog/tennessee-age-verification/"&gt;apply to my fiction&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It was that law that triggered a &amp;ldquo;fight or flight&amp;rdquo; response. I seriously considered just closing down the shop and giving up writing. I was already in the middle of the burnout from my &lt;a href="/blog/2021/03/17/three-hundred-weeks/"&gt;300 consecutive week&lt;/a&gt; challenge and my struggles after Covid. It felt like an easy escape, just cut off that part of my life.&lt;/p&gt;
&lt;p&gt;But then I didn't. I'm terrible at giving up, I mean that was pretty much the major thread throughout &lt;a href="/tags/sand-and-blood/"&gt;Sand and Blood&lt;/a&gt;, &lt;a href="/tags/sand-and-ash/"&gt;Sand and Ash&lt;/a&gt;, and &lt;a href="/tags/sand-and-bone/"&gt;Sand and Bone&lt;/a&gt;. That part is part of me. I might take a while to get there, but I don't give up easily. I also saw other creators who were also struggling with the same problems, but they were clearly in the arenas the laws were targeting. Creators who were writing things that were more erotic (it's never about violence, which I universally consider more disgusting than sexuality).&lt;/p&gt;
&lt;p&gt;So the flight (giving up) turned into fight (doing something). I already knew that I wasn't going to be great about anything I wrote, but it was something I could do. I have to be honest, I didn't come out of Covid unscathed and I'm painfully aware of how much I struggle with things that I found pleasurable less than ten years ago.&lt;/p&gt;
&lt;p&gt;Also, quite a few years before all this, I had an idea of creating a self-hosted site that could coordinate various subscription/patron services. Basically, taking the supporter badges from forums, the ability to have &lt;a href="/tags/patreon/"&gt;Patreon&lt;/a&gt; or &lt;span class="missing-link" data-path="/tags/ko-fi/"&gt;Ko-Fi&lt;/span&gt; supporters (or for a while, cryptocurrency), and be able to control access to sites. Ideally, in a manner that would not require exposing personal information (because no one needs to know those details). And no gamification or social interactions, just something between a creator and someone who likes their work.&lt;/p&gt;
&lt;p&gt;That also would give me the ability to integrate age verification systems or even geo-blocking or VPN-blocking (there were a few bills that required periodic verification of age or the need to ban all VPN usage) in a central place.&lt;/p&gt;
&lt;p&gt;Would it be helpful? Maybe. But if anything, I could implement something to protect &lt;em&gt;my&lt;/em&gt; ass and maybe it would help others.&lt;/p&gt;
&lt;h2&gt;Leicmin&lt;/h2&gt;
&lt;p&gt;And that ended up being &lt;a href="/tags/leicmin/"&gt;Leicmin&lt;/a&gt; (more detail on the &lt;a href="https://mfgames.com/leicmin/"&gt;development site&lt;/a&gt; and the &lt;a href="https://mfgames.com/leicmin/"&gt;forge&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Well, multiple iterations of Leicmin. I started with trying to implement a C# version since I thought I was really good at the language and it would be &amp;ldquo;easy&amp;rdquo; to bang up something.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I didn't do it because it was easy. I did it because I thought it was easy.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After a few months, I realized that I had too many things rattling in my head, and the ideas that I toyed with for years thinking they would make a great system (event sourcing, automated auditing, API-first) ended up crumbling once I started to do significant things. I spent more time fighting libraries and tools than I was moving forward.&lt;/p&gt;
&lt;p&gt;Somewhere in December, I realized it wasn't going to work out so I decided to burn it down and start from scratch. This time, I jettisoned most of the fancy ideas and went with something simple: a website that required no Javascript, had no API, and was about as plain and simple as I could make it. I also decided to go with Rust, but avoided the fancier front ends and went with straight, old-school templating.&lt;/p&gt;
&lt;p&gt;There were some things that I wasn't going to get rid of: there are &lt;a href="https://github.com/jetify-com/typeid"&gt;type-safe identifiers&lt;/a&gt; everywhere, almost everything is CLI first, it is based on Postgres, and there are almost no &lt;a href="https://xkcd.com/974/"&gt;general solutions&lt;/a&gt; anywhere.&lt;/p&gt;
&lt;p&gt;And I got progress. I could see things moving forward and I didn't feel like I was writing myself into a corner. True, the C# attempt taught me a lot, but it was really nice seeing slow but steady progress to something that works. I felt bad that it wasn't &amp;ldquo;fancy&amp;rdquo; or more capable but I was happy that I was creating something I thought could benefits others.&lt;/p&gt;
&lt;p&gt;My goal was the end of February, but it ended up being the end of March, that I got something with a very simple functionality.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Folks could log in and change passwords&lt;/li&gt;
&lt;li&gt;They could connect Patreon and Subscribe Star (a feature requested online)&lt;/li&gt;
&lt;li&gt;They could set up a password that could be used basic authentication&lt;/li&gt;
&lt;li&gt;The creator could export a &lt;code&gt;.htpasswd&lt;/code&gt; file, hook it up to a static site, and be able to authenticate&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Through that, I could get a &amp;ldquo;basic&amp;rdquo; age verification since Patreon and Subscribe Star both do age verification on their sides. That means I could mark my patreon as &amp;ldquo;mature&amp;rdquo; (I haven't done that yet), wire up my site in &lt;a href="/tags/mfgames-nitride/"&gt;MfGames.Nitride&lt;/a&gt; to use it, and have what I need to quell that &amp;ldquo;fight&amp;rdquo; response in the back of my head.&lt;/p&gt;
&lt;p&gt;And someone (the person who asked for Subscribe Star) is already using it. And reporting bugs and defects as they onboard their subscribers onto it. Which is exciting, because I rarely see someone actually using my tools (Nitride and &lt;a href="/tags/mfgames-writing/"&gt;MfGames Writing&lt;/a&gt; mostly).&lt;/p&gt;
&lt;h2&gt;Going Slow&lt;/h2&gt;
&lt;p&gt;Some of the painful parts is that progress was slow. I've been getting a lot of pressure from work to embrace &lt;a href="/tags/large-language-model/"&gt;large language models&lt;/a&gt; but I didn't want to do that with Leicmin. I want to lay down the code, to come up with the ideas, and work through them because I cherish those little insights when I find some pattern I never thought about before.&lt;/p&gt;
&lt;h2&gt;Protecting Minors&lt;/h2&gt;
&lt;p&gt;I'm not against the idea of limiting minors from accessing content. What I don't like is how law makers was going about it, since little of what they are producing is about protecting children, but very clearly attacking something they consider immoral.&lt;/p&gt;
&lt;p&gt;(I also think it should be something parents should decide on, not law makers making decisions for everyone.)&lt;/p&gt;
&lt;p&gt;Even listening to them talk about it, it was just another attack on people they don't like, they just use minors as their shield to defend their own biases.&lt;/p&gt;
&lt;p&gt;That also means as I have the bandwidth, I'll find alternatives to handing over personal information to for-profit companies. Or find a way not to need a subscription service. I read about and bookmarked a couple promising alternatives, but they aren't quite there yet.&lt;/p&gt;
&lt;h2&gt;Going Forward&lt;/h2&gt;
&lt;p&gt;There are a ton of things that still need to be done before I consider it &amp;ldquo;done&amp;rdquo; in terms of user experience and usability.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Light theme was the first thing I was asked about&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Better authentication options&lt;/li&gt;
&lt;li&gt;Emails&lt;/li&gt;
&lt;li&gt;More age verification options&lt;/li&gt;
&lt;li&gt;More geo blocking options&lt;/li&gt;
&lt;li&gt;Auditing compliance (okay, that one is me)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://src.mfgames.com/leicmin/leicmin/issues"&gt;Many more&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On my personal side:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set up an instance of my own&lt;/li&gt;
&lt;li&gt;Go through my Fedran stories and mark the &amp;ldquo;adult&amp;rdquo; ones&lt;/li&gt;
&lt;li&gt;Set up the instance to put a password on the adult stories&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And, keep slowly moving forward. It was almost immediately after I was able to lean back and say &amp;ldquo;I got the MVP&amp;rdquo; that I was able to relax. Even not setting it up myself (which I will do), the knowledge that I had a clear path forward to handle that fight or flight was a major relief.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Just keep swimming.&lt;/p&gt;
&lt;p&gt;&amp;mdash;Dory, &lt;em&gt;Finding Nemo&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Allegro&lt;/h2&gt;
&lt;p&gt;Speaking of writing, I'm slowly submitting &lt;a href="/tags/allegro/"&gt;Allegro&lt;/a&gt; through the writing group. Of the alpha readers, about half of them came back with some good feedback and half of them never finished. It probably means that it will end up as well as &lt;a href="/tags/flight-of-the-scions/"&gt;Flight of the Scions&lt;/a&gt;, but I'm still going to try publishing the best book I can.&lt;/p&gt;
</content>
  </entry>
</feed>
