{"version":"https://jsonfeed.org/version/1.1","title":"Xogo (Xeo demo)","home_page_url":"https://xogo.xeo.land/","feed_url":"https://xogo.xeo.land/feed.json","description":"Lume Simple Blog variant with custom fonts and colors","language":"en","items":[{"id":"https://xogo.xeo.land/differences/","url":"https://xogo.xeo.land/differences/","title":"Differences between Xeo and Simple Blog","language":"en","content_html":"<p>Wondering how <a href=\"https://github.com/famebot/xeo\"><strong>Xeo</strong></a> differs from\n<a href=\"https://lume.land/theme/simple-blog/\"><strong>Simple Blog</strong></a>? This post is\nfor you!</p>\n<!--more-->\n<p>To recap <a href=\"https://xogo.xeo.land/instructions/\">How to install Xeo:</a></p>\n<blockquote>\n<p><strong>Xeo</strong> began as a variant of the\n<a href=\"https://lume.land/theme/simple-blog/\"><strong>Simple Blog</strong></a> theme for\n<a href=\"https://lume.land/\"><strong>Lume</strong></a> by <a href=\"https://oscarotero.com/\">Óscar Otero</a>. Over\ntime, eventually Xeo diverged substantially enough from Simple Blog that Óscar\nand Ricky agreed it was time for Xeo to become a fully stand-alone theme.</p>\n<p>Starting with version 7, Xeo no longer depends on Simple Blog as its parent\ntheme. Because Xeo is no longer a child theme, using Xeo as a parent theme to\nmake your own child theme just got easier. Another bonus of the split is that\nSimple Blog can now freely implement features that landed in Xeo first (like\ncustom fonts and colors) without having to worry about compatibility issues\nwith Xeo or downstream themes and sites that depend on Xeo.</p>\n</blockquote>\n<p>Where do they diverge?</p>\n<h2 id=\"typography\" tabindex=\"-1\"><a href=\"https://xogo.xeo.land/differences/#typography\" class=\"header-anchor\">Typography</a></h2>\n<div class=\"markdown-alert markdown-alert-tip\">\n<p class=\"markdown-alert-title\">Tip</p>\n<p>Lume’s Google Fonts plugin needs the <strong>share page link</strong>, or share URL, not\nthe embed code.</p>\n</div>\n<ul>\n<li>\n<p>Xeo uses <a href=\"https://lume.land/plugins/google_fonts/\">Lume’s Google Fonts plugin</a>\nin <a href=\"https://github.com/famebot/xeo/blob/trunk/plugins.ts\"><code>plugins.ts</code></a> to set\ndisplay (for larger sized headings and titles) and text (normal body and\nsmaller sizes) typefaces from the\n<a href=\"https://fonts.google.com/\">Google Font Library</a>.</p>\n</li>\n<li>\n<p>By default, Xeo sets\n<a href=\"https://fonts.google.com/specimen/Bebas+Neue\">Bebas Neue</a> for display and\n<a href=\"https://fonts.google.com/specimen/Lexend\">Lexend</a> for text. Preview Bebas\nNeue + Lexend at <strong><a href=\"https://xeo.land/\">xeo.land</a>.</strong> You can customize this\nwhen you <strong><a href=\"https://xogo.xeo.land/instructions/#typography\">personalize your copy of Xeo</a>.</strong></p>\n</li>\n<li>\n<p>To get the correct URL for your <code>display</code> and <code>text</code> font choices, I recommend\nselecting the “Get font” button at the top right on the specimen page, which\nwill take you the <a href=\"https://fonts.google.com/selection\">selection</a> page where\nyou can select the “Share” button and then the “Copy share page link” button,\nwhich shows a copy icon that looks like one rectangle stacked on top of\nanother rectangle. The share button should be underneath the text “1 font\nfamily selected.” Use the “Remove all” button to clear each choice before\nselecting another, so the share page links stay separate.</p>\n</li>\n<li>\n<p>If you are looking for more options,\n<a href=\"https://fonts.google.com/specimen/Poppins\">Poppins</a> is an alternative to\nLexend we considered for Xeo. The example custom font site,\n<strong><a href=\"https://xogo.xeo.land/\">xogo.xeo.land</a>,</strong> showcases the fun, playful\npairing of Poppins &amp;\n<a href=\"https://fonts.google.com/specimen/Playpen+Sans\">Playpen</a>.\n<a href=\"https://translate.google.com/?sl=gl&amp;tl=en&amp;text=Xogo&amp;op=translate\"><strong>Xogo</strong> means <em>play</em> or <em>game</em></a>\nin Galician, like\n<a href=\"https://translate.google.com/?sl=gl&amp;tl=en&amp;text=Xeo&amp;op=translate\"><strong>Xeo</strong> means <em>ice</em></a>\nand\n<a href=\"https://translate.google.com/?sl=gl&amp;tl=en&amp;text=Lume&amp;op=translate\"><strong>Lume</strong> means <em>fire</em></a>.\nThe source code powering the example is in the\n<a href=\"https://github.com/famebot/xeo/blob/xogo/_config.ts#L6-L18\"><code>xogo</code> branch on GitHub</a>.\nWe chose Lexend over Poppins because\n<a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_fonts/Variable_fonts_guide\">variable fonts</a>\nhave performance benefits since they combine many different variations of a\ntypeface into a single file, reducing requests.</p>\n</li>\n<li>\n<p>You can <a href=\"https://fonts.google.com/variablefonts\">browse variable Google fonts</a>\nor learn about\n<a href=\"https://fonts.google.com/knowledge/choosing_type/pairing_typefaces\">Pairing</a>\nand\n<a href=\"https://blog.typekit.com/2016/04/29/combining-typefaces-free-guide-to-great-typography/\">Combining Typefaces</a>\nfor inspiration and wisdom. Learn more about Xeo’s typography in\n<a href=\"https://xogo.xeo.land/instructions/#typography\">How to install Xeo</a>.</p>\n</li>\n</ul>\n<h2 id=\"design\" tabindex=\"-1\"><a href=\"https://xogo.xeo.land/differences/#design\" class=\"header-anchor\">Design</a></h2>\n<ul>\n<li>\n<p><strong>Spacing:</strong> Xeo adjusts spacing around various elements, particularly page\nheaders and the <a href=\"https://xogo.xeo.land/archive/\">search box</a>, which is relocated to the bottom of\npages to reduce layout shift when search results appear.</p>\n</li>\n<li>\n<p><strong>Color:</strong> Xeo has a\n<a href=\"https://github.com/famebot/xeo/blob/trunk/styles.css\">foundation</a> that will\nlead to eventual support of\n<a href=\"https://eleventeen.netlify.app/about/#rainbow-mode\">Rainbow Mode</a> powered by\n<a href=\"https://chromagen.io/\">Chromagen</a>, like Xeo’s predecessor\n<a href=\"https://eleventeen.netlify.app/about/\">eleventeen</a>. Chromagen generated Xeo’s\ncurrent color schemes, but has not yet been wired up to Xeo to the degree it\nhas been integrated into eleventeen.</p>\n</li>\n</ul>\n<h2 id=\"front-matter-optional\" tabindex=\"-1\"><a href=\"https://xogo.xeo.land/differences/#front-matter-optional\" class=\"header-anchor\"><a href=\"https://xogo.xeo.land/2025-12-solstice/\">Front matter optional</a></a></h2>\n<p>Xeo uses <a href=\"https://lume.land/plugins/extract_date/\">Lume’s Extract date plugin</a>\nto parse dates and titles from filenames.</p>\n<blockquote>\n<p>You have to prepend the date to the filename using the <code>yyyy-mm-dd</code> syntax\nfollowed by a hyphen <code>-</code> or an underscore <code>_</code> (or <code>yyyy-mm-dd-hh-ii-ss</code> if you\nalso need the time). Note that [the date] is removed [by default] when\ngenerating the final url […] Dates can be defined in folders, so it's shared\nby all pages inside […]</p>\n</blockquote>\n<p>– <a href=\"https://lume.land/plugins/extract_date/#description\">Extract date, lume.land</a></p>\n<p>The date must be at the beginning and complete. The trailing hyphen or\nunderscore following the date and preceding the title is required by Extract\ndate. Providing the time is optional. There is a draft in the example posts that\ntests the scenario with a date and title in the filename and supplies 13:00, as\n<code>-13-00-00</code> at the end. This gets around most\n<a href=\"https://en.wikipedia.org/wiki/List_of_UTC_offsets\">time offsets from UTC</a> that\ncause the date to shift in certain time zones, most often in New Zealand,\nKiribati, Samoa, Tonga, and USA Minor Outlying Islands.</p>\n<p>The <a href=\"https://xogo.xeo.land/no-title/\">No title</a> and <a href=\"https://xogo.xeo.land/2025-12-solstice/\">2025-12 solstice</a> example\nposts both have <code>date</code> and <code>author</code> in the\n<a href=\"https://lume.land/docs/getting-started/page-data/\">front matter</a>. With\n<a href=\"https://xogo.xeo.land/no-title/\">No title</a>, the title in the built site comes from the\n<a href=\"https://lume.land/docs/creating-pages/urls/#basename\"><code>basename</code></a> of the\n<code>no-title</code> folder containing the <code>index.md</code> file. Because the partial,\nincomplete date in the <code>2025-12-solstice.md</code> source filename does not have a day\nvalue, it gets parsed as part of the title,\n<a href=\"https://xogo.xeo.land/2025-12-solstice/\">2025-12 solstice</a>.</p>\n","tags":["Date","Design","Front Matter","Lume","Title","Xeo"],"date_published":"2025-12-31T13:00:00.000Z"},{"id":"https://xogo.xeo.land/instructions/","url":"https://xogo.xeo.land/instructions/","title":"How to install Xeo","language":"en","content_html":"<p>Once you\n<a href=\"https://docs.deno.com/runtime/getting_started/installation/\">install Deno</a>, the\n<strong>fastest and easiest</strong> way to configure this theme is the\n<a href=\"https://github.com/lumeland/init\">Lume init command</a>, which you can also copy\neasily from the <a href=\"https://lume.land/theme/xeo/\">Xeo theme page</a>. Running:</p>\n<pre><code class=\"language-bash\">deno run -A https://lume.land/init.ts --theme=xeo\n</code></pre>\n<p>will create a new project with Xeo configured.</p>\n<!--more-->\n<div class=\"markdown-alert markdown-alert-note\">\n<p class=\"markdown-alert-title\">Note</p>\n<p><strong>Xeo</strong> began as a variant of the\n<a href=\"https://lume.land/theme/simple-blog/\"><strong>Simple Blog</strong></a> theme for\n<a href=\"https://lume.land/\"><strong>Lume</strong></a> by <a href=\"https://oscarotero.com/\">Óscar Otero</a>. Over\ntime, eventually Xeo diverged substantially enough from Simple Blog that Óscar\nand Ricky agreed it was time for Xeo to become a fully stand-alone theme.</p>\n<p>Starting with Xeo version 7, Xeo no longer depends on Simple Blog as its\nparent theme. Because Xeo is no longer a child theme, using Xeo as a parent\ntheme to make your own child theme just got easier. Another bonus of the split\nis that Simple Blog can now freely implement features that landed in Xeo first\n(like custom fonts and colors) without having to worry about compatibility\nissues with Xeo or downstream themes and sites that depend on Xeo.</p>\n</div>\n<h2 id=\"personalize-xeo\" tabindex=\"-1\"><a href=\"https://xogo.xeo.land/instructions/#personalize-xeo\" class=\"header-anchor\">Personalize Xeo</a></h2>\n<p>Edit the <a href=\"https://github.com/famebot/xeo/blob/trunk/_data.yml\"><code>_data.yml</code></a> file\nin your blog root folder with your data to customize the site title,\ndescription, and metadata.</p>\n<p>Xeo uses <a href=\"https://lume.land/plugins/favicon/\">Lume’s favicon plugin</a>, and\nstarting with Xeo version 8.1, Xeo allows you to control the favicon plugin’s\n<code>input</code> option to provide an alternate file other than the default,\n<code>./favicon.svg</code>, which had been hardcoded up through version 8.0.1. Thanks to\n<a href=\"https://github.com/pamubay\">pamubay on GitHub</a> for raising\n<a href=\"https://github.com/famebot/xeo/issues/45\">this issue</a> in\n<a href=\"https://github.com/lumeland/lume/discussions/814\">Lume GitHub discussions</a>.</p>\n<div class=\"markdown-alert markdown-alert-note\">\n<p class=\"markdown-alert-title\">Note</p>\n<p><a href=\"https://github.com/lumeland/lume/blob/main/plugins/favicon.ts\">Accepted formats</a>\nare <strong>SVG, PNG, JPG, GIF, BMP, TIFF, WEBP</strong></p>\n</div>\n<p>Xogo (<a href=\"https://xogo.xeo.land/\">live site</a> /\n<a href=\"https://github.com/famebot/xeo/tree/xogo\">code</a>) demonstrates all the\ncustomization options, including:</p>\n<ul>\n<li>using an alternate favicon file (<code>/favicon.png</code>),</li>\n<li>customizing the logo (<code>/logo.svg</code>),</li>\n<li>fonts (Playpen &amp; Poppins, see <a href=\"https://xogo.xeo.land/instructions/#typography\">Typography</a> below),</li>\n<li>and custom colors.</li>\n</ul>\n<p><a href=\"https://translate.google.com/?sl=gl&amp;tl=en&amp;text=Xogo&amp;op=translate\"><strong>Xogo</strong> means <em>play</em> or <em>game</em></a>\nin Galician, like\n<a href=\"https://translate.google.com/?sl=gl&amp;tl=en&amp;text=Xeo&amp;op=translate\"><strong>Xeo</strong> means <em>ice</em></a>\nand\n<a href=\"https://translate.google.com/?sl=gl&amp;tl=en&amp;text=Lume&amp;op=translate\"><strong>Lume</strong> means <em>fire</em></a>.</p>\n<div class=\"markdown-alert markdown-alert-tip\">\n<p class=\"markdown-alert-title\">Tip</p>\n<p>You can use <a href=\"https://xogo.xeo.land/instructions/#cms\">LumeCMS</a> to customize the blog and add content easily.</p>\n</div>\n<h3 id=\"domains-and-urls\" tabindex=\"-1\"><a href=\"https://xogo.xeo.land/instructions/#domains-and-urls\" class=\"header-anchor\">Domains and URLs</a></h3>\n<p>The <a href=\"https://lume.land/docs/configuration/config-file/#location\"><code>location</code></a>\n(aka web address, “the public URL of the site”) depends on the environment\n(development, production) and can be changed dynamically from the CLI\n(<code>deno task serve --location=https://example.com</code>). We encourage you to either\nconfigure <code>location</code> dynamically, as Xeo does for <a href=\"https://xeo.land/\">xeo.land</a>\n(in <a href=\"https://github.com/famebot/xeo/blob/trunk/deno.json\"><code>deno.json</code></a> and\n<a href=\"https://github.com/famebot/xeo/blob/trunk/netlify.toml\"><code>netlify.toml</code></a>), or to\nset <code>location</code> in\n<a href=\"https://github.com/lumeland/lume.land/blob/2f6da036fb0be93d9689ca29bb87c57c08b7f560/_config.ts\"><code>_config.ts</code></a>\nas <a href=\"https://lume.land/\">lume.land</a> does. The default value is\n<a href=\"https://lume.land/docs/advanced/cheatsheet/#lume-instantiation\"><code>https://localhost</code></a>.</p>\n<div class=\"markdown-alert markdown-alert-note\">\n<p class=\"markdown-alert-title\">Note</p>\n<p>You may also want to set the local server\n<a href=\"https://lume.land/docs/configuration/config-file/#port\"><code>port</code></a>. For even\nmore flexibility in local development,\n<a href=\"https://github.com/lumeland/lume/blob/v2.5.1/CHANGELOG.md#251---2025-01-28\">Lume 2.5.1</a>\nadded a new <code>--hostname</code> argument to\n<a href=\"https://lume.land/docs/overview/command-line/#start-a-local-server\"><code>lume --serve</code></a>\nand <a href=\"https://lume.land/cms/#run-in-localhost\"><code>lume cms</code></a> to change the\ndefault <code>localhost</code> value there as well.</p>\n</div>\n<h3 id=\"typography\" tabindex=\"-1\"><a href=\"https://xogo.xeo.land/instructions/#typography\" class=\"header-anchor\">Typography</a></h3>\n<p>To <a href=\"https://xogo.xeo.land/differences/#typography\"><strong>configure which Google fonts Xeo uses</strong></a>,\nprovide a <code>fonts</code> object with <code>display</code> and/or <code>text</code> options to <code>xeo</code> in your\n<code>_config.ts</code>:</p>\n<pre><code class=\"language-ts\">import lume from &quot;lume/mod.ts&quot;;\nimport xeo from &quot;xeo/mod.ts&quot;;\n\nconst site = lume();\n\nsite.use(xeo({\n  fonts: {\n    display:\n      &quot;https://fonts.google.com/share?selection.family=Playpen+Sans:wght@100..800&quot;,\n    text:\n      &quot;https://fonts.google.com/share?selection.family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&quot;,\n  },\n}));\n\nexport default site;\n</code></pre>\n<p><strong>Visit <a href=\"https://xogo.xeo.land/\">xogo.xeo.land</a></strong> to see the change resulting\nfrom the configuration above, which pairs\n<a href=\"https://fonts.google.com/specimen/Playpen+Sans\">Playpen</a> &amp;\n<a href=\"https://fonts.google.com/specimen/Poppins\">Poppins</a> for a fun, playful vibe.\nPreview the defaults,\n<a href=\"https://fonts.google.com/specimen/Bebas+Neue\">Bebas Neue</a> +\n<a href=\"https://fonts.google.com/specimen/Lexend\">Lexend</a>,\nat <strong><a href=\"https://xeo.land/\">xeo.land</a>.</strong></p>\n<p>The source code powering the example is in the\n<a href=\"https://github.com/famebot/xeo/blob/xogo/_config.ts\"><code>xogo</code> branch on GitHub</a>.</p>\n<div class=\"markdown-alert markdown-alert-note\">\n<p class=\"markdown-alert-title\">Note</p>\n<p>Discover how to\n<a href=\"https://xogo.xeo.land/differences/#typography\"><strong>find the correct “share page link”</strong></a>, or URL,\nfor other font choices and learn more about Xeo’s typography in\n<a href=\"https://xogo.xeo.land/differences/#typography\">Differences between Xeo and Simple Blog</a>.</p>\n</div>\n<h3 id=\"color\" tabindex=\"-1\"><a href=\"https://xogo.xeo.land/instructions/#color\" class=\"header-anchor\">Color</a></h3>\n<p>Like with fonts above, to <strong>configure which colors Xeo uses</strong>, provide <code>xeo</code>\nwith a <code>colors</code> object with the options you want to override in your\n<code>_config.ts</code>:</p>\n<pre><code class=\"language-ts\">import lume from &quot;lume/mod.ts&quot;;\nimport xeo from &quot;xeo/mod.ts&quot;;\n\nconst site = lume();\n\nsite.use(xeo({\n  colors: {\n    hue: 288,\n    complement: 108,\n    analogous: 154,\n  },\n}));\n\nexport default site;\n</code></pre>\n<p><strong>Visit <a href=\"https://xogo.xeo.land/\">xogo.xeo.land</a></strong> to see the change resulting\nfrom the configuration above.</p>\n<p>See the defaults in\n<a href=\"https://github.com/famebot/xeo/blob/trunk/plugins.ts\"><code>plugins.ts</code></a> for a list\nof all <code>colors</code> options.</p>\n<h3 id=\"blogging\" tabindex=\"-1\"><a href=\"https://xogo.xeo.land/instructions/#blogging\" class=\"header-anchor\">Blogging</a></h3>\n<p>Posts must be saved in the <code>posts</code> folder (for example,\n<code>posts/my-first-post.md</code>). Unlike Simple Blog, Xeo serves them from the root\ndirectory, by setting\n<a href=\"https://lume.land/docs/creating-pages/urls/#basename\"><code>basename</code></a> to <code>/</code>\nin <a href=\"https://github.com/famebot/xeo/blob/trunk/posts/_data.yml\"><code>posts/_data.yml</code></a>.</p>\n<p>To change the name of the archives in both the URL and in the site navigation,\ncustomize <code>archives.basename</code> in <code>_data.yml</code>, and remember to also change\n<code>archive_title</code> in <code>_data/i18n.yml</code> to title-case version of\n<code>archives.basename</code>. <a href=\"https://xogo.xeo.land/updates/\">Xogo does this</a>, setting\n<code>archives.basename</code> in\n<a href=\"https://github.com/famebot/xeo/blob/xogo/_data.yml\"><code>_data.yml</code></a> to <code>updates</code>\nand <code>archive_title</code> in\n<a href=\"https://github.com/famebot/xeo/blob/xogo/_data/i18n.yml\"><code>_data/i18n.yml</code></a>\nto <code>Updates</code>.</p>\n<h3 id=\"cms\" tabindex=\"-1\"><a href=\"https://xogo.xeo.land/instructions/#cms\" class=\"header-anchor\">CMS</a></h3>\n<p>Like Simple Blog, Xeo includes <a href=\"https://lume.land/cms\">LumeCMS</a> to edit your\nsite easily in a web browser. You can\n<a href=\"https://lume.land/cms/#run-in-localhost\">run LumeCMS locally</a> or publish it\nalongside your built site, ideally\n<a href=\"https://lume.land/cms/deployment/vps/\">deployed to a VPS</a>.</p>\n<h2 id=\"install-as-a-remote-theme\" tabindex=\"-1\"><a href=\"https://xogo.xeo.land/instructions/#install-as-a-remote-theme\" class=\"header-anchor\">Install as a remote theme</a></h2>\n<p>To add the theme to an existing Lume project, add Xeo to imports in <code>deno.json</code>\nthen import it in your <code>_config.ts</code> file as a remote module. Update it by\nchanging the version number in the import URL (or by using\n<a href=\"https://www.jsdelivr.com/package/gh/oscarotero/nudd\">Nudd</a> by\n<a href=\"https://oscarotero.com/\">Óscar Otero</a> like Xeo and Xogo both do):</p>\n<p><code>deno.json</code>:</p>\n<pre><code class=\"language-json\">// […]\n&quot;imports&quot;: {\n    &quot;lume/&quot;: &quot;https://cdn.jsdelivr.net/gh/lumeland/lume@3.2.6/&quot;,\n    // […]\n    &quot;xeo/&quot;: &quot;https://cdn.jsdelivr.net/gh/famebot/xeo@8.1.0/&quot;\n  },\n  // […]\n</code></pre>\n<p><code>_config.ts</code>:</p>\n<pre><code class=\"language-ts\">import lume from &quot;lume/mod.ts&quot;;\nimport xeo from &quot;xeo/mod.ts&quot;;\n\nconst site = lume();\n\nsite.use(xeo());\n\nexport default site;\n</code></pre>\n<p>Copy the <a href=\"https://github.com/famebot/xeo/blob/trunk/_data.yml\"><code>_data.yml</code></a> file\nto your blog root folder and edit it with your data.</p>\n<h2 id=\"use-xeo-as-a-base-template\" tabindex=\"-1\"><a href=\"https://xogo.xeo.land/instructions/#use-xeo-as-a-base-template\" class=\"header-anchor\">Use Xeo as a base template</a></h2>\n<p>To use this theme as a base template for a more customized blog, clone\n<a href=\"https://github.com/famebot/xeo\">famebot/xeo</a> on GitHub and edit the\n<a href=\"https://github.com/famebot/xeo/blob/trunk/_data.yml\"><code>_data.yml</code></a> file.</p>\n","tags":["Instructions","Lume","Xeo"],"date_published":"2025-12-30T13:00:00.000Z"},{"id":"https://xogo.xeo.land/2025-12-solstice/","url":"https://xogo.xeo.land/2025-12-solstice/","title":"2025-12 solstice","language":"en","content_html":"<p>This post only has the title in the filename, <code>2025-12-solstice.md</code>. Because the\npartial date is incomplete and does not have a day value, it gets parsed as part\nof the title. The <code>date</code> (as <code>2025-12-21T15:03Z</code>, the\n<a href=\"https://earthsky.org/astronomy-essentials/everything-you-need-to-know-december-solstice/\">2025 December Solstice</a>)\nthe <code>author</code>, and the <code>tags</code> are in\n<a href=\"https://lume.land/docs/getting-started/page-data/\">front matter</a>, but there is\nno need to put a <code>title</code>, thanks to\n<a href=\"https://lume.land/plugins/extract_date/\">Lume’s Extract date plugin</a>.</p>\n<!--more-->\n<h2 id=\"front-matter-optional\" tabindex=\"-1\"><a href=\"https://xogo.xeo.land/2025-12-solstice/#front-matter-optional\" class=\"header-anchor\">Front matter optional</a></h2>\n<blockquote>\n<p>You have to prepend the date to the filename using the <code>yyyy-mm-dd</code> syntax\nfollowed by a hyphen <code>-</code> or an underscore <code>_</code> (or <code>yyyy-mm-dd-hh-ii-ss</code> if you\nalso need the time). Note that [the date] is removed [by default] when\ngenerating the final url […] Dates can be defined in folders, so it's shared\nby all pages inside […]</p>\n</blockquote>\n<p>– <a href=\"https://lume.land/plugins/extract_date/#description\">Extract date, lume.land</a></p>\n<p>Since the current implementation uses a\n<a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Lookahead_assertion\">negative lookahead</a>\nto remove hyphens that do not\n<a href=\"https://github.com/famebot/xeo/blob/v7.0.0/plugins.ts#L149\">precede digits 0-9</a>,\n<code>solstice-2025-12.md</code> would end up keeping the hyphen and render as\n“Solstice-2025-12” compared to “2025-12 solstice” here. I consider this\ninconsistency a limitation I can live with for now. There is a draft in the\nexample posts that tests the scenario with a date and title in the filename.</p>\n<p>With <a href=\"https://xogo.xeo.land/no-title/\">No title</a>, the title in the built site comes from the\n<a href=\"https://lume.land/docs/creating-pages/urls/#basename\"><code>basename</code></a> of the\n<code>no-title</code> folder containing the <code>index.md</code> file.</p>\n","tags":["Date","Front Matter","Lume","Xeo"],"date_published":"2025-12-21T15:03:00.000Z"},{"id":"https://xogo.xeo.land/no-title/","url":"https://xogo.xeo.land/no-title/","title":"No title","language":"en","content_html":"<p>A post with <code>date</code>, <code>author</code>, and <code>tags</code> in the\n<a href=\"https://lume.land/docs/getting-started/page-data/\">front matter</a>, but no title.\nThe source file named <code>index.md</code> is inside a folder named <code>no-title</code>. The\n<a href=\"https://lume.land/docs/creating-pages/urls/#basename\"><code>basename</code></a> gets\ntransformed to “No title” in the built site because the <code>index.md</code> file works\nlike an <code>index.html</code> file and assumes the name of its directory.</p>\n<p>There is a draft in the example posts that tests the scenario with a date and\ntitle in the filename. In the <a href=\"https://xogo.xeo.land/2025-12-solstice/\">2025-12 solstice</a> filename\n(<code>2025-12-solstice.md</code>) the partial, incomplete date gets parsed as part of the\ntitle because it lacks a day value.</p>\n","tags":["Front Matter","Title"],"date_published":"2025-01-01T13:00:00.000Z"}]}