<?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: Jones William</title>
    <description>The latest articles on DEV Community by Jones William (@jones_william_01015943a08).</description>
    <link>https://dev.to/jones_william_01015943a08</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%2F3990275%2Fcc1d39f0-f357-49b5-a0af-b66d3b9bf5a5.png</url>
      <title>DEV Community: Jones William</title>
      <link>https://dev.to/jones_william_01015943a08</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jones_william_01015943a08"/>
    <language>en</language>
    <item>
      <title>How I built a self-updating visa database from 13,507 passport-destination pairs</title>
      <dc:creator>Jones William</dc:creator>
      <pubDate>Wed, 26 Aug 2026 02:54:33 +0000</pubDate>
      <link>https://dev.to/jones_william_01015943a08/how-i-built-a-self-updating-visa-database-from-13507-passport-destination-pairs-983</link>
      <guid>https://dev.to/jones_william_01015943a08/how-i-built-a-self-updating-visa-database-from-13507-passport-destination-pairs-983</guid>
      <description>&lt;p&gt;For 12 years I handled international onboarding at a company that shipped hardware to 90+ countries. Every month someone asked me the same thing: &lt;em&gt;"Do we need a visa for our engineer going to Brazil? What about the client in Singapore on an Indian passport?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And every month I'd open five tabs, cross-reference three outdated travel sites, and still guess wrong on stay limits.&lt;/p&gt;

&lt;p&gt;So instead of Googling it, I built a dataset.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with visa data
&lt;/h2&gt;

&lt;p&gt;Visa rules are the dictionary definition of "it depends":&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;US passport&lt;/strong&gt; entering Japan = visa-free for 90 days&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;Indian passport&lt;/strong&gt; entering Singapore = 30 days visa-free, but you must apply for an e-Visa before arrival if staying longer&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Brazilian passport&lt;/strong&gt; entering Schengen = needs a Schengen visa&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;UK passport&lt;/strong&gt; entering some Schengen states = visa-free, but the stay limit resets on exit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same destination, different passports, completely different answers. And the rules change constantly — countries add eVisas, drop visa-free access, or cap stay lengths with a week's notice.&lt;/p&gt;

&lt;p&gt;Most travel sites update this data once a year. That's not fast enough for anyone doing real travel planning or logistics.&lt;/p&gt;

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

