<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Eleventy Markdown Prime</title><link>https://emp-starter.lastguru.dev/</link><description>A minimalistic text-focused Eleventy theme</description><language>en</language><atom:link href="https://emp-starter.lastguru.dev/rss.xml" rel="self" type="application/rss+xml" /><managingEditor>example@example.com (Dmitry Golubev)</managingEditor><image><url>https://emp-starter.lastguru.dev/images/logo-PX75kRIE8o-512w.png</url><title>Eleventy Markdown Prime</title><link>https://emp-starter.lastguru.dev/</link></image><lastBuildDate>Sun, 17 Aug 2025 00:00:00 +0000</lastBuildDate><item><title>Sample 2023 pinned event</title><link>https://emp-starter.lastguru.dev/sample-2023-pinned-event/</link><guid isPermaLink="true">https://emp-starter.lastguru.dev/sample-2023-pinned-event/</guid><pubDate>Fri, 09 Jun 2023 00:00:00 +0000</pubDate><author>example@example.com (Dmitry Golubev)</author><description>&lt;h2 id=&quot;what-a-great-event&quot; tabindex=&quot;-1&quot;&gt;What a great event&lt;/h2&gt;&lt;p&gt;This sample displays badges, attendance and a disabled event button from Markdown front matter. The values and event status are authored manually; there is no registration workflow or live counter.&lt;/p&gt;</description><category>Events</category></item><item><title>Getting Started</title><link>https://emp-starter.lastguru.dev/getting-started/</link><guid isPermaLink="true">https://emp-starter.lastguru.dev/getting-started/</guid><pubDate>Fri, 23 May 2025 00:00:00 +0000</pubDate><author>example@example.com (Dmitry Golubev)</author><description>&lt;p&gt;This guide covers creating an Eleventy Markdown Prime (EMP) repository, configuring the site, adding content and deploying it.&lt;/p&gt;&lt;h2 id=&quot;table-of-contents&quot; tabindex=&quot;-1&quot;&gt;Table of Contents&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;#create-your-site-repository&quot;&gt;Create Your Site Repository&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;#run-the-template-locally-%28optional%29&quot;&gt;Run the Template Locally (Optional)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;#site-structure&quot;&gt;Site Structure&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;#file-structure&quot;&gt;File Structure&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;#configuration-files&quot;&gt;Configuration Files&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;#posts-and-pages&quot;&gt;Posts and Pages&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;#deploying-to-cloudflare-pages&quot;&gt;Deploying to Cloudflare Pages&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;#other-deployment-environments&quot;&gt;Other Deployment Environments&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 id=&quot;create-your-site-repository&quot; tabindex=&quot;-1&quot;&gt;Create Your Site Repository&lt;/h2&gt;&lt;p&gt;To build your website, you need your own copy of the EMP starter repository. This allows you to customize the site, save your changes, and deploy it online. The EMP starter repository is available here: &lt;a href=&quot;https://github.com/lastguru-net/emp&quot;&gt;EMP Starter Repository&lt;/a&gt;.&lt;/p&gt;&lt;h3 id=&quot;steps-to-create-your-repository&quot; tabindex=&quot;-1&quot;&gt;Steps to Create Your Repository&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;Go to the &lt;a href=&quot;https://github.com/lastguru-net/emp&quot;&gt;EMP Starter Repository&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Click &lt;strong&gt;Use this template&lt;/strong&gt; or &lt;strong&gt;Fork&lt;/strong&gt; (see the next section for guidance on which to choose).&lt;/li&gt;&lt;li&gt;Name your repository and choose public or private.&lt;/li&gt;&lt;li&gt;If you want to edit files locally on your computer, clone your repository:&lt;figure class=&quot;code-block&quot;&gt;&lt;figcaption class=&quot;code-block-header&quot;&gt;&lt;span class=&quot;code-block-language&quot;&gt;Code&lt;/span&gt;&lt;button class=&quot;code-block-copy code-block-copy-pending&quot; type=&quot;button&quot; aria-label=&quot;Copy code to clipboard&quot; data-copy-success=&quot;Code copied&quot; data-copy-error=&quot;The code could not be copied&quot; disabled aria-hidden=&quot;true&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path d=&quot;M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z&quot; /&gt;&lt;/svg&gt;&lt;/button&gt;&lt;span class=&quot;sr-only&quot; role=&quot;status&quot; aria-live=&quot;polite&quot; aria-atomic=&quot;true&quot;&gt;&lt;/span&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;git clone &lt;your-repo-url&gt;
cd &lt;your-repo&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/li&gt;&lt;li&gt;Alternatively, you can edit files directly in your repository using GitHub’s web interface. Simply navigate to the file you want to edit, click the pencil icon, make your changes, and commit them.&lt;/li&gt;&lt;/ol&gt;&lt;h3 id=&quot;fork-vs-template%3A-which-should-you-choose%3F&quot; tabindex=&quot;-1&quot;&gt;Fork vs Template: Which Should You Choose?&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Use this template&lt;/strong&gt;: Creates a new repository in your GitHub account with no connection to the original. Best if you want a clean start and don’t plan to sync updates from the EMP repository.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Fork&lt;/strong&gt;: Creates a copy of the repository in your GitHub account, keeping the full history and a link to the original (upstream). Ideal if you want to pull future updates from EMP or contribute back.&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Changes to layouts, configuration or build scripts may need manual adaptation when merging upstream updates, especially if your directory structure differs from EMP.&lt;/p&gt;&lt;/blockquote&gt;&lt;h3 id=&quot;keeping-your-repository-updated&quot; tabindex=&quot;-1&quot;&gt;Keeping Your Repository Updated&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;If you forked&lt;/strong&gt;:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Open your fork on GitHub.&lt;/li&gt;&lt;li&gt;Click &lt;strong&gt;Sync fork&lt;/strong&gt; (or &lt;strong&gt;Fetch upstream&lt;/strong&gt;) to pull updates from the EMP repository.&lt;/li&gt;&lt;li&gt;Alternatively, use the command line after adding the original repository as an &lt;code&gt;upstream&lt;/code&gt; remote (once per clone):&lt;figure class=&quot;code-block&quot;&gt;&lt;figcaption class=&quot;code-block-header&quot;&gt;&lt;span class=&quot;code-block-language&quot;&gt;Code&lt;/span&gt;&lt;button class=&quot;code-block-copy code-block-copy-pending&quot; type=&quot;button&quot; aria-label=&quot;Copy code to clipboard&quot; data-copy-success=&quot;Code copied&quot; data-copy-error=&quot;The code could not be copied&quot; disabled aria-hidden=&quot;true&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path d=&quot;M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z&quot; /&gt;&lt;/svg&gt;&lt;/button&gt;&lt;span class=&quot;sr-only&quot; role=&quot;status&quot; aria-live=&quot;polite&quot; aria-atomic=&quot;true&quot;&gt;&lt;/span&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;git remote add upstream https://github.com/lastguru-net/emp.git&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
Then fetch and merge updates:&lt;figure class=&quot;code-block&quot;&gt;&lt;figcaption class=&quot;code-block-header&quot;&gt;&lt;span class=&quot;code-block-language&quot;&gt;Code&lt;/span&gt;&lt;button class=&quot;code-block-copy code-block-copy-pending&quot; type=&quot;button&quot; aria-label=&quot;Copy code to clipboard&quot; data-copy-success=&quot;Code copied&quot; data-copy-error=&quot;The code could not be copied&quot; disabled aria-hidden=&quot;true&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path d=&quot;M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z&quot; /&gt;&lt;/svg&gt;&lt;/button&gt;&lt;span class=&quot;sr-only&quot; role=&quot;status&quot; aria-live=&quot;polite&quot; aria-atomic=&quot;true&quot;&gt;&lt;/span&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;git fetch upstream
git merge upstream/main   # or: git rebase upstream/main
git push&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;If you used the template&lt;/strong&gt;:&lt;br /&gt;
Your repository has no shared commit history with EMP, so GitHub’s &lt;strong&gt;Sync fork&lt;/strong&gt; option is not available. If you need updates, you can manually copy changes from the EMP repository.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;run-the-template-locally-(optional)&quot; tabindex=&quot;-1&quot;&gt;Run the Template Locally (Optional)&lt;/h2&gt;&lt;p&gt;Running the site locally is optional. If you prefer, you can skip this step and deploy your site directly from the repository. See the &lt;a href=&quot;#deploying-to-cloudflare-pages&quot;&gt;Deploying to Cloudflare Pages&lt;/a&gt; section for details.&lt;/p&gt;&lt;p&gt;If you want to preview and edit your site locally, follow these steps.&lt;/p&gt;&lt;h3 id=&quot;prerequisites&quot; tabindex=&quot;-1&quot;&gt;Prerequisites&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;Install &lt;strong&gt;Git&lt;/strong&gt;: &lt;a href=&quot;https://git-scm.com/downloads&quot;&gt;Download Git&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Install &lt;strong&gt;Node.js 24 or newer&lt;/strong&gt; and npm:
&lt;ul&gt;&lt;li&gt;Visit the &lt;a href=&quot;https://nodejs.org/en/download/&quot;&gt;Node.js Download Page&lt;/a&gt;, which provides both prebuilt packages and instructions for setting up a version manager (e.g., nvm).&lt;/li&gt;&lt;li&gt;Using a version manager is recommended as it makes it easier to update Node.js in the future.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Verify installation:&lt;figure class=&quot;code-block&quot;&gt;&lt;figcaption class=&quot;code-block-header&quot;&gt;&lt;span class=&quot;code-block-language&quot;&gt;Code&lt;/span&gt;&lt;button class=&quot;code-block-copy code-block-copy-pending&quot; type=&quot;button&quot; aria-label=&quot;Copy code to clipboard&quot; data-copy-success=&quot;Code copied&quot; data-copy-error=&quot;The code could not be copied&quot; disabled aria-hidden=&quot;true&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path d=&quot;M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z&quot; /&gt;&lt;/svg&gt;&lt;/button&gt;&lt;span class=&quot;sr-only&quot; role=&quot;status&quot; aria-live=&quot;polite&quot; aria-atomic=&quot;true&quot;&gt;&lt;/span&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;node -v
npm -v&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3 id=&quot;running-the-site-locally&quot; tabindex=&quot;-1&quot;&gt;Running the Site Locally&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;Go to the repository folder.&lt;/li&gt;&lt;li&gt;Install dependencies:&lt;figure class=&quot;code-block&quot;&gt;&lt;figcaption class=&quot;code-block-header&quot;&gt;&lt;span class=&quot;code-block-language&quot;&gt;Code&lt;/span&gt;&lt;button class=&quot;code-block-copy code-block-copy-pending&quot; type=&quot;button&quot; aria-label=&quot;Copy code to clipboard&quot; data-copy-success=&quot;Code copied&quot; data-copy-error=&quot;The code could not be copied&quot; disabled aria-hidden=&quot;true&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path d=&quot;M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z&quot; /&gt;&lt;/svg&gt;&lt;/button&gt;&lt;span class=&quot;sr-only&quot; role=&quot;status&quot; aria-live=&quot;polite&quot; aria-atomic=&quot;true&quot;&gt;&lt;/span&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;npm install&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/li&gt;&lt;li&gt;Start the development server:&lt;figure class=&quot;code-block&quot;&gt;&lt;figcaption class=&quot;code-block-header&quot;&gt;&lt;span class=&quot;code-block-language&quot;&gt;Code&lt;/span&gt;&lt;button class=&quot;code-block-copy code-block-copy-pending&quot; type=&quot;button&quot; aria-label=&quot;Copy code to clipboard&quot; data-copy-success=&quot;Code copied&quot; data-copy-error=&quot;The code could not be copied&quot; disabled aria-hidden=&quot;true&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path d=&quot;M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z&quot; /&gt;&lt;/svg&gt;&lt;/button&gt;&lt;span class=&quot;sr-only&quot; role=&quot;status&quot; aria-live=&quot;polite&quot; aria-atomic=&quot;true&quot;&gt;&lt;/span&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;npm run dev&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/li&gt;&lt;li&gt;Open the URL shown in the terminal (usually &lt;code&gt;http://localhost:8080&lt;/code&gt;) to preview your site.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;For more detailed guides on setting up Node.js and npm, check:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://nodejs.dev/en/learn/&quot;&gt;Beginner’s Guide to Node.js&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.npmjs.com/downloading-and-installing-node-js-and-npm&quot;&gt;Installing Node.js and npm&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;site-structure&quot; tabindex=&quot;-1&quot;&gt;Site Structure&lt;/h2&gt;&lt;p&gt;The regular layout has four areas:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Sidebar&lt;/strong&gt;: Always visible on larger screens and hidden on mobile devices. The sidebar is defined in the configuration files and includes:
&lt;ul&gt;&lt;li&gt;Site logo or profile image&lt;/li&gt;&lt;li&gt;Site title and description&lt;/li&gt;&lt;li&gt;Main menu (manually defined for full control)&lt;/li&gt;&lt;li&gt;Search button (opens a search modal window)&lt;/li&gt;&lt;li&gt;Social links (GitHub, LinkedIn, Mastodon, etc.), shown in the sidebar or footer&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Top Bar&lt;/strong&gt;: Displayed only on mobile devices. It shows the site title and provides a hamburger icon to show the sidebar.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Content Area&lt;/strong&gt;: Always visible on all screens, this is where your site content is displayed. Depending on the location, it serves the following purposes:
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Index Page (Landing Page)&lt;/strong&gt;: The first page visitors usually see.
&lt;ul&gt;&lt;li&gt;Features an optional header image on top.&lt;/li&gt;&lt;li&gt;Lists non-hidden posts newest first, with pinned posts at the top. Each post includes a title, description (or excerpt), and optional properties like date, location, author, tags, and reading time.&lt;/li&gt;&lt;li&gt;Optional thumbnails can be enabled and placed on the left or right; they are responsive and clickable.&lt;/li&gt;&lt;li&gt;If there are more than a configured number of posts (10 by default), pagination with navigation controls appears at the bottom.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Tag Page&lt;/strong&gt;: Similar to the landing page but without a header image. Lists posts with a specific tag (e.g., “events”).
&lt;ul&gt;&lt;li&gt;Supports pagination and is generated automatically for each tag.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Author Page&lt;/strong&gt;: Similar to the landing page but without a header image. Lists posts by a specific author (e.g., “lastguru”).
&lt;ul&gt;&lt;li&gt;Supports pagination and is generated automatically for each author.&lt;/li&gt;&lt;li&gt;When enabled, an author business card (photo, bio, website/email, socials) is displayed above the list.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Post&lt;/strong&gt;: The most common content type - a blog post.
&lt;ul&gt;&lt;li&gt;Includes a title, date, and optional image. Additional properties like location, author, and tags can be added.&lt;/li&gt;&lt;li&gt;Below each post, share buttons and navigation buttons for newer/older posts are available.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Page&lt;/strong&gt;: Special content like “About Us.” Pages are not listed among blog posts and do not include dates, post properties, or navigation buttons. They are typically linked directly in the main menu or from other posts or pages.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Footer&lt;/strong&gt;: Optional footer with social links, copyright information, privacy policy link and “Powered by” link.&lt;/li&gt;&lt;/ol&gt;&lt;h2 id=&quot;file-structure&quot; tabindex=&quot;-1&quot;&gt;File Structure&lt;/h2&gt;&lt;p&gt;Site content, configuration and templates are stored in these files and directories:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Utility configuration files are located in the root folder (e.g., &lt;code&gt;/package.json&lt;/code&gt;, &lt;code&gt;/eleventy.config.mjs&lt;/code&gt;). Avoid modifying these unless necessary.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;/_11ty&lt;/strong&gt;: Contains custom components that enhance Eleventy. Scripts for tasks like image transformation, link transformation, and excerpt generation are located here. Modifications are rarely needed.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;/assets&lt;/strong&gt;: Stores shared files for your site. You can modify or add files here. Visitors can access these files via direct links.
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;css&lt;/strong&gt;: Contains CSS source files. Eleventy assembles them through &lt;code&gt;content/utils/css.njk&lt;/code&gt;, and Tailwind CSS compiles and minifies the result into &lt;code&gt;_site/assets/css/min.css&lt;/code&gt;. Add custom styles in &lt;code&gt;custom.css&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;js&lt;/strong&gt;: Contains JavaScript files. The &lt;code&gt;min.js&lt;/code&gt; file is generated by Eleventy (&lt;code&gt;content/utils/js.njk&lt;/code&gt;) by inlining feature scripts.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;/content&lt;/strong&gt;: Contains all site content.
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;_data&lt;/strong&gt;: Stores site configuration (see below).&lt;/li&gt;&lt;li&gt;&lt;strong&gt;_includes&lt;/strong&gt;: Contains template files for HTML output.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;images&lt;/strong&gt;: Stores image files. Images displayed in page content are automatically optimized and converted to various formats and sizes. Special images like the favicon are also stored here.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;pages&lt;/strong&gt;: Contains page files.
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;pages.json&lt;/strong&gt;: Defines default variables for pages.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;posts&lt;/strong&gt;: Contains post files. For better organization, posts are subdivided into year-based subfolders (e.g., &lt;code&gt;/2025/&lt;/code&gt;). Subfolder names do not appear in URLs, so you can name them freely. For smaller sites, this organization is optional.
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;posts.json&lt;/strong&gt;: Defines default variables for posts.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;utils&lt;/strong&gt;: Contains additional templates like the “Error 404” page and &lt;code&gt;robots.txt&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;index.njk&lt;/strong&gt;: Template for the landing page.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;index.11tydata.js&lt;/strong&gt;: Pagination size control for the landing page.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;author.njk&lt;/strong&gt;: Template for author pages.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;tag.njk&lt;/strong&gt;: Template for tag pages.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;configuration-files&quot; tabindex=&quot;-1&quot;&gt;Configuration Files&lt;/h2&gt;&lt;p&gt;Edit the following files to configure the site:&lt;/p&gt;&lt;h3 id=&quot;%2Fcontent%2F_data%2Fsiteconfig.js&quot; tabindex=&quot;-1&quot;&gt;&lt;code&gt;/content/_data/siteconfig.js&lt;/code&gt;&lt;/h3&gt;&lt;p&gt;This file contains the essential configuration settings for your site. It defines global properties such as the site title, URL and main images. There are comments for every setting in the file itself. Key sections include:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Site Metadata&lt;/strong&gt;: Title, description, author, and locale settings.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Images&lt;/strong&gt;: Paths for the sidebar profile image, favicon, and OpenGraph default image.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Integrations&lt;/strong&gt;: Optional Google tag and Meta app/pixel configuration.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Pagination&lt;/strong&gt;: number of posts per page, and the link prefixes for author/tag pages.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This file is the starting point for setting up your site.&lt;/p&gt;&lt;h3 id=&quot;%2Fcontent%2F_data%2Fsiteelements.json5&quot; tabindex=&quot;-1&quot;&gt;&lt;code&gt;/content/_data/siteelements.json5&lt;/code&gt;&lt;/h3&gt;&lt;p&gt;This file contains configuration for site-specific elements such as menu items, fonts, social media links, header and footer settings. Key sections include:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Features&lt;/strong&gt;: Settings for post properties, JSON-LD structured data, sitemap and feed links, and social sharing buttons. The sitemap and feed files are generated regardless of their link settings. Set &lt;code&gt;features.postproperties&lt;/code&gt; to &lt;code&gt;&amp;quot;below&amp;quot;&lt;/code&gt; (default) or &lt;code&gt;&amp;quot;above&amp;quot;&lt;/code&gt; for placement relative to the full-post image, or &lt;code&gt;false&lt;/code&gt; to hide properties everywhere. &lt;code&gt;true&lt;/code&gt; also places properties below the image.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Fonts&lt;/strong&gt;: Google Fonts configuration for body and header typography that can be later used in &lt;code&gt;theme.css&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Menu&lt;/strong&gt;: Labels and URLs for the home link and additional menu items.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Header&lt;/strong&gt;: Header image for the landing page.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Social Links&lt;/strong&gt;: Links to social media profiles (e.g., GitHub, LinkedIn, Mastodon). Also used for share attribution (e.g., X “via”).&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Privacy Policy&lt;/strong&gt;: Configuration for the privacy policy link.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Powered by&lt;/strong&gt;: Powered by text and link.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Copyright&lt;/strong&gt;: Settings for copyright year, link, and text.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Modify this file to customize visible elements, navigation and site identity.&lt;/p&gt;&lt;h4 id=&quot;json-postlists&quot; tabindex=&quot;-1&quot;&gt;JSON postlists&lt;/h4&gt;&lt;p&gt;Set &lt;code&gt;features.index: &amp;quot;json&amp;quot;&lt;/code&gt; and &lt;code&gt;features.js: true&lt;/code&gt; to load post lists from JSON in the browser. This applies to the homepage and tag and author archives. Use &lt;code&gt;features.index: &amp;quot;postlist&amp;quot;&lt;/code&gt; (the default) to render post lists during the build.&lt;/p&gt;&lt;p&gt;The build exports Markdown posts to JSON files in a &lt;code&gt;postlist/&lt;/code&gt; directory beneath each list’s first page. For example, &lt;code&gt;/postlist/1.json&lt;/code&gt; contains the first page of the homepage list, and &lt;code&gt;/events/postlist/2.json&lt;/code&gt; contains the second page of the events list. Your static host serves these files.&lt;/p&gt;&lt;p&gt;To load JSON from another source, set &lt;code&gt;postlist.source&lt;/code&gt; in the page’s front matter or Eleventy data:&lt;/p&gt;&lt;figure class=&quot;code-block&quot;&gt;&lt;figcaption class=&quot;code-block-header&quot;&gt;&lt;span class=&quot;code-block-language&quot;&gt;YAML&lt;/span&gt;&lt;button class=&quot;code-block-copy code-block-copy-pending&quot; type=&quot;button&quot; aria-label=&quot;Copy code to clipboard&quot; data-copy-success=&quot;Code copied&quot; data-copy-error=&quot;The code could not be copied&quot; disabled aria-hidden=&quot;true&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path d=&quot;M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z&quot; /&gt;&lt;/svg&gt;&lt;/button&gt;&lt;span class=&quot;sr-only&quot; role=&quot;status&quot; aria-live=&quot;polite&quot; aria-atomic=&quot;true&quot;&gt;&lt;/span&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token key atrule&quot;&gt;postlist&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;source&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; /data/events/&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;p&gt;With this setting, EMP requests &lt;code&gt;/data/events/1.json&lt;/code&gt;, &lt;code&gt;/data/events/2.json&lt;/code&gt;, and so on. You supply those files or responses; EMP does not export Markdown posts for that list.&lt;/p&gt;&lt;p&gt;Use a path from the site root or an absolute HTTP(S) URL. EMP adds the deployment prefix to site-root paths: with a &lt;code&gt;/blog/&lt;/code&gt; deployment, &lt;code&gt;/data/events/&lt;/code&gt; becomes &lt;code&gt;/blog/data/events/&lt;/code&gt;. Do not put that prefix in &lt;code&gt;postlist.source&lt;/code&gt;. A trailing slash is optional. A source on another origin must allow cross-origin requests (CORS); requests omit credentials.&lt;/p&gt;&lt;p&gt;For a custom list, use &lt;code&gt;layout: base.njk&lt;/code&gt; and include &lt;code&gt;postlist.njk&lt;/code&gt; in a Nunjucks page. Set its &lt;code&gt;postlist.source&lt;/code&gt; and enable JSON mode as above. The source can provide posts without corresponding local Markdown files. Pages whose permalinks do not end in &lt;code&gt;/&lt;/code&gt; require an explicit source directory.&lt;/p&gt;&lt;p&gt;Each JSON response contains the cards for one page and pagination metadata:&lt;/p&gt;&lt;figure class=&quot;code-block&quot;&gt;&lt;figcaption class=&quot;code-block-header&quot;&gt;&lt;span class=&quot;code-block-language&quot;&gt;JSON&lt;/span&gt;&lt;button class=&quot;code-block-copy code-block-copy-pending&quot; type=&quot;button&quot; aria-label=&quot;Copy code to clipboard&quot; data-copy-success=&quot;Code copied&quot; data-copy-error=&quot;The code could not be copied&quot; disabled aria-hidden=&quot;true&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path d=&quot;M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z&quot; /&gt;&lt;/svg&gt;&lt;/button&gt;&lt;span class=&quot;sr-only&quot; role=&quot;status&quot; aria-live=&quot;polite&quot; aria-atomic=&quot;true&quot;&gt;&lt;/span&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;items&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;url&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;/workshop/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Workshop&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;excerpt&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;A practical introduction.&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;pagination&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;page&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;totalPages&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;p&gt;&lt;code&gt;page&lt;/code&gt; is a one-based page number and &lt;code&gt;totalPages&lt;/code&gt; is the number of pages in the list. For an empty list, &lt;code&gt;1.json&lt;/code&gt; returns &lt;code&gt;items: []&lt;/code&gt; and &lt;code&gt;pagination: { &amp;quot;page&amp;quot;: null, &amp;quot;totalPages&amp;quot;: 0 }&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;Each item requires a &lt;code&gt;url&lt;/code&gt; and a &lt;code&gt;title&lt;/code&gt;. Optional fields are &lt;code&gt;excerpt&lt;/code&gt;, &lt;code&gt;pinned&lt;/code&gt;, &lt;code&gt;thumbnail&lt;/code&gt; and &lt;code&gt;properties&lt;/code&gt;. Supply text without HTML or HTML escaping. For links and images, use site-root paths that include the deployment prefix, or absolute URLs. Site-root paths refer to the website, not the JSON host.&lt;/p&gt;&lt;p&gt;A &lt;code&gt;thumbnail&lt;/code&gt; contains &lt;code&gt;src&lt;/code&gt; and optional &lt;code&gt;srcset&lt;/code&gt;, &lt;code&gt;sizes&lt;/code&gt;, &lt;code&gt;width&lt;/code&gt; and &lt;code&gt;height&lt;/code&gt;. Its optional &lt;code&gt;sources&lt;/code&gt; array contains objects with &lt;code&gt;type&lt;/code&gt; and &lt;code&gt;srcset&lt;/code&gt; for alternative image formats. The optional numeric &lt;code&gt;lqip&lt;/code&gt; field supplies the blur placeholder.&lt;/p&gt;&lt;p&gt;The &lt;code&gt;properties&lt;/code&gt; object accepts:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;date&lt;/code&gt;: formatted date text.&lt;/li&gt;&lt;li&gt;&lt;code&gt;author&lt;/code&gt;: an object with &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;url&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;place&lt;/code&gt;: an object with &lt;code&gt;name&lt;/code&gt; and optional &lt;code&gt;address&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;tags&lt;/code&gt;: an array of objects with &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;url&lt;/code&gt; and optional &lt;code&gt;icon&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;readingTime&lt;/code&gt;: an object with &lt;code&gt;label&lt;/code&gt; and &lt;code&gt;wordsLabel&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;decorations&lt;/code&gt;: the &lt;a href=&quot;#post-decorations&quot;&gt;post decoration fields&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Icon names refer to entries in &lt;code&gt;inlinesvg.json5&lt;/code&gt;. Markdown exports supply formatted text, image variants and links; use an exported JSON file as a reference when creating your own source.&lt;/p&gt;&lt;p&gt;Pagination links use &lt;code&gt;?page=N&lt;/code&gt;; JSON requests use &lt;code&gt;N.json&lt;/code&gt;. Reload, new tabs and browser Back/Forward select the page in the URL. Without a valid &lt;code&gt;page&lt;/code&gt; query, an HTML page loads its corresponding JSON page. Use one list per HTML page.&lt;/p&gt;&lt;p&gt;If a request fails, the displayed cards and pagination links stay available. Click the link again to repeat the request, or reload if the initial load failed. Configure empty-list and error messages in &lt;code&gt;sitestrings.json5&lt;/code&gt;.&lt;/p&gt;&lt;h3 id=&quot;%2Fcontent%2F_data%2Fsitestrings.json5&quot; tabindex=&quot;-1&quot;&gt;&lt;code&gt;/content/_data/sitestrings.json5&lt;/code&gt;&lt;/h3&gt;&lt;p&gt;This file defines text strings used throughout the site. It allows you to customize or translate common UI elements such as:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Labels&lt;/strong&gt;: Words like “Share,” “Older,” “Newer,” and “Events.”&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Tooltips&lt;/strong&gt;: Text for actions like “Copy page link to clipboard” and “Copied.”&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;You can add your own keys and reference them in templates. Use it to adapt the site’s language and tone. Note that multiple languages can be defined there. The language is selected by the &lt;code&gt;lang&lt;/code&gt; option in the &lt;code&gt;siteconfig.js&lt;/code&gt;.&lt;/p&gt;&lt;h3 id=&quot;%2Fcontent%2F_data%2Fsitetags.json5&quot; tabindex=&quot;-1&quot;&gt;&lt;code&gt;/content/_data/sitetags.json5&lt;/code&gt;&lt;/h3&gt;&lt;p&gt;This file manages tag-related configurations for posts. It includes:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;notime&lt;/strong&gt;: Tags that hide post reading time in post properties (e.g., “events”).&lt;/li&gt;&lt;li&gt;&lt;strong&gt;notag&lt;/strong&gt;: Tags that are hidden in post properties (e.g., “article,” “posts”).&lt;/li&gt;&lt;li&gt;&lt;strong&gt;events&lt;/strong&gt;: Tags that trigger Event JSON-LD instead of BlogPosting.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;icons&lt;/strong&gt;: Overrides for the standard tag icon in post properties.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;aliases&lt;/strong&gt;: Overrides the link to the tag page.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This file helps control how tags are presented and used across the site.&lt;/p&gt;&lt;h3 id=&quot;%2Fcontent%2F_data%2Fsiteauthors.json5&quot; tabindex=&quot;-1&quot;&gt;&lt;code&gt;/content/_data/siteauthors.json5&lt;/code&gt;&lt;/h3&gt;&lt;p&gt;This file defines per-author metadata used to render the author business card on author pages. Each top-level key is the author identifier used in your post header variables (&lt;code&gt;author: &amp;quot;name&amp;quot;&lt;/code&gt;). If an author has no entry here, the business card is not displayed. The card can show the author’s name, profile image, bio, and links to a website and social media.&lt;/p&gt;&lt;h3 id=&quot;%2Fassets%2Fcss%2Ftheme.css&quot; tabindex=&quot;-1&quot;&gt;&lt;code&gt;/assets/css/theme.css&lt;/code&gt;&lt;/h3&gt;&lt;p&gt;This file defines the core theme styles for your site, including fonts, colors, and layout spacing. It uses CSS custom properties (variables) to ensure flexibility and consistency across the site. Key sections include:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Fonts&lt;/strong&gt;: Defines the primary fonts for the body and headers using the &lt;code&gt;--font-body&lt;/code&gt; and &lt;code&gt;--font-header&lt;/code&gt; variables.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Colors&lt;/strong&gt;: Defines the palette for backgrounds, text, and common UI states, plus the accent color (&lt;code&gt;--color-accent&lt;/code&gt;) used on interactive highlights and hovers.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Spacing&lt;/strong&gt;: Configures the maximum width for content (&lt;code&gt;--spacing-content&lt;/code&gt;) and the width of the sidebar (&lt;code&gt;--spacing-sidebar&lt;/code&gt;).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Notes:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Use fonts installed on visitors’ devices or load web fonts. EMP supports Google Fonts through &lt;code&gt;/content/_data/siteelements.json5&lt;/code&gt;; use the corresponding font family names in &lt;code&gt;theme.css&lt;/code&gt;. The fallback fonts in each list are used when the preferred font is unavailable.&lt;/li&gt;&lt;li&gt;The content area uses &lt;code&gt;--color-rightarea-bg&lt;/code&gt; and &lt;code&gt;--color-rightarea-bg-dark&lt;/code&gt; for its light and dark backgrounds. The mobile top bar uses &lt;code&gt;--color-topbar-bg&lt;/code&gt; and &lt;code&gt;--color-topbar-bg-dark&lt;/code&gt;, which default to the light content background and sidebar background respectively.&lt;/li&gt;&lt;li&gt;The footer background (&lt;code&gt;--color-footer-bg&lt;/code&gt;) defaults to the sidebar background (&lt;code&gt;--color-sidebar-bg&lt;/code&gt;).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This file is processed by Tailwind CSS to generate the final &lt;code&gt;min.css&lt;/code&gt; file, which is used to style the site. You can extend or override these variables to customize the theme further.&lt;/p&gt;&lt;h2 id=&quot;posts-and-pages&quot; tabindex=&quot;-1&quot;&gt;Posts and Pages&lt;/h2&gt;&lt;p&gt;Posts and pages are written in Markdown, a simple and widely-used markup language. You can learn more about Markdown’s features on the &lt;a href=&quot;/text-and-typography&quot;&gt;Text and Typography&lt;/a&gt; page. Each Markdown file has a &lt;code&gt;.md&lt;/code&gt; extension and consists of two parts: a header and a content body.&lt;/p&gt;&lt;p&gt;Example:&lt;/p&gt;&lt;figure class=&quot;code-block&quot;&gt;&lt;figcaption class=&quot;code-block-header&quot;&gt;&lt;span class=&quot;code-block-language&quot;&gt;Markdown&lt;/span&gt;&lt;button class=&quot;code-block-copy code-block-copy-pending&quot; type=&quot;button&quot; aria-label=&quot;Copy code to clipboard&quot; data-copy-success=&quot;Code copied&quot; data-copy-error=&quot;The code could not be copied&quot; disabled aria-hidden=&quot;true&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path d=&quot;M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z&quot; /&gt;&lt;/svg&gt;&lt;/button&gt;&lt;span class=&quot;sr-only&quot; role=&quot;status&quot; aria-live=&quot;polite&quot; aria-atomic=&quot;true&quot;&gt;&lt;/span&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token front-matter-block&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;token front-matter yaml language-yaml&quot;&gt;&lt;span class=&quot;token key atrule&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Sample 2023 Event&quot;&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;date&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;2023-06-09&quot;&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;place&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Somewhere over the rainbow&quot;&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;tags&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; events
&lt;span class=&quot;token key atrule&quot;&gt;excerpt&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Excerpt of the description for the sample event.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;---&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token title important&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;##&lt;/span&gt; What a Great Event&lt;/span&gt;

Sample event. Please visit us.&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;h3 id=&quot;editing-with-pagescms-(optional)&quot; tabindex=&quot;-1&quot;&gt;Editing with PagesCMS (Optional)&lt;/h3&gt;&lt;p&gt;If you prefer a more user-friendly editing experience (especially for non-technical editors), you can manage your EMP content with &lt;a href=&quot;https://pagescms.org/&quot;&gt;&lt;strong&gt;PagesCMS&lt;/strong&gt;&lt;/a&gt;. PagesCMS connects to your GitHub repository and provides a browser-based editor for Markdown content. Changes are saved back to the repository as commits, which then trigger your normal deployment pipeline (e.g., Cloudflare Pages rebuilds automatically).&lt;/p&gt;&lt;h3 id=&quot;header-variables&quot; tabindex=&quot;-1&quot;&gt;Header Variables&lt;/h3&gt;&lt;p&gt;The header contains metadata for the post or page. Set &lt;strong&gt;title&lt;/strong&gt; for both posts and pages, and an explicit &lt;strong&gt;date&lt;/strong&gt; for posts. Supported variables include:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;title&lt;/strong&gt; (&lt;em&gt;required&lt;/em&gt;): The title of the post or page. The URL is based on the title unless overridden in the header.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;date&lt;/strong&gt; (&lt;em&gt;recommended for posts&lt;/em&gt;): The publication date in &lt;code&gt;YYYY-MM-DD&lt;/code&gt; format or with time in &lt;code&gt;YYYY-MM-DD HH:MM:SS&lt;/code&gt; or &lt;code&gt;YYYY-MM-DD HH:MM:SS +/-TTTT&lt;/code&gt; format.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;updated&lt;/strong&gt;: Optional last modification date in the same formats as &lt;strong&gt;date&lt;/strong&gt;. When present, it is used in JSON-LD, the sitemap, and the Atom and JSON feeds.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;permalink&lt;/strong&gt;: Overrides the default URL for the post/page.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;image&lt;/strong&gt;: Path to the title image, relative to the &lt;code&gt;content&lt;/code&gt; folder.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;thumbnail&lt;/strong&gt;: Optional path for a thumbnail image to use in post lists instead of the title image. To hide the thumbnail completely instead, use &lt;code&gt;thumbnail: false&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;excerpt&lt;/strong&gt;: A description used in post lists. If defined, it has no length limit. If omitted, an excerpt is generated from the first nonempty line of rendered content after removing HTML tags, shortened to at most 250 characters at a word boundary where possible. An ellipsis is added when content is omitted.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;tags&lt;/strong&gt;: One or more tags for the post. Depending on the configuration, some (or all) of the tags are displayed in the post lists.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;author&lt;/strong&gt;: The author identifier, matching a key in &lt;code&gt;siteauthors.json5&lt;/code&gt; when author metadata is provided. Used to generate author pages; the author’s &lt;code&gt;fullName&lt;/code&gt; is displayed when configured, otherwise the identifier is shown.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;place&lt;/strong&gt;: The location of the post. Displayed in post lists, commonly used for events.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;address&lt;/strong&gt;: The location address of the event. Displayed as a tooltip for &lt;strong&gt;place&lt;/strong&gt; and in the Event JSON-LD structured data.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;profilePage&lt;/strong&gt;: When set to &lt;code&gt;true&lt;/code&gt; on a page (not a post), generates ProfilePage JSON-LD and a corresponding Person/Organization node describing the site publisher. Commonly used for pages like “About Us.”&lt;/li&gt;&lt;li&gt;&lt;strong&gt;hidden&lt;/strong&gt;: When set to &lt;code&gt;true&lt;/code&gt; on a post or page, excludes it from listings, search, the sitemap and feeds. Its HTML file is still generated and accessible by URL, so this does not make a draft private.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;pinned&lt;/strong&gt;: When set to &lt;code&gt;true&lt;/code&gt;, puts the post ahead of unpinned posts in landing and author/tag listings, the sitemap and feeds. Within each group, posts are sorted newest first.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The &lt;code&gt;posts.json&lt;/code&gt; and &lt;code&gt;pages.json&lt;/code&gt; files contain the default header variables. The most important setting there is &lt;strong&gt;permalink&lt;/strong&gt;, which defines how URLs are generated for pages and posts. You can customize the default URL there. Note that the system depends on the &lt;strong&gt;layout&lt;/strong&gt; and &lt;strong&gt;tags&lt;/strong&gt; variables as they are set there, so it is not recommended to change them.&lt;/p&gt;&lt;h3 id=&quot;post-decorations&quot; tabindex=&quot;-1&quot;&gt;Post decorations&lt;/h3&gt;&lt;p&gt;Posts can add optional &lt;code&gt;decorations&lt;/code&gt; to their front matter. They appear with post properties in lists and on full posts; &lt;code&gt;siteelements.features.postproperties&lt;/code&gt; controls both.&lt;/p&gt;&lt;figure class=&quot;code-block&quot;&gt;&lt;figcaption class=&quot;code-block-header&quot;&gt;&lt;span class=&quot;code-block-language&quot;&gt;YAML&lt;/span&gt;&lt;button class=&quot;code-block-copy code-block-copy-pending&quot; type=&quot;button&quot; aria-label=&quot;Copy code to clipboard&quot; data-copy-success=&quot;Code copied&quot; data-copy-error=&quot;The code could not be copied&quot; disabled aria-hidden=&quot;true&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path d=&quot;M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z&quot; /&gt;&lt;/svg&gt;&lt;/button&gt;&lt;span class=&quot;sr-only&quot; role=&quot;status&quot; aria-live=&quot;polite&quot; aria-atomic=&quot;true&quot;&gt;&lt;/span&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token key atrule&quot;&gt;decorations&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;badges&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Workshop&quot;&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;variant&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; primary
  &lt;span class=&quot;token key atrule&quot;&gt;metrics&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Participants&quot;&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;18&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;progress&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean important&quot;&gt;true&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Capacity&quot;&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;actions&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Sign up&quot;&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;https://example.org/register&quot;&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;icon&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; calendar
      &lt;span class=&quot;token key atrule&quot;&gt;variant&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; primary&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;ul&gt;&lt;li&gt;Badges require a &lt;code&gt;label&lt;/code&gt;. Badges and actions share the optional &lt;code&gt;variant&lt;/code&gt;: &lt;code&gt;neutral&lt;/code&gt; (default), &lt;code&gt;primary&lt;/code&gt; (site accent), &lt;code&gt;success&lt;/code&gt; or &lt;code&gt;warning&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;Metrics take a &lt;code&gt;label&lt;/code&gt; and a numeric &lt;code&gt;value&lt;/code&gt;, &lt;code&gt;max&lt;/code&gt;, or both. Zero is displayed; a maximum alone does not imply a current count. Optional &lt;code&gt;progress: true&lt;/code&gt; adds a bar when a value and positive maximum exist. The text retains the actual numbers even beyond the maximum.&lt;/li&gt;&lt;li&gt;Actions require a &lt;code&gt;label&lt;/code&gt;. A supplied &lt;code&gt;href&lt;/code&gt; produces a normal link; without it, the control is a button with no attached behavior. Optional &lt;code&gt;icon&lt;/code&gt; names an entry in &lt;code&gt;inlinesvg.json5&lt;/code&gt;; omit it for text-only controls.&lt;/li&gt;&lt;li&gt;&lt;code&gt;disabled: true&lt;/code&gt; produces a disabled, non-navigating button, even if &lt;code&gt;href&lt;/code&gt; is present. For a closed event, you can use &lt;code&gt;label: &amp;quot;Closed&amp;quot;&lt;/code&gt;, &lt;code&gt;variant: warning&lt;/code&gt; and &lt;code&gt;disabled: true&lt;/code&gt;. The &lt;a href=&quot;/sample-2023-pinned-event/&quot;&gt;sample event&lt;/a&gt; demonstrates a neutral “Past event” button with an icon. A text-only signup link simply omits &lt;code&gt;icon&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Each decoration group is optional. Set labels, numbers and availability in front matter; they do not update automatically from the event date or capacity. Point signup links to your registration service.&lt;/p&gt;&lt;h2 id=&quot;deploying-to-cloudflare-pages&quot; tabindex=&quot;-1&quot;&gt;Deploying to Cloudflare Pages&lt;/h2&gt;&lt;p&gt;Cloudflare Pages builds the site from your Git repository and serves the generated files over HTTPS. Pushes to the configured production branch trigger a build and deployment.&lt;/p&gt;&lt;h3 id=&quot;steps-to-deploy&quot; tabindex=&quot;-1&quot;&gt;Steps to Deploy&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;Ensure you have a Cloudflare account. If not, create one at &lt;a href=&quot;https://www.cloudflare.com/&quot;&gt;Cloudflare&lt;/a&gt;. It is free.&lt;/li&gt;&lt;li&gt;Push your project to a Git repository (GitHub or GitLab).&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Create a new project&lt;/strong&gt;:
&lt;ul&gt;&lt;li&gt;Log in to your Cloudflare account and navigate to the &lt;strong&gt;Workers and Pages&lt;/strong&gt; section.&lt;/li&gt;&lt;li&gt;Click &lt;strong&gt;Create&lt;/strong&gt;, select &lt;strong&gt;Pages&lt;/strong&gt;, and connect your Git repository.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Configure build settings&lt;/strong&gt;:
&lt;ul&gt;&lt;li&gt;In the &lt;strong&gt;Build settings&lt;/strong&gt; section, set:
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Framework preset&lt;/strong&gt;: Eleventy&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Build command&lt;/strong&gt;: &lt;code&gt;npm run build&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Output directory&lt;/strong&gt;: &lt;code&gt;_site&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Add an environment variable:
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;NODE_ENV&lt;/strong&gt;: &lt;code&gt;production&lt;/code&gt; (enables HTML, feed and JavaScript minification)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Start Deployment&lt;/strong&gt;:
&lt;ul&gt;&lt;li&gt;Click &lt;strong&gt;Save and Deploy&lt;/strong&gt;. Cloudflare Pages will build and deploy your site.&lt;/li&gt;&lt;li&gt;Once the deployment is complete, you will receive a unique URL for your site.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3 id=&quot;custom-domain-(optional)&quot; tabindex=&quot;-1&quot;&gt;Custom Domain (Optional)&lt;/h3&gt;&lt;p&gt;To use a custom domain:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Open your Cloudflare Pages project you just created.&lt;/li&gt;&lt;li&gt;Go to the &lt;strong&gt;Custom domains&lt;/strong&gt; section.&lt;/li&gt;&lt;li&gt;Add your domain and follow the instructions to configure DNS settings.&lt;/li&gt;&lt;/ol&gt;&lt;h2 id=&quot;other-deployment-environments&quot; tabindex=&quot;-1&quot;&gt;Other Deployment Environments&lt;/h2&gt;&lt;p&gt;EMP can also be deployed on Netlify, Vercel, GitHub Pages or another static host. Build with &lt;code&gt;NODE_ENV=production&lt;/code&gt; and publish the contents of &lt;code&gt;_site&lt;/code&gt;. Configure the host’s build workflow according to its documentation.&lt;/p&gt;</description></item><item><title>Text and Typography</title><link>https://emp-starter.lastguru.dev/text-and-typography/</link><guid isPermaLink="true">https://emp-starter.lastguru.dev/text-and-typography/</guid><pubDate>Sat, 19 Apr 2025 00:00:00 +0000</pubDate><author>example@example.com (Dmitry Golubev)</author><description>&lt;h2 id=&quot;headings&quot; tabindex=&quot;-1&quot;&gt;Headings&lt;/h2&gt;&lt;h1 id=&quot;h1---heading&quot; tabindex=&quot;-1&quot;&gt;H1 - heading&lt;/h1&gt;&lt;h2 id=&quot;h2---heading&quot; tabindex=&quot;-1&quot;&gt;H2 - heading&lt;/h2&gt;&lt;h3 id=&quot;h3---heading&quot; tabindex=&quot;-1&quot;&gt;H3 - heading&lt;/h3&gt;&lt;h4 id=&quot;h4---heading&quot; tabindex=&quot;-1&quot;&gt;H4 - heading&lt;/h4&gt;&lt;h2 id=&quot;paragraph&quot; tabindex=&quot;-1&quot;&gt;Paragraph&lt;/h2&gt;&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&lt;/p&gt;&lt;h2 id=&quot;emphasis&quot; tabindex=&quot;-1&quot;&gt;Emphasis&lt;/h2&gt;&lt;p&gt;Italic &lt;em&gt;text&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Bold &lt;strong&gt;text&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Bold italic &lt;em&gt;&lt;strong&gt;text&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Strikethrough &lt;s&gt;text&lt;/s&gt;&lt;/p&gt;&lt;p&gt;Highlighted &lt;mark&gt;text&lt;/mark&gt;&lt;/p&gt;&lt;p&gt;Subscript: H&lt;sub&gt;2&lt;/sub&gt;O&lt;/p&gt;&lt;p&gt;Superscript: X&lt;sup&gt;2&lt;/sup&gt;&lt;/p&gt;&lt;p&gt;Inline code: &lt;code&gt;So much code&lt;/code&gt;.&lt;/p&gt;&lt;h2 id=&quot;links&quot; tabindex=&quot;-1&quot;&gt;Links&lt;/h2&gt;&lt;p&gt;Just link: &lt;a href=&quot;http://127.0.0.1&quot;&gt;http://127.0.0.1&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Just email: &lt;a href=&quot;mailto:fake@example.com&quot;&gt;fake@example.com&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Text link: &lt;a href=&quot;https://lastguru.lv/&quot;&gt;Dmitrijs Golubevs&lt;/a&gt;&lt;/p&gt;&lt;h2 id=&quot;special-symbols&quot; tabindex=&quot;-1&quot;&gt;Special symbols&lt;/h2&gt;&lt;p&gt;Some common special characters can be typed with ease, like: © ® ™ ± … – —&lt;/p&gt;&lt;p&gt;Plenty of emojis are available, like: ⚠️ 💡 📡 😄 ⛺ 😂 💗&lt;/p&gt;&lt;h2 id=&quot;lists&quot; tabindex=&quot;-1&quot;&gt;Lists&lt;/h2&gt;&lt;h3 id=&quot;ordered-list&quot; tabindex=&quot;-1&quot;&gt;Ordered list&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;Firstly&lt;/li&gt;&lt;li&gt;Secondly&lt;/li&gt;&lt;li&gt;Thirdly&lt;/li&gt;&lt;/ol&gt;&lt;h3 id=&quot;unordered-list&quot; tabindex=&quot;-1&quot;&gt;Unordered list&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Chapter
&lt;ul&gt;&lt;li&gt;Section 1&lt;/li&gt;&lt;li&gt;Section 2&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;todo-list&quot; tabindex=&quot;-1&quot;&gt;ToDo list&lt;/h3&gt;&lt;ul class=&quot;contains-task-list&quot;&gt;&lt;li class=&quot;task-list-item&quot;&gt;&lt;input class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; Job
&lt;ul class=&quot;contains-task-list&quot;&gt;&lt;li class=&quot;task-list-item&quot;&gt;&lt;input class=&quot;task-list-item-checkbox&quot; checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; Step 1&lt;/li&gt;&lt;li class=&quot;task-list-item&quot;&gt;&lt;input class=&quot;task-list-item-checkbox&quot; checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; Step 2&lt;/li&gt;&lt;li class=&quot;task-list-item&quot;&gt;&lt;input class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; Step 3&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;description-list&quot; tabindex=&quot;-1&quot;&gt;Description list&lt;/h3&gt;&lt;dl&gt;&lt;dt&gt;Sun&lt;/dt&gt;&lt;dd&gt;the star around which the Earth orbits&lt;/dd&gt;&lt;dt&gt;Moon&lt;/dt&gt;&lt;dd&gt;the natural satellite of the Earth, visible by reflected light from the Sun&lt;/dd&gt;&lt;/dl&gt;&lt;h2 id=&quot;block-quote&quot; tabindex=&quot;-1&quot;&gt;Block Quote&lt;/h2&gt;&lt;blockquote&gt;&lt;p&gt;This line shows the &lt;em&gt;block quote&lt;/em&gt;.
The quote may contain multiple lines or even paragraphs&lt;/p&gt;&lt;/blockquote&gt;&lt;h3 id=&quot;admonitions&quot; tabindex=&quot;-1&quot;&gt;Admonitions&lt;/h3&gt;&lt;blockquote&gt;&lt;p&gt;⚠️ &lt;strong&gt;Warning:&lt;/strong&gt; Do not push the big red button.&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;📝 &lt;strong&gt;Note:&lt;/strong&gt; Sunrises are beautiful.&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;💡 &lt;strong&gt;Tip:&lt;/strong&gt; Remember to appreciate the little things in life.&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 id=&quot;tables&quot; tabindex=&quot;-1&quot;&gt;Tables&lt;/h2&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align:left&quot;&gt;Company&lt;/th&gt;&lt;th style=&quot;text-align:center&quot;&gt;Contact&lt;/th&gt;&lt;th style=&quot;text-align:right&quot;&gt;Country&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align:left&quot;&gt;Alfreds Futterkiste&lt;/td&gt;&lt;td style=&quot;text-align:center&quot;&gt;Maria Anders&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;Germany&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:left&quot;&gt;Island Trading&lt;/td&gt;&lt;td style=&quot;text-align:center&quot;&gt;Helen Bennett&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;UK&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:left&quot;&gt;Magazzini Alimentari Riuniti&lt;/td&gt;&lt;td style=&quot;text-align:center&quot;&gt;Giovanni Rovelli&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;Italy&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;em&gt;Table 1: a sample table. Note that you can align text in the columns to the left, right or center.&lt;/em&gt;&lt;/p&gt;&lt;h2 id=&quot;footnote&quot; tabindex=&quot;-1&quot;&gt;Footnote&lt;/h2&gt;&lt;p&gt;Clicking the hook will locate the footnote&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;, and here is another footnote&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&lt;h2 id=&quot;code-blocks&quot; tabindex=&quot;-1&quot;&gt;Code blocks&lt;/h2&gt;&lt;p&gt;Every fenced code block includes a one-line header based on its language. Add &lt;code&gt;filename=&amp;quot;...&amp;quot;&lt;/code&gt; or &lt;code&gt;title=&amp;quot;...&amp;quot;&lt;/code&gt; after the language identifier to show more context alongside the language. If both fields are supplied, &lt;code&gt;title&lt;/code&gt; takes precedence over &lt;code&gt;filename&lt;/code&gt;. Long titles preserve their beginning and use a trailing ellipsis; long filenames preserve their end and use a leading ellipsis.&lt;/p&gt;&lt;h3 id=&quot;common&quot; tabindex=&quot;-1&quot;&gt;Common&lt;/h3&gt;&lt;figure class=&quot;code-block&quot;&gt;&lt;figcaption class=&quot;code-block-header&quot;&gt;&lt;span class=&quot;code-block-language&quot;&gt;Text&lt;/span&gt;&lt;button class=&quot;code-block-copy code-block-copy-pending&quot; type=&quot;button&quot; aria-label=&quot;Copy code to clipboard&quot; data-copy-success=&quot;Code copied&quot; data-copy-error=&quot;The code could not be copied&quot; disabled aria-hidden=&quot;true&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path d=&quot;M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z&quot; /&gt;&lt;/svg&gt;&lt;/button&gt;&lt;span class=&quot;sr-only&quot; role=&quot;status&quot; aria-live=&quot;polite&quot; aria-atomic=&quot;true&quot;&gt;&lt;/span&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;This is a common code snippet, without syntax highlight and line numbers.&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;h3 id=&quot;specific-language&quot; tabindex=&quot;-1&quot;&gt;Specific Language&lt;/h3&gt;&lt;figure class=&quot;code-block&quot;&gt;&lt;figcaption class=&quot;code-block-header&quot;&gt;&lt;span class=&quot;code-block-metadata code-block-filename&quot; title=&quot;status-check.sh&quot;&gt;status-check.sh&lt;/span&gt;&lt;span class=&quot;code-block-language&quot;&gt;Bash&lt;/span&gt;&lt;button class=&quot;code-block-copy code-block-copy-pending&quot; type=&quot;button&quot; aria-label=&quot;Copy code to clipboard&quot; data-copy-success=&quot;Code copied&quot; data-copy-error=&quot;The code could not be copied&quot; disabled aria-hidden=&quot;true&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path d=&quot;M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z&quot; /&gt;&lt;/svg&gt;&lt;/button&gt;&lt;span class=&quot;sr-only&quot; role=&quot;status&quot; aria-live=&quot;polite&quot; aria-atomic=&quot;true&quot;&gt;&lt;/span&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$?&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;then&lt;/span&gt;
  &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;The command was not successful.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;#do the needful / exit&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;fi&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;h3 id=&quot;raw-html&quot; tabindex=&quot;-1&quot;&gt;Raw HTML&lt;/h3&gt;&lt;p&gt;Raw HTML can be written directly in Markdown. This example first shows the source in a code block with a custom title:&lt;/p&gt;&lt;figure class=&quot;code-block&quot;&gt;&lt;figcaption class=&quot;code-block-header&quot;&gt;&lt;span class=&quot;code-block-metadata code-block-title&quot; title=&quot;Expandable raw HTML&quot;&gt;Expandable raw HTML&lt;/span&gt;&lt;span class=&quot;code-block-language&quot;&gt;HTML&lt;/span&gt;&lt;button class=&quot;code-block-copy code-block-copy-pending&quot; type=&quot;button&quot; aria-label=&quot;Copy code to clipboard&quot; data-copy-success=&quot;Code copied&quot; data-copy-error=&quot;The code could not be copied&quot; disabled aria-hidden=&quot;true&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path d=&quot;M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z&quot; /&gt;&lt;/svg&gt;&lt;/button&gt;&lt;span class=&quot;sr-only&quot; role=&quot;status&quot; aria-live=&quot;polite&quot; aria-atomic=&quot;true&quot;&gt;&lt;/span&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;details&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;summary&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Show raw HTML content&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;summary&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;This content is rendered directly from HTML.&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;details&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;p&gt;The same markup rendered as raw HTML:&lt;/p&gt;&lt;details&gt;&lt;summary&gt;Show raw HTML content&lt;/summary&gt;&lt;p&gt;This content is rendered directly from HTML.&lt;/p&gt;&lt;/details&gt;&lt;h2 id=&quot;images&quot; tabindex=&quot;-1&quot;&gt;Images&lt;/h2&gt;&lt;h3 id=&quot;default&quot; tabindex=&quot;-1&quot;&gt;Default&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/images/sample.png&quot; alt=&quot;Sample image&quot; /&gt;&lt;em&gt;Image 1: Sample image&lt;/em&gt;&lt;/p&gt;&lt;h3 id=&quot;linking-images&quot; tabindex=&quot;-1&quot;&gt;Linking images&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://lastguru.lv/&quot;&gt;&lt;img src=&quot;/images/sample.png&quot; alt=&quot;Sample image&quot; /&gt;&lt;/a&gt;&lt;em&gt;Image 2: Sample image with a link&lt;/em&gt;&lt;/p&gt;&lt;h2 id=&quot;embeds&quot; tabindex=&quot;-1&quot;&gt;Embeds&lt;/h2&gt;&lt;p&gt;The following services can be embedded:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Instagram&lt;/li&gt;&lt;li&gt;OpenStreetMap&lt;/li&gt;&lt;li&gt;Spotify&lt;/li&gt;&lt;li&gt;TED&lt;/li&gt;&lt;li&gt;TikTok&lt;/li&gt;&lt;li&gt;Twitch&lt;/li&gt;&lt;li&gt;Twitter&lt;/li&gt;&lt;li&gt;Vimeo&lt;/li&gt;&lt;li&gt;YouTube&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Example:&lt;/p&gt;&lt;p&gt;https://www.youtube.com/watch?v=dQw4w9WgXcQ&lt;/p&gt;&lt;h2 id=&quot;reverse-footnote&quot; tabindex=&quot;-1&quot;&gt;Reverse Footnote&lt;/h2&gt;&lt;hr class=&quot;footnotes-sep&quot; /&gt;&lt;section class=&quot;footnotes&quot;&gt;&lt;ol class=&quot;footnotes-list&quot;&gt;&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;The footnote source &lt;a href=&quot;#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;The 2nd footnote source &lt;a href=&quot;#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/section&gt;</description><category>text</category><category>typography</category></item><item><title>Sample article</title><link>https://emp-starter.lastguru.dev/sample-article/</link><guid isPermaLink="true">https://emp-starter.lastguru.dev/sample-article/</guid><pubDate>Sun, 19 Feb 2023 00:00:00 +0000</pubDate><author>example@example.com (Dmitry Golubev)</author><description>&lt;p&gt;This is a very interesting article. It deserves to be read! The excerpt is generated automatically from the first line, and is shortened to at most 250 characters before an ellipsis, preserving whole words where possible (but the excerpt can be specified manually, in which case it does not have a length limit). Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&lt;/p&gt;&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&lt;/p&gt;</description></item></channel></rss>