<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>11ty Demos</title>
  <subtitle>I kept rebuilding the same Eleventy features on every project, so I put them all in one place. Every demo here actually works, not just written about.</subtitle>
  <link href="https://11ty-demos.netlify.app/feed.xml" rel="self"/>
  <link href="https://11ty-demos.netlify.app/"/>
  <updated>2026-02-24T00:00:00Z</updated>
  <id>https://11ty-demos.netlify.app/</id>
  <author>
    <name>Vinay Ranjan</name>
  </author>

  
  <entry>
    <title>Why every demo has to actually work</title>
    <link href="https://11ty-demos.netlify.app/blog/the-live-implementation-idea/"/>
    <updated>2026-02-24T00:00:00Z</updated>
    <id>https://11ty-demos.netlify.app/blog/the-live-implementation-idea/</id>
    <content type="html">&lt;p&gt;Early on I could have written this site as a set of articles explaining Eleventy patterns, with code snippets and screenshots. I didn’t, because I’ve read plenty of tutorials like that and forgotten them a week later.&lt;/p&gt;
&lt;p&gt;So every demo here has a “Live Implementation” section that’s the real, working thing: the actual header search, the actual theme toggle, the actual multi-level nav. If a code snippet ever drifts from what’s really running, it’s a bug, not just an out-of-date doc. That’s a much better forcing function for keeping things honest.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Static doesn&#39;t mean boring</title>
    <link href="https://11ty-demos.netlify.app/blog/static-doesnt-mean-boring/"/>
    <updated>2026-02-21T00:00:00Z</updated>
    <id>https://11ty-demos.netlify.app/blog/static-doesnt-mean-boring/</id>
    <content type="html">&lt;p&gt;“Static site” makes people picture something plain: a few pages, no interactivity, done. But nearly everything on this site — the search, the theme toggle, the multi-level nav, the table of contents — runs without a server anywhere in the picture. It’s all just HTML, CSS, and a little JavaScript, generated once and served as flat files.&lt;/p&gt;
&lt;p&gt;The constraint turns out to be a feature. When there’s no server to reach for, you end up finding the simplest version of a feature that actually works, and simplest usually means faster too.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Small sites add up to a real skillset</title>
    <link href="https://11ty-demos.netlify.app/blog/small-sites-add-up/"/>
    <updated>2026-02-18T00:00:00Z</updated>
    <id>https://11ty-demos.netlify.app/blog/small-sites-add-up/</id>
    <content type="html">&lt;p&gt;I didn’t really understand collections, pagination, or the data cascade until I’d rebuilt small pieces of them a few times over, in different projects, for different reasons. Reading the docs once didn’t do it. Reading them again after hitting the same wall a second time did.&lt;/p&gt;
&lt;p&gt;That’s basically the reason this site exists. Instead of the lesson living in five old repos I never look at again, it lives here, where I can actually find it.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Do it at build time if you can</title>
    <link href="https://11ty-demos.netlify.app/blog/build-time-vs-runtime/"/>
    <updated>2026-02-15T00:00:00Z</updated>
    <id>https://11ty-demos.netlify.app/blog/build-time-vs-runtime/</id>
    <content type="html">&lt;p&gt;Most of the demos on this site lean on the same idea: if something can be computed once, at build time, don’t make the browser redo it on every visit. The table of contents, the syntax highlighting, the search index, all of it gets figured out while the site is being built, not while someone’s looking at it.&lt;/p&gt;
&lt;p&gt;It’s a small mindset shift if you’re used to frameworks that do everything client-side. Before reaching for JavaScript, it’s worth asking whether the answer was already knowable when you ran &lt;code&gt;npm run build&lt;/code&gt;.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Why collections instead of just looping folders</title>
    <link href="https://11ty-demos.netlify.app/blog/why-collections/"/>
    <updated>2026-02-12T00:00:00Z</updated>
    <id>https://11ty-demos.netlify.app/blog/why-collections/</id>
    <content type="html">&lt;p&gt;The first time I used Eleventy, I assumed a collection was just “the files in this folder.” It isn’t. A collection is whatever array your &lt;code&gt;addCollection&lt;/code&gt; function returns. It can pull from a glob, filter by tag, mix content from two different folders, or compute something that isn’t backed by files at all.&lt;/p&gt;
&lt;p&gt;That flexibility is the whole point. Once you stop thinking of collections as folder listings and start thinking of them as “any array I can build in JavaScript,” you stop fighting the tool.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Front matter is just data</title>
    <link href="https://11ty-demos.netlify.app/blog/front-matter-basics/"/>
    <updated>2026-02-08T00:00:00Z</updated>
    <id>https://11ty-demos.netlify.app/blog/front-matter-basics/</id>
    <content type="html">&lt;p&gt;Front matter trips people up because it looks like configuration syntax. It’s not. It’s just a YAML (or JSON, or JS) object that Eleventy reads off the top of your file and merges into everything else it knows about that page.&lt;/p&gt;
&lt;p&gt;That’s why directory data files work the way they do. &lt;code&gt;demos.json&lt;/code&gt; sitting next to a folder of &lt;code&gt;.md&lt;/code&gt; files isn’t magic, it’s just more data getting merged in before your own front matter gets a turn. Once that clicks, most of Eleventy’s data cascade stops feeling clever and starts feeling obvious.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Hello, Eleventy</title>
    <link href="https://11ty-demos.netlify.app/blog/hello-eleventy/"/>
    <updated>2026-02-05T00:00:00Z</updated>
    <id>https://11ty-demos.netlify.app/blog/hello-eleventy/</id>
    <content type="html">&lt;p&gt;This is a sample post to prove the blog scaffold actually works: the &lt;code&gt;posts&lt;/code&gt; collection, the &lt;code&gt;blog-post.njk&lt;/code&gt; layout, and the &lt;code&gt;/feed.xml&lt;/code&gt; RSS feed all pull from files like this one.&lt;/p&gt;
&lt;p&gt;Adding more posts works the same way demos do. Drop a new Markdown file into &lt;code&gt;src/blog/&lt;/code&gt; and it shows up on &lt;code&gt;/blog/&lt;/code&gt; and in the feed on its own. Nothing else to touch.&lt;/p&gt;
</content>
  </entry>
  
</feed>