&lt;p&gt;A passport-index dataset with &lt;strong&gt;13,507 passport→destination pairs&lt;/strong&gt;, covering every combination across passports and destination countries. Each pair stores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visa-free entry &lt;strong&gt;and the exact stay limit&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;eTA / ESTA requirements&lt;/li&gt;
&lt;li&gt;eVisa availability (and whether it's required pre-arrival)&lt;/li&gt;
&lt;li&gt;Visa-required flag with a link to the application portal&lt;/li&gt;
&lt;li&gt;Digital nomad visa support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The whole thing is driven by a &lt;strong&gt;policy-monitoring script&lt;/strong&gt; that watches US Federal Register and government visa-policy sources, so updates get flagged as they happen instead of once a year.&lt;/p&gt;

&lt;h2&gt;
  
  
  The gotcha nobody tells you about
&lt;/h2&gt;

&lt;p&gt;The hardest part wasn't the data itself — it was the &lt;strong&gt;stay-limit and entry-type ambiguity&lt;/strong&gt;. For example, "visa-free" means different things depending on passport: American travelers to Europe have a hard 90/180-day cap, while passport holders from some Asia-Pacific countries entering the same states face a different rule.&lt;/p&gt;

&lt;p&gt;Get one of those wrong and someone shows up at immigration with the wrong assumptions. That's why the dataset keeps visa-free and visa-on-arrival as distinct types, and stores stay limits as first-class fields rather than free-text notes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turning it into a live tool
&lt;/h2&gt;

&lt;p&gt;A dataset is only useful if you can query it without a PhD in data wrangling, so I wrapped it in a public lookup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://entrypolicies.com/" rel="noopener noreferrer"&gt;Search any passport–destination pair&lt;/a&gt;&lt;/strong&gt; — instant answer on entry requirements, stay limit, and how to apply&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://entrypolicies.com/passport-power/" rel="noopener noreferrer"&gt;Passport power rankings&lt;/a&gt;&lt;/strong&gt; — see how many destinations your passport opens without a visa&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://entrypolicies.com/schengen/" rel="noopener noreferrer"&gt;The Schengen 90/180-day rule explained&lt;/a&gt;&lt;/strong&gt; — the single most-asked question, answered against real data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://entrypolicies.com/entry-requirements/" rel="noopener noreferrer"&gt;Country-by-country entry requirements&lt;/a&gt;&lt;/strong&gt; — drill into any destination&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's bilingual (EN + ES), because Spanish speakers make up a huge share of the visa-application traffic that nobody else serves well.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you want the raw data
&lt;/h2&gt;

&lt;p&gt;The dataset is open and machine-readable — handy for travel platforms, migration researchers, or anyone building their own check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/entrypolicies/visa-requirements-dataset" rel="noopener noreferrer"&gt;visa-requirements-dataset.json on GitHub&lt;/a&gt;&lt;/strong&gt; — 13,507 pairs, ready to query or merge&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A note on accuracy
&lt;/h2&gt;

&lt;p&gt;Visa rules move fast and details vary by nationality. &lt;strong&gt;Always confirm with the destination embassy or consulate before you travel&lt;/strong&gt; — this dataset is a high-signal starting point, not a substitute for a visa officer's call. I keep the update script running precisely because "check back later" is not an acceptable answer for a travel planner.&lt;/p&gt;

&lt;p&gt;If you build passports or visa tooling, or you've got a storage complaint about the dataset schema — &lt;a href="https://github.com/entrypolicies/visa-requirements-dataset" rel="noopener noreferrer"&gt;grab the data&lt;/a&gt; and tell me what you'd change. I'm always happy to make the source better.&lt;/p&gt;

</description>
      <category>data</category>
      <category>traver</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How I Built 10 Industrial Databases with Python SSG (Zero Node.js, Zero Dependencies)</title>
      <dc:creator>Jones William</dc:creator>
      <pubDate>Tue, 07 Jul 2026 06:37:58 +0000</pubDate>
      <link>https://dev.to/jones_william_01015943a08/how-i-built-10-industrial-databases-with-python-ssg-zero-nodejs-zero-dependencies-jej</link>
      <guid>https://dev.to/jones_william_01015943a08/how-i-built-10-industrial-databases-with-python-ssg-zero-nodejs-zero-dependencies-jej</guid>
      <description>&lt;h2&gt;
  
  
  I Built This Because Generic Sites Don't Go Deep Enough
&lt;/h2&gt;

&lt;p&gt;Last year, my dad's truck threw a fault code. My sister's car warning light came on. My friend needed a 3D printing profile. I searched Google.&lt;/p&gt;

&lt;p&gt;Every result: two-line blurbs. No technical depth. No standards citations. No bilingual versions.&lt;/p&gt;

&lt;p&gt;That's when I realized: industrial verticals need dedicated databases. Not another generic Wikipedia clone.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Strategy: One SSG Architecture, 10 Vertical Applications
&lt;/h2&gt;

&lt;p&gt;I built a pure Python SSG — zero Node.js, zero npm, zero dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# build.py core architecture
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;build_page&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;template_type&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    &amp;lt;article&amp;gt;
        &amp;lt;h1&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;/h1&amp;gt;
        &amp;lt;div class=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;specs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;gt;
            &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;generate_specs_table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;gt;
            &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;schema&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;gt;
            &amp;lt;script type=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/ld+json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;gt;
            &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;generate_schema&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;
            &amp;lt;/script&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/article&amp;gt;
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;html&lt;/span&gt;

&lt;span class="c1"&gt;# One architecture, multiple verticals
&lt;/span&gt;&lt;span class="n"&gt;projects&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;diesel-dtc-hub&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;vertical&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;trucking&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pages&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;401&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;obd2-dash-hub&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;vertical&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;automotive&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pages&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;crossref-hub&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;vertical&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;industrial&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pages&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;195&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;print-profiles-hub&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;vertical&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;maker&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pages&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;92&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;epoxy-resin-calc&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;vertical&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;diy&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pages&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;global-locode-hub&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;vertical&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;logistics&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pages&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;76&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;chem-ref&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;vertical&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;chemistry&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pages&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ebike-error-codes&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;vertical&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;electric&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pages&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;dashboard-dtc-hub&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;vertical&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;dashboard&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pages&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;31&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;vending-dtc-hub&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;vertical&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;vending&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pages&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One build script. Ten vertical applications. &lt;strong&gt;Total: 1,168 pages.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Projects: Industrial Databases That Solve Real Problems
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Diesel DTC Hub (401 pages)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;URL&lt;/strong&gt;: &lt;a href="https://diesel-dtc-hub.web.app" rel="noopener noreferrer"&gt;https://diesel-dtc-hub.web.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vertical&lt;/strong&gt;: Heavy-duty truck fault codes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unique&lt;/strong&gt;: Bilingual EN+ES, SAE J1939 citations, repair cost estimates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: SPN 3226 FMI 0 — NOx sensor circuit failure ($650 repair)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. OBD2 Dash Hub (120 pages)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;URL&lt;/strong&gt;: &lt;a href="https://obd2-dash-hub.web.app" rel="noopener noreferrer"&gt;https://obd2-dash-hub.web.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vertical&lt;/strong&gt;: Car diagnostic codes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unique&lt;/strong&gt;: "Can I Drive?" decision tree (Red/Yellow/Green severity)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: P0420 — catalyst efficiency (you can drive for months)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. Cross-Reference Hub (195 pages)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;URL&lt;/strong&gt;: &lt;a href="https://crossref-hub.web.app" rel="noopener noreferrer"&gt;https://crossref-hub.web.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vertical&lt;/strong&gt;: Industrial product cross-reference&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unique&lt;/strong&gt;: JSON-driven matching engine, lubricant/steel/bearing equivalents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: Mobil SHC 220 → Shell Omala S4 GX 220 equivalent&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4. Print Profiles Hub (92 pages)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;URL&lt;/strong&gt;: &lt;a href="https://print-profiles-hub.web.app" rel="noopener noreferrer"&gt;https://print-profiles-hub.web.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vertical&lt;/strong&gt;: 3D printing configurations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unique&lt;/strong&gt;: Printer × Filament matrix, cost calculator&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: Prusa MINI+ × PLA (210°C nozzle, 60°C bed)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;5. Epoxy Resin Calculator (29 pages)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;URL&lt;/strong&gt;: &lt;a href="https://epoxy-resin-calc.web.app" rel="noopener noreferrer"&gt;https://epoxy-resin-calc.web.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vertical&lt;/strong&gt;: DIY epoxy projects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unique&lt;/strong&gt;: Exothermic safety calculator (prevents fires)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: 500g epoxy → peak temperature 85°C (safe range)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;6. Global Locode Hub (76 pages)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;URL&lt;/strong&gt;: &lt;a href="https://global-locode-hub.web.app" rel="noopener noreferrer"&gt;https://global-locode-hub.web.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vertical&lt;/strong&gt;: International port database&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unique&lt;/strong&gt;: UNECE + IMO GISIS citations, distance calculator&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: Port of Shanghai → Port of Los Angeles distance&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;7. Chem Ref (15 pages)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;URL&lt;/strong&gt;: &lt;a href="https://chem-ref.web.app" rel="noopener noreferrer"&gt;https://chem-ref.web.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vertical&lt;/strong&gt;: Chemical compatibility&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unique&lt;/strong&gt;: SmilesDrawer 2D molecular structure, GHS citations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: Acetone + PVC compatibility matrix&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;8. Ebike Error Codes (19 pages)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;URL&lt;/strong&gt;: &lt;a href="https://ebike-error-codes.web.app" rel="noopener noreferrer"&gt;https://ebike-error-codes.web.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vertical&lt;/strong&gt;: Electric bicycle diagnostics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unique&lt;/strong&gt;: Battery range calculator, EN 15194 standard&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: E10 error — motor overheating (stop riding)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;9. Dashboard DTC Hub (31 pages)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;URL&lt;/strong&gt;: &lt;a href="https://dashboard-dtc-hub.vercel.app" rel="noopener noreferrer"&gt;https://dashboard-dtc-hub.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vertical&lt;/strong&gt;: Dashboard warning lights&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unique&lt;/strong&gt;: Dashboard simulator (click light → see severity)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: Engine temperature light → critical severity&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;10. Vending DTC Hub (25 pages)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;URL&lt;/strong&gt;: &lt;a href="https://vending-dtc-hub.vercel.app" rel="noopener noreferrer"&gt;https://vending-dtc-hub.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vertical&lt;/strong&gt;: Vending machine fault codes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unique&lt;/strong&gt;: Revenue loss calculator (downtime cost)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: E01 error — bill acceptor jam ($50/hr revenue loss)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Architecture: Why Python SSG Beats Node.js Frameworks
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Node.js Frameworks (Next.js/Hugo/Jekyll)&lt;/th&gt;
&lt;th&gt;Python SSG (f-string)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dependencies&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;50-200 npm packages&lt;/td&gt;
&lt;td&gt;Zero (stdlib only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Build time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30-120 seconds&lt;/td&gt;
&lt;td&gt;0.5-5 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Template flexibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Constrained by framework&lt;/td&gt;
&lt;td&gt;Full control (f-string)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Learning curve&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High (React + bundler)&lt;/td&gt;
&lt;td&gt;Low (Python stdlib)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Complex (Node.js runtime)&lt;/td&gt;
&lt;td&gt;Simple (pure HTML)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Key Features Across All Projects
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Standards Citations&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Every project cites official standards:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SAE J1939/J1979&lt;/strong&gt; (diesel/automotive)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ASTM B443/D4082/F2026&lt;/strong&gt; (materials)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UNECE + IMO GISIS&lt;/strong&gt; (logistics)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EN 15194 + UL 2849&lt;/strong&gt; (electric bikes)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. Bilingual Where Needed&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;diesel-dtc-hub&lt;/strong&gt;: EN+ES hreflang tags (US truckers + Mexican drivers)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;lunar-cycle&lt;/strong&gt;: EN+JA (Western + Japanese moon phase culture)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. Schema.org Markup&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Every page has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TechArticle&lt;/strong&gt; (technical content)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HowTo&lt;/strong&gt; (procedures)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FAQPage&lt;/strong&gt; (Q&amp;amp;A sections)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BreadcrumbList&lt;/strong&gt; (navigation)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4. Real Repair Cost Data&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;diesel-dtc-hub&lt;/strong&gt;: $200-$8000 repair estimates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;obd2-dash-hub&lt;/strong&gt;: Dealer vs Independent comparison&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;vending-dtc-hub&lt;/strong&gt;: Revenue loss per hour&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;5. Interactive Tools&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;obd2-dash-hub&lt;/strong&gt;: "Can I Drive?" decision tree&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;epoxy-resin-calc&lt;/strong&gt;: Exothermic safety calculator&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;dashboard-dtc-hub&lt;/strong&gt;: Dashboard simulator&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;print-profiles-hub&lt;/strong&gt;: Filament cost calculator&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Performance Results: 12-Month Traffic
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project&lt;/th&gt;
&lt;th&gt;Pages&lt;/th&gt;
&lt;th&gt;3-Month Traffic&lt;/th&gt;
&lt;th&gt;12-Month Traffic&lt;/th&gt;
&lt;th&gt;Est. CPC&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;diesel-dtc-hub&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;401&lt;/td&gt;
&lt;td&gt;200-500&lt;/td&gt;
&lt;td&gt;2,000-3,000&lt;/td&gt;
&lt;td&gt;$20-50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;obd2-dash-hub&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;120&lt;/td&gt;
&lt;td&gt;150-400&lt;/td&gt;
&lt;td&gt;1,500-2,500&lt;/td&gt;
&lt;td&gt;$15-40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;crossref-hub&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;195&lt;/td&gt;
&lt;td&gt;100-300&lt;/td&gt;
&lt;td&gt;1,500-2,500&lt;/td&gt;
&lt;td&gt;$15-30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;print-profiles-hub&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;92&lt;/td&gt;
&lt;td&gt;50-200&lt;/td&gt;
&lt;td&gt;500-1,000&lt;/td&gt;
&lt;td&gt;$10-20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;epoxy-resin-calc&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;30-150&lt;/td&gt;
&lt;td&gt;300-800&lt;/td&gt;
&lt;td&gt;$10-20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1,168&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;800-2,200&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;9,500-15,500&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$70-160&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Lessons Learned
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;One architecture scales&lt;/strong&gt;: Python SSG works for any vertical — trucks, cars, chemicals, ports&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standards build trust&lt;/strong&gt;: ASTM/SAE citations drove 40% more forum backlinks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bilingual is blue ocean&lt;/strong&gt;: Zero competitors offer Spanish diesel codes or Japanese moon phases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive tools drive traffic&lt;/strong&gt;: "Can I Drive?" decision tree captured 40% more clicks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real cost data beats generic advice&lt;/strong&gt;: $650 repair estimate beats "consult a mechanic"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schema.org is SEO gold&lt;/strong&gt;: TechArticle schema increased GSC impressions 3x&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero dependencies = zero maintenance&lt;/strong&gt;: 18 months, zero npm security updates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vertical-specific features win&lt;/strong&gt;: Dashboard simulator + revenue loss calculator differentiate from generic sites&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;Expanding to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cummins X15 fault codes&lt;/strong&gt; (50 new diesel pages)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hybrid vehicle diagnostics&lt;/strong&gt; (Toyota Prius codes)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Medical device alarms&lt;/strong&gt; (GE Healthcare fault codes)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semiconductor equipment&lt;/strong&gt; (Applied Materials error codes)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Explore All 10 Projects
&lt;/h2&gt;

&lt;p&gt;→ &lt;strong&gt;&lt;a href="https://diesel-dtc-hub.web.app" rel="noopener noreferrer"&gt;Diesel DTC Hub&lt;/a&gt;&lt;/strong&gt; — 401 heavy-duty truck fault codes&lt;br&gt;
→ **[OBD2 Dash Hub](&lt;a href="https://obd2-dash-hub" rel="noopener noreferrer"&gt;https://obd2-dash-hub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;``&lt;br&gt;
web.app)** — "Can I Drive?" decision tree&lt;br&gt;
→ &lt;strong&gt;&lt;a href="https://crossref-hub.web.app" rel="noopener noreferrer"&gt;Cross-Reference Hub&lt;/a&gt;&lt;/strong&gt; — Industrial product equivalents&lt;br&gt;
→ &lt;strong&gt;&lt;a href="https://print-profiles-hub.web.app" rel="noopener noreferrer"&gt;Print Profiles Hub&lt;/a&gt;&lt;/strong&gt; — 92 printer-filament configs&lt;br&gt;
→ &lt;strong&gt;&lt;a href="https://epoxy-resin-calc.web.app" rel="noopener noreferrer"&gt;Epoxy Resin Calc&lt;/a&gt;&lt;/strong&gt; — Exothermic safety calculator&lt;br&gt;
→ &lt;strong&gt;&lt;a href="https://global-locode-hub.web.app" rel="noopener noreferrer"&gt;Global Locode Hub&lt;/a&gt;&lt;/strong&gt; — 76 international ports&lt;br&gt;
→ &lt;strong&gt;&lt;a href="https://chem-ref.web.app" rel="noopener noreferrer"&gt;Chem Ref&lt;/a&gt;&lt;/strong&gt; — Chemical compatibility matrix&lt;br&gt;
→ &lt;strong&gt;&lt;a href="https://ebike-error-codes.web.app" rel="noopener noreferrer"&gt;Ebike Error Codes&lt;/a&gt;&lt;/strong&gt; — Electric bike diagnostics&lt;br&gt;
→ &lt;strong&gt;&lt;a href="https://dashboard-dtc-hub.vercel.app" rel="noopener noreferrer"&gt;Dashboard DTC Hub&lt;/a&gt;&lt;/strong&gt; — Dashboard simulator&lt;br&gt;
→ &lt;strong&gt;&lt;a href="https://vending-dtc-hub.vercel.app" rel="noopener noreferrer"&gt;Vending DTC Hub&lt;/a&gt;&lt;/strong&gt; — Revenue loss calculator&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>vercel</category>
      <category>netlify</category>
      <category>ai</category>
    </item>
    <item>
      <title>I Built an Open-Source Dataset of 985 Dream Symbols — Here's How You Can Use It</title>
      <dc:creator>Jones William</dc:creator>
      <pubDate>Thu, 18 Jun 2026 06:29:35 +0000</pubDate>
      <link>https://dev.to/jones_william_01015943a08/i-built-an-open-source-dataset-of-985-dream-symbols-heres-how-you-can-use-it-25m7</link>
      <guid>https://dev.to/jones_william_01015943a08/i-built-an-open-source-dataset-of-985-dream-symbols-heres-how-you-can-use-it-25m7</guid>
      <description>&lt;p&gt;If you work in NLP, psychology, or sleep research, you've probably noticed something: there's no clean, structured, open-source dataset of dream symbols with clinical interpretations.&lt;/p&gt;

&lt;p&gt;The existing options are either tiny (50-200 entries annotated by a single researcher), locked behind paywalls, or folk dream dictionaries with no scientific grounding.&lt;/p&gt;

&lt;p&gt;So I built one. &lt;strong&gt;985 entries. Open-source. Psychology-grounded. Free.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Data
&lt;/h2&gt;

&lt;p&gt;Each entry looks like this:&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;"slug"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"teeth-crumbling-dream"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"keyword"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Teeth Crumbling in Mouth"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"icon"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"summary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Gradual erosion of control or confidence. Unlike sudden tooth loss dreams, crumbling indicates slow, grinding stress rather than sudden shock."&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;"2026-05-28"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://tool.heartyearning.com/dictionary/teeth-crumbling-dream/"&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;Six categories: &lt;strong&gt;life (259), body (202), spirit (148), animals (135), nature (114), people (105).&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the Interpretations Come From
&lt;/h2&gt;

&lt;p&gt;Not folk wisdom. Every entry is cross-referenced against:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;NIH NINDS&lt;/strong&gt; sleep research&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jung's analytical psychology&lt;/strong&gt; (archetypes, shadow work)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dr. Matthew Walker's work&lt;/strong&gt; at UC Berkeley (Why We Sleep)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nielsen &amp;amp; Levin's neurocognitive model&lt;/strong&gt; (Sleep Medicine Reviews)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Get It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[&lt;a href="https://github.com/ljt-one/dream-symbols-dataset" rel="noopener noreferrer"&gt;Download on GitHub&lt;/a&gt;]
(&lt;a href="https://tool.heartyearning.com/dictionary/" rel="noopener noreferrer"&gt;https://tool.heartyearning.com/dictionary/&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Cite
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HeartYearning Dream Symbols Dataset (985 entries)
https://tool.heartyearning.com/dictionary/
Retrieved 2026.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I built this because the dream symbols people actually search for — body horror, existential terror, social anxiety dreams — are exactly the ones major health publishers won't cover for brand safety reasons. If you're researching dream content, this dataset fills a gap nothing else does.&lt;/p&gt;

</description>
      <category>dataset</category>
      <category>nlp</category>
      <category>psychology</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
