<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: zhibi</title>
    <description>The latest articles on DEV Community by zhibi (@qjjy2004).</description>
    <link>https://dev.to/qjjy2004</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4000760%2Febd1614b-b845-4335-84dc-300aa281580c.png</url>
      <title>DEV Community: zhibi</title>
      <link>https://dev.to/qjjy2004</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/qjjy2004"/>
    <language>en</language>
    <item>
      <title>I Built a Self-Evolving GEO Content Detector in Python with Zero Dependencies</title>
      <dc:creator>zhibi</dc:creator>
      <pubDate>Wed, 24 Jun 2026 14:36:14 +0000</pubDate>
      <link>https://dev.to/qjjy2004/i-built-a-self-evolving-geo-content-detector-in-python-with-zero-dependencies-46h0</link>
      <guid>https://dev.to/qjjy2004/i-built-a-self-evolving-geo-content-detector-in-python-with-zero-dependencies-46h0</guid>
      <description>&lt;p&gt;I Built a Self-Evolving GEO Content Detector in Python with Zero Dependencies&lt;/p&gt;

&lt;h2&gt;
  
  
  Who I Am
&lt;/h2&gt;

&lt;p&gt;I run ZhiBi, a seismic bracing company based in Hefei, China. 12 years in this field. Not a software engineer by trade. But over the past year, I watched our content marketing playbook fall apart.&lt;/p&gt;

&lt;p&gt;The playbook was simple: write articles targeting keywords, rank on Google, get traffic. It worked for years. Then AI search arrived — ChatGPT, Perplexity, Google AI Overviews. Suddenly, ranking did not matter if the AI summary never mentioned your brand.&lt;/p&gt;

&lt;p&gt;I needed a tool to check whether my content would be cited by AI &lt;em&gt;before&lt;/em&gt; I hit publish. Nothing existed. So I built one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Rearview Mirrors vs Headlights
&lt;/h2&gt;

&lt;p&gt;Every GEO tool on the market works like a rearview mirror. They run AI searches and check: "Was my brand mentioned?" After you publish. After the AI already decided. Too late.&lt;/p&gt;

&lt;p&gt;What I wanted was a headlight. Score content before publication. Tell me &lt;em&gt;this paragraph will not be cited because it lacks a verifiable data point and opens with a defensive preamble the AI will skip.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So here is the core difference. Monitoring tools answer "was I mentioned?" GEO Auditor answers "will I be mentioned?" One looks backward, one looks forward. That is the whole thesis.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GEO Auditor&lt;/strong&gt; (github.com/qjjy2004/geo-auditor) — a CLI tool that scores content across 14 dimensions of AI citability, plus a 6-signal anti-AI-voice engine. Zero dependencies. Single file.&lt;/p&gt;

&lt;p&gt;Run it on a draft:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 geo_auditor.py &lt;span class="nt"&gt;--file&lt;/span&gt; draft.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Conclusion-First  8/10  Missing direct answer in first line
Data Anchors      6/10  Add a number, standard number, or price
EEAT              4/10  No certification, date, or third-party source
...
Overall: C+ (65/100)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each dimension tells you exactly what to fix. No vague advice. No "improve your content quality." Actionable, specific, one dimension at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Self-Evolution: Detector Learns, Agent Inherits
&lt;/h2&gt;

&lt;p&gt;Here is where it gets different from everything else. The detector is not static.&lt;/p&gt;

&lt;p&gt;Every time you run &lt;code&gt;--compare old.md new.md&lt;/code&gt;, it logs which dimensions improved and by how much. After 5+ rewrites, &lt;code&gt;--evolve&lt;/code&gt; analyzes the journal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PROVEN FIXES:
  Conclusion-First: 100% success rate, +8.0 avg gain
  -&amp;gt; Auto-apply: "Open with direct answer."

STALE (do not waste time):
  Anti-AI Voice: 0% success rate
  -&amp;gt; This dimension is content-intrinsic. Focus elsewhere.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The detector adapts to your actual rewriting ability. If you can never improve a dimension, it stops penalizing you. If you consistently fix something, it auto-applies the pattern. The more you use it, the smarter it gets about &lt;em&gt;your&lt;/em&gt; writing.&lt;/p&gt;

&lt;p&gt;Export the evolved rules as an Agent system prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 geo_auditor.py &lt;span class="nt"&gt;--agent-prompt&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ~/.geo-auditor/writing_rules.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your AI writing assistant now inherits everything the detector learned. The loop: detect -&amp;gt; rewrite -&amp;gt; compare -&amp;gt; evolve -&amp;gt; agent prompt.&lt;/p&gt;

