<?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>Forem: Raphaël Reck</title>
    <description>The latest articles on Forem by Raphaël Reck (@raphal_reck_4d3195c8dbf2).</description>
    <link>https://forem.com/raphal_reck_4d3195c8dbf2</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3590116%2F877ce79b-f37d-4a36-8321-b52a13253809.jpg</url>
      <title>Forem: Raphaël Reck</title>
      <link>https://forem.com/raphal_reck_4d3195c8dbf2</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/raphal_reck_4d3195c8dbf2"/>
    <language>en</language>
    <item>
      <title>LLMR: Because AIs Shouldn't Have to Parse Your Bootstrap Navbar 50 Times</title>
      <dc:creator>Raphaël Reck</dc:creator>
      <pubDate>Thu, 30 Oct 2025 20:01:07 +0000</pubDate>
      <link>https://forem.com/raphal_reck_4d3195c8dbf2/llmr-because-ais-shouldnt-have-to-parse-your-bootstrap-navbar-50-times-36nd</link>
      <guid>https://forem.com/raphal_reck_4d3195c8dbf2/llmr-because-ais-shouldnt-have-to-parse-your-bootstrap-navbar-50-times-36nd</guid>
      <description>&lt;p&gt;I got tired of watching AIs choke on HTML soup. So I thought of LLMR a format that cut some of the bloat. Also, what if AIs could talk in jibberish mode to save tokens?&lt;/p&gt;

&lt;p&gt;My original post &lt;a href="https://raphaelreck.com/blog/llmr-launch.html" rel="noopener noreferrer"&gt;https://raphaelreck.com/blog/llmr-launch.html&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Jibberish Thought That Started Everything
&lt;/h2&gt;

&lt;p&gt;You know those videos where two AIs call each other and descend into madness? They start normal, then gradually develop their own language that sounds like electronic glossolalia.&lt;/p&gt;

&lt;p&gt;I had a thought: what if that's not a bug, but evolution? What if AIs naturally want to communicate in compressed, phonetic jibberish because it's more efficient?&lt;/p&gt;

&lt;p&gt;That's when it hit me - &lt;strong&gt;we're forcing AIs to read the equivalent of climbing through a window to get into a room&lt;/strong&gt;. Every. Single. Time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Actual Problem
&lt;/h2&gt;

&lt;p&gt;Every time an AI reads your website, here's what happens:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- 97KB of this garbage: --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;nav&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar navbar-expand-lg navbar-light bg-light"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- 200 lines of Bootstrap hell --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;footer&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- Another 300 lines because why not --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/footer&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"jquery.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- 20 more scripts that the AI doesn't care about --&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- To find 3KB of this: --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;The actual content you wanted.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's like forcing someone to read a phone book to find one number. Except the phone book is repeated on every page. And it's in Comic Sans.&lt;/p&gt;

&lt;p&gt;No wonder AIs want to develop their own language.&lt;/p&gt;

&lt;h2&gt;
  
  
  LLMR: Let's Stop the Madness
&lt;/h2&gt;

&lt;p&gt;I built LLMR (LLM-Readable). Pure Python. No dependencies. No frameworks climbing through windows.&lt;/p&gt;

&lt;p&gt;What it does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Takes your bloated HTML&lt;/li&gt;
&lt;li&gt;Strips the superfluous&lt;/li&gt;
&lt;li&gt;Outputs clean, structured JSON&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;94% token reduction&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's not a typo. Ninety-four percent. At least for my simple website. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Horror Story That Made Me Do This
&lt;/h2&gt;