&lt;p&gt;The Anti-AI Voice module strips 50+ known AI vocabulary words — "delve", "underscores", "pivotal", "fostering" — and 7 RLHF voice patterns identified by Guo et al. (2025, arXiv:2605.19516). These are the exact tells that make AI-generated content sound manufactured.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Compares
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GEO Auditor vs Monitoring Tools (Semrush GEO, Otterly, KIME)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Monitoring tools check whether your brand appeared in AI search results — &lt;em&gt;after&lt;/em&gt; publishing. By the time you get that report, the content is already live. GEO Auditor checks citability &lt;em&gt;before&lt;/em&gt; publishing. Different question. Different timing. Different value.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GEO Auditor vs AI Detectors (GPTZero, Originality.ai, GLTR)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI detectors ask "was this written by an LLM?" — a question about origin. GEO Auditor asks "can an LLM cite this?" — a question about citability. Mitchell et al. (2023, doi:10.48550/arXiv.2301.11305) showed that LLM detection accuracy degrades significantly on non-English text, which is one reason GEO Auditor focuses on structural and lexical signals rather than perplexity-based detection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GEO Auditor vs Manual Editing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A human editor can spot bad writing. But can they tell you that your keyword density is 40% below the minimum threshold for AI topic extraction? Can they track whether removing defensive openers consistently improves scores across 20 drafts? The detector does not replace editing — it adds a layer of measurement that did not exist before.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Zero Dependencies
&lt;/h2&gt;

&lt;p&gt;Drop it on any machine and run it. No &lt;code&gt;pip install&lt;/code&gt;. No virtual environment. No Docker. Python 3.7+ stdlib only — which ships on every Mac and Linux machine.&lt;/p&gt;

&lt;p&gt;The entire detection engine runs offline. Zero network calls. Your content never leaves your machine. This matters when auditing sensitive drafts: pricing pages, client proposals, pre-launch product pages. Compare this to cloud-based monitoring tools where every draft goes through third-party infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results From Dogfooding
&lt;/h2&gt;

&lt;p&gt;A draft about seismic bracing installation: 43/100 -&amp;gt; 72/100 after three guided rewrites. That is a 67% improvement.&lt;/p&gt;

&lt;p&gt;The final version got cited by DeepSeek when searching for "seismic bracing acceptance criteria" — exactly the kind of citation GEO optimization targets.&lt;/p&gt;

&lt;p&gt;What the tool caught that I would have missed: missing GB 50981 and TCECS 420 standard numbers, a defensive opening paragraph AI summarizers skip, keyword density 40% below threshold. Each fix was a single dimension. Actionable, not vague.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: Is my content sent anywhere?&lt;/strong&gt;&lt;br&gt;
A: No. Zero network calls. Everything runs locally. No API keys, no telemetry, no analytics, no cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: GPTZero vs GEO Auditor — what is the difference?&lt;/strong&gt;&lt;br&gt;
A: GPTZero detects whether text was AI-generated. GEO Auditor measures whether AI search engines will cite your content. Different problem, different signal set. One checks origin, the other checks citability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Semrush GEO vs GEO Auditor — when do I use which?&lt;/strong&gt;&lt;br&gt;
A: Use Semrush GEO to track brand visibility in AI answers over time (monitoring). Use GEO Auditor to check individual drafts before publishing (detection). They answer different questions at different stages. They are complementary, not competitors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Why zero dependencies?&lt;/strong&gt;&lt;br&gt;
A: You should be able to audit content before you even commit the file, not after deploying an entire monitoring stack. Python 3.7+ is everywhere. That is the target.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Now
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/qjjy2004/geo-auditor.git
&lt;span class="nb"&gt;cd &lt;/span&gt;geo-auditor
python3 geo_auditor.py &lt;span class="nt"&gt;--file&lt;/span&gt; your-draft.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No-install web version: &lt;a href="https://zhibi.xyz/geo" rel="noopener noreferrer"&gt;zhibi.xyz/geo&lt;/a&gt; — paste your draft, get a score in seconds.&lt;/p&gt;

&lt;p&gt;I built this for my own content pipeline. If it helps you, star the repo on GitHub. If something is broken, open an issue — I respond to every one. If you have ideas for new dimensions or detection signals, I want to hear them.&lt;/p&gt;

&lt;p&gt;This is a side project from someone who is not a developer by trade. If something is janky, that is why. But the detection engine works. Try it on your next draft. You might be surprised what a 46/100 looks like before you fix it.&lt;/p&gt;

&lt;p&gt;— ZhiBi, Hefei, June 2026&lt;/p&gt;

</description>
      <category>ai</category>
      <category>marketing</category>
      <category>python</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