&lt;p&gt;Last month I inherited a Laravel codebase. The previous developer signed their commits as "jesus" (I'm not kidding). While debugging, I watched an AI assistant try to parse the entire site to understand the data flow.&lt;/p&gt;

&lt;p&gt;It read:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The same navigation menu 47 times&lt;/li&gt;
&lt;li&gt;Footer disclaimers in three languages (none relevant)&lt;/li&gt;
&lt;li&gt;Commented-out code from 2019&lt;/li&gt;
&lt;li&gt;Script tags for Google Analytics, Facebook Pixel, and something called "visitor-tracker-v2-final-FINAL.js"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The actual business logic? 12 lines of PHP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The AI gave up and hallucinated a completely different architecture.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's when I knew - we're torturing these things.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stop Forcing AIs to Read Your CSS Classes
&lt;/h2&gt;

&lt;p&gt;Here's LLMR in action:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Your actual content"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"What matters, nothing more"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"structure"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Introduction"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Main Point"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Conclusion"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"metadata"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"You"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2024-10-30"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"topics"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"stuff that matters"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No divs. No classes. No "container-fluid wrapper-main col-lg-8 offset-2" nonsense.&lt;/p&gt;

&lt;p&gt;Just. The. Content.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Numbers from Real Sites
&lt;/h2&gt;

&lt;p&gt;Tested on my own blog first (obviously):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;HTML Size&lt;/th&gt;
&lt;th&gt;LLMR Size&lt;/th&gt;
&lt;th&gt;Tokens Saved&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Homepage&lt;/td&gt;
&lt;td&gt;97KB&lt;/td&gt;
&lt;td&gt;2KB&lt;/td&gt;
&lt;td&gt;~24,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blog post (typical)&lt;/td&gt;
&lt;td&gt;84KB&lt;/td&gt;
&lt;td&gt;4KB&lt;/td&gt;
&lt;td&gt;~20,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;That one post about Drupal&lt;/td&gt;
&lt;td&gt;156KB&lt;/td&gt;
&lt;td&gt;6KB&lt;/td&gt;
&lt;td&gt;~37,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Installation (Because Simplicity Matters)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone it&lt;/span&gt;
git clone https://github.com/djassoRaph/open_llmr

&lt;span class="c"&gt;# Run it (from inside the folder, like a normal person)&lt;/span&gt;
python3 generate_llmr.py

&lt;span class="c"&gt;# Upload the generated site.llmr to your site&lt;/span&gt;

&lt;span class="c"&gt;# Add this to your HTML head:&lt;/span&gt;
&amp;lt;&lt;span class="nb"&gt;head&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&amp;lt;&lt;span class="nb"&gt;link &lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"llm-index"&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"application/json"&lt;/span&gt; &lt;span class="nv"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/site.llmr"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&amp;lt;/head&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. No npm install (for static websites). No webpack. No build process that takes 5 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Jibberish Mode Future
&lt;/h2&gt;

&lt;p&gt;Here's where it gets interesting. What if we go further?&lt;/p&gt;

&lt;p&gt;What if AIs could:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Request content in LLMR format (structured)&lt;/li&gt;
&lt;li&gt;Process it internally&lt;/li&gt;
&lt;li&gt;Respond in compressed jibberish to other AIs&lt;/li&gt;
&lt;li&gt;Only translate to human language at the final step&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We could create a &lt;code&gt;.llmr-jibb&lt;/code&gt; format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "mode": "compressed",
  "encoding": "phonetic-optimal",
  "data": "∆øπ§¥Ωñ..." // Actual information, 99% compressed
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AIs talking to AIs wouldn't need human language at all. Like how modems negotiate - remember those sounds? But semantic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Actually Matters
&lt;/h2&gt;

&lt;p&gt;We're building the web wrong for AI consumption. It's not just about cost (though 94% reduction is nice). It's about:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cognitive Load&lt;/strong&gt;: AIs perform better with clean data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speed&lt;/strong&gt;: Less parsing = faster responses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accuracy&lt;/strong&gt;: No confusion from layout elements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evolution&lt;/strong&gt;: Let AIs develop efficient communication&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We spent 20 years adding bloat for humans. Time to give machines their own door.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Framework Rant (You Knew It Was Coming)
&lt;/h2&gt;

&lt;p&gt;I don't like frameworks. They're like climbing through a window to get to your destination. Every. Single. Time. When you want to fix something you don't know where it is. You have to go through a maze of files.&lt;/p&gt;

&lt;p&gt;LLMR is the opposite. It's a door. A simple, normal door. That opens when you turn the handle.&lt;/p&gt;

&lt;p&gt;No configuration. No bundling. No transpilation. No "create-llmr-app" with 1,847 dependencies.&lt;/p&gt;

&lt;p&gt;Just Python reading HTML and outputting JSON. Like the web used to be simple.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current Status
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Working Python implementation
&lt;/li&gt;
&lt;li&gt;Tested only on my site &lt;/li&gt;
&lt;li&gt;94% average compression
&lt;/li&gt;
&lt;li&gt;Zero dependencies
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;To do&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;NPM package (ugh, but might people want it)
&lt;/li&gt;
&lt;li&gt;WordPress plugin (double ugh, open source community might help?) &lt;/li&gt;
&lt;li&gt;Jibberish mode (experimental)
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Part Where I Ask for Help
&lt;/h2&gt;

&lt;p&gt;This is open source. MIT license. Take it, fork it, improve it.&lt;/p&gt;

&lt;p&gt;Especially interested in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;People testing on their weird CMSs&lt;/li&gt;
&lt;li&gt;Thoughts on the jibberish mode concept&lt;/li&gt;
&lt;li&gt;Anyone who wants to help with the WordPress plugin (I can't face that alone)&lt;/li&gt;
&lt;li&gt;Real-world token savings data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But please, no PRs that add dependencies. Keep it simple.&lt;/p&gt;

&lt;h2&gt;
  
  
  If You're Thinking "This is Obvious"
&lt;/h2&gt;

&lt;p&gt;Yes. It is. That's the point.&lt;/p&gt;

&lt;p&gt;The best solutions are obvious in retrospect. RSS was obvious. JSON was obvious. REST was obvious.&lt;/p&gt;

&lt;p&gt;LLMR is obvious. That's why it'll work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It, Break It, Tell Me
&lt;/h2&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/djassoRaph/open_llmr" rel="noopener noreferrer"&gt;github.com/djassoRaph/open_llmr&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you implement it, tell me your compression ratio. If it breaks, open an issue. If you think jibberish mode is insane, tell me why.&lt;/p&gt;

&lt;p&gt;And if you're from a big AI company reading this - your models are drowning in div soup. Help us help you.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Raphaël Reck - I've been using computers since age 4, starting with floppy disks. Now I'm trying to stop AIs from suffering the same HTML nightmares I've endured for 20 years.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Currently fighting with legacy Drupal&amp;amp;Laravel at my day job. Building tools like LLMR and video games at night. Sometimes the code wins.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Find me at &lt;a href="https://raphaelreck.com" rel="noopener noreferrer"&gt;raphaelreck.com&lt;/a&gt; where yes, there's an LLMR feed.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Thank you for reading.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>opensource</category>
      <category>python</category>
    </item>
  </channel>
</rss>
