<?xml version="1.0" encoding="utf-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
    <title>Sveleton</title>
    <link href="/feed.xml" rel="self"/>
    <link href=""/>
    <id>http://sveltekit-prerender/feed.xml/</id>
    <updated>2026-05-15T00:00:00-00:00</updated>
    <author>
      <name>Team</name>
    </author>
    <subtitle>Latest articles from Sveleton</subtitle>
    <generator>Svelte Kit Generator</generator>
    <entry>
        <title>Add og:type article + article:published_time</title>
        <link href="/todos/add-og-type-article-meta/"/>
        <id>/todos/add-og-type-article-meta/</id>
        <updated>2026-05-15T00:00:00.000Z</updated>
        <published>2026-05-15T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/add-og-type-article-meta">Add Og Type Article Meta&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Add og:type article &lt;span>+ article:published_time&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-05-15" itemprop="datePublished">May 15&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Every todo's &lt;code>PageMeta&lt;/code> carries &lt;code>date&lt;/code>, &lt;code>updated&lt;/code>, and &lt;code>authors&lt;/code>, but &lt;code>Meta.svelte:49&lt;/code> always sets &lt;code>og:type&lt;/code> to &lt;code>website&lt;/code>. None of the article-type signals are emitted, which is
    the largest gap between what the data model promises and what reaches
    crawlers.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Detect article-like pages (e.g. presence of &lt;code>date&lt;/code> + &lt;code>authors&lt;/code>) and set &lt;code>og:type=article&lt;/code>&lt;/li> &lt;li>Emit &lt;code>article:published_time&lt;/code> from &lt;code>date&lt;/code> (ISO via &lt;code>publicationDateToISO&lt;/code>)&lt;/li> &lt;li>Emit &lt;code>article:modified_time&lt;/code> from &lt;code>updated&lt;/code> when set&lt;/li> &lt;li>Emit &lt;code>article:author&lt;/code> for each author (resolve via the authors
      map)&lt;/li> &lt;li>Optionally add a per-page &lt;code>meta name="author"&lt;/code>&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Treat articles as articles&lt;/p> &lt;p itemprop="description">OpenGraph article-type tags from existing PageMeta&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Add robots.txt</title>
        <link href="/todos/add-robots-txt/"/>
        <id>/todos/add-robots-txt/</id>
        <updated>2026-05-15T00:01:00.000Z</updated>
        <published>2026-05-15T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/add-robots-txt">Add Robots Txt&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Add &lt;span>robots.txt&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-05-15" itemprop="datePublished">May 15&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>There is no &lt;code>static/robots.txt&lt;/code> in the repo, and no &lt;code>Sitemap:&lt;/code> directive published anywhere. Crawlers default to discovery via common
    paths, which is fragile.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Create &lt;code>static/robots.txt&lt;/code> with &lt;code>User-agent: *&lt;/code>, &lt;code>Allow: /&lt;/code>, and a &lt;code>Sitemap:&lt;/code> line pointing at &lt;code>PROJECT_URL + '/sitemap-appendix.xml'&lt;/code>&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Help crawlers find the sitemap&lt;/p> &lt;p itemprop="description">A one-line robots.txt with the Sitemap: directive&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Add SEO test coverage</title>
        <link href="/todos/add-seo-test-coverage/"/>
        <id>/todos/add-seo-test-coverage/</id>
        <updated>2026-05-15T00:02:00.000Z</updated>
        <published>2026-05-15T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/add-seo-test-coverage">Add Seo Test Coverage&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Add &lt;span>SEO test coverage&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-05-15" itemprop="datePublished">May 15&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>The only existing test file is &lt;code>imagetools.test.js&lt;/code>. Nothing covers the meta/sitemap/feed
    surface — meaning any of the audit fixes can silently regress without
    notice.&lt;/p> &lt;h2>Test targets&lt;/h2> &lt;ul>&lt;li>&lt;code>Meta.svelte&lt;/code> — title fallback chain, OG/Twitter parity, canonical, noindex, keywords,
      empty-content suppression&lt;/li> &lt;li>&lt;code>sitemap-appendix.xml&lt;/code> — included URLs match &lt;code>excluded&lt;/code>/&lt;code>draft&lt;/code>/&lt;code>noindex&lt;/code> rules&lt;/li> &lt;li>&lt;code>feed.json&lt;/code> — JSON Feed 1.1 schema (&lt;code>version&lt;/code>, &lt;code>home_page_url&lt;/code>, &lt;code>feed_url&lt;/code>, items)&lt;/li> &lt;li>&lt;code>feed.xml&lt;/code> — &lt;code>sanitizeContentForRSS&lt;/code> regex, HTML escaping, no double
      slashes in &lt;code>&amp;lt;id>&lt;/code>&lt;/li> &lt;li>&lt;code>parsePublicationDate&lt;/code> / &lt;code>publicationDateToISO&lt;/code> — DD-MM-YYYY, ISO, and invalid input&lt;/li> &lt;li>&lt;code>pathToPublicURL&lt;/code> — route-group stripping, nested groups&lt;/li> &lt;li>&lt;code>getReadNext&lt;/code> — tag-overlap ranking, fallback to recent, excluded/draft filtering&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Lock SEO behavior with tests&lt;/p> &lt;p itemprop="description">Guard the meta surface before it drifts&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Centralize PROJECT_* in feeds and sitemap</title>
        <link href="/todos/centralize-project-constants-in-feeds/"/>
        <id>/todos/centralize-project-constants-in-feeds/</id>
        <updated>2026-05-15T00:03:00.000Z</updated>
        <published>2026-05-15T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/centralize-project-constants-in-feeds">Centralize Project Constants In Feeds&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Centralize &lt;span>PROJECT_* in feeds and sitemap&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-05-15" itemprop="datePublished">May 15&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Sveleton is a bootstrap; re-using it for a new project should mean changing &lt;code>PROJECT_NAME&lt;/code>, &lt;code>PROJECT_URL&lt;/code>, and &lt;code>PROJECT_DESCRIPTION&lt;/code> in one place. Today, several SEO outputs bypass these constants.&lt;/p> &lt;h2>Current State&lt;/h2> &lt;ul>&lt;li>&lt;code>feed.json/+server.js:7,17&lt;/code> — hardcodes &lt;code>'Sveleton'&lt;/code> and &lt;code>'Latest articles from Sveleton'&lt;/code>&lt;/li> &lt;li>&lt;code>feed.json/+server.js:15&lt;/code> — &lt;code>home_page_url&lt;/code> uses empty &lt;code>base&lt;/code> instead of &lt;code>PROJECT_URL&lt;/code>&lt;/li> &lt;li>&lt;code>feed.xml/+server.js:23,43&lt;/code> — empty &lt;code>BASE_URL&lt;/code>; &lt;code>&amp;lt;author>&amp;lt;name>Team&amp;lt;/name>&lt;/code> placeholder&lt;/li> &lt;li>&lt;code>sitemap-appendix.xml/+server.js:5&lt;/code> — hardcoded &lt;code>'https://sveleton.ramilkarimov.me'&lt;/code>&lt;/li>&lt;/ul> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Replace hardcoded strings with imports from &lt;code>$lib&lt;/code> (&lt;code>PROJECT_NAME&lt;/code>, &lt;code>PROJECT_URL&lt;/code>, &lt;code>PROJECT_DESCRIPTION&lt;/code>)&lt;/li> &lt;li>Remove the placeholder &lt;code>&amp;lt;author>&amp;lt;name>Team&amp;lt;/name>&lt;/code>&lt;/li> &lt;li>Fix the trailing &lt;code>//&lt;/code> in feed.xml &lt;code>&amp;lt;id>&lt;/code> (&lt;code>feed.xml/+server.js:40&lt;/code>)&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">One source of brand truth&lt;/p> &lt;p itemprop="description">PROJECT_* constants drive every feed and sitemap output&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Filter sitemap by excluded/draft/noindex</title>
        <link href="/todos/filter-sitemap-by-exclusion/"/>
        <id>/todos/filter-sitemap-by-exclusion/</id>
        <updated>2026-05-15T00:04:00.000Z</updated>
        <published>2026-05-15T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/filter-sitemap-by-exclusion">Filter Sitemap By Exclusion&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Filter sitemap by &lt;span>excluded/draft/noindex&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-05-15" itemprop="datePublished">May 15&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-05-15" itemprop="dateModified">May 15&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>&lt;code>src/routes/sitemap-appendix.xml/+server.js&lt;/code> enumerates every &lt;code>+page.svelte&lt;/code> from &lt;code>getPages()&lt;/code> without honoring the &lt;code>excluded&lt;/code>, &lt;code>draft&lt;/code>, or &lt;code>noindex&lt;/code> flags.
    Engineering todos like &lt;code>fix-ci-type-errors&lt;/code> and &lt;code>migrate-to-lightning-css&lt;/code> get published to search engines as article content.&lt;/p> &lt;h2>Current State&lt;/h2> &lt;ul>&lt;li>&lt;code>sitemap-appendix.xml/+server.js:46-52&lt;/code> — no filter at all&lt;/li> &lt;li>&lt;code>sitemap/+page.server.js:73&lt;/code> — excludes only the sitemap page itself&lt;/li> &lt;li>&lt;code>pages.remote.js getReadNext:50&lt;/code> — filters both &lt;code>excluded&lt;/code> and &lt;code>draft&lt;/code>&lt;/li>&lt;/ul> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Centralize inclusion policy in a single helper (e.g. &lt;code>isPublic(page)&lt;/code>)&lt;/li> &lt;li>Honor &lt;code>excluded&lt;/code>, &lt;code>draft&lt;/code>, &lt;code>noindex&lt;/code>&lt;/li> &lt;li>Apply the helper in all three consumers&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Stop leaking internal pages&lt;/p> &lt;p itemprop="description">One inclusion policy for sitemap, HTML sitemap, and ReadNext&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Fix double canonical tag</title>
        <link href="/todos/fix-double-canonical-tag/"/>
        <id>/todos/fix-double-canonical-tag/</id>
        <updated>2026-05-15T00:05:00.000Z</updated>
        <published>2026-05-15T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/fix-double-canonical-tag">Fix Double Canonical Tag&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Fix double &lt;span>canonical tag&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-05-15" itemprop="datePublished">May 15&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-05-15" itemprop="dateModified">May 15&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>&lt;code>src/routes/+layout.svelte:28&lt;/code> unconditionally emits &lt;code>&amp;lt;link rel="canonical">&lt;/code> from &lt;code>PROJECT_URL + pathname&lt;/code>, while &lt;code>src/lib/Meta.svelte:84-86&lt;/code> also emits one when &lt;code>pageMeta.canonical&lt;/code> is set. Pages overriding
    canonical end up with two tags.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Remove the unconditional canonical from &lt;code>+layout.svelte&lt;/code>&lt;/li> &lt;li>Have &lt;code>Meta.svelte&lt;/code> always emit canonical, defaulting to &lt;code>PROJECT_URL + pathname&lt;/code> when &lt;code>pageMeta.canonical&lt;/code> is not set&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">One canonical, one source&lt;/p> &lt;p itemprop="description">Delegate canonical resolution to Meta only&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Remove dead BASE_URL and EXCLUDE_PATHS</title>
        <link href="/todos/remove-dead-base-url-and-exclude-paths/"/>
        <id>/todos/remove-dead-base-url-and-exclude-paths/</id>
        <updated>2026-05-15T00:06:00.000Z</updated>
        <published>2026-05-15T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/remove-dead-base-url-and-exclude-paths">Remove Dead Base Url And Exclude Paths&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Remove dead &lt;span>BASE_URL and EXCLUDE_PATHS&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-05-15" itemprop="datePublished">May 15&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Three files declare &lt;code>const BASE_URL = ''&lt;/code> and use it in string
    concatenations — all no-ops. A separate &lt;code>EXCLUDE_PATHS&lt;/code> list points at routes that don't exist in this project (carryover from the
    parent template).&lt;/p> &lt;h2>Current State&lt;/h2> &lt;ul>&lt;li>&lt;code>src/lib/url-utils.js:1&lt;/code>&lt;/li> &lt;li>&lt;code>src/lib/page-renderer.svelte.js:8&lt;/code>&lt;/li> &lt;li>&lt;code>src/routes/feed.xml/+server.js:23&lt;/code>&lt;/li> &lt;li>&lt;code>page-renderer.svelte.js:10-24&lt;/code> — &lt;code>EXCLUDE_PATHS&lt;/code> with &lt;code>/blog/&lt;/code>, &lt;code>/learning-center/...&lt;/code>, &lt;code>/reviews/&lt;/code>&lt;/li>&lt;/ul> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Delete the three &lt;code>BASE_URL&lt;/code> declarations and their usages&lt;/li> &lt;li>Delete &lt;code>EXCLUDE_PATHS&lt;/code> or replace with real exclusions&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Less dead code&lt;/p> &lt;p itemprop="description">Drop template carryover from the SEO surface&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Remove empty google-site-verification</title>
        <link href="/todos/remove-empty-google-site-verification/"/>
        <id>/todos/remove-empty-google-site-verification/</id>
        <updated>2026-05-15T00:07:00.000Z</updated>
        <published>2026-05-15T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/remove-empty-google-site-verification">Remove Empty Google Site Verification&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Remove empty &lt;span>google-site-verification&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-05-15" itemprop="datePublished">May 15&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-05-21" itemprop="dateModified">May 21&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>&lt;code>src/routes/+layout.svelte:27&lt;/code> emits &lt;code>&amp;lt;meta name="google-site-verification" content="">&lt;/code> on every page. An empty value does nothing for Search Console and adds noise
    to the head.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Either remove the tag, or make it conditional on a real verification
      string (e.g. &lt;code>PROJECT_GOOGLE_VERIFICATION&lt;/code> in &lt;code>$lib&lt;/code>)&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Drop the empty placeholder&lt;/p> &lt;p itemprop="description">Either fill in the verification or remove the tag&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Replace templated demo descriptions</title>
        <link href="/todos/replace-templated-demo-descriptions/"/>
        <id>/todos/replace-templated-demo-descriptions/</id>
        <updated>2026-05-15T00:08:00.000Z</updated>
        <published>2026-05-15T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/replace-templated-demo-descriptions">Replace Templated Demo Descriptions&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Replace templated &lt;span>demo descriptions&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-05-15" itemprop="datePublished">May 15&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>At least 16 demo todo pages carry the identical &lt;code>description: 'Create a demo page for the X component.'&lt;/code>. That
    field is what &lt;code>Meta.svelte&lt;/code> emits as &lt;code>&amp;lt;meta name="description">&lt;/code>, so search engines see duplicate
    descriptions across the site.&lt;/p> &lt;h2>Affected pages&lt;/h2> &lt;p>&lt;code>demo-anchor-heading&lt;/code>, &lt;code>demo-articles&lt;/code>, &lt;code>demo-authors&lt;/code>, &lt;code>demo-call-to-action&lt;/code>, &lt;code>demo-call-to-action-black&lt;/code>, &lt;code>demo-img&lt;/code>, &lt;code>demo-link-block&lt;/code>, &lt;code>demo-meta&lt;/code>, &lt;code>demo-post-preview&lt;/code>, &lt;code>demo-publication-authors&lt;/code>, &lt;code>demo-publication-date&lt;/code>, &lt;code>demo-read-next&lt;/code>, &lt;code>demo-reading-time&lt;/code>, &lt;code>demo-share-post-link&lt;/code>, &lt;code>demo-sitemap&lt;/code>, &lt;code>demo-todo-cover&lt;/code>, &lt;code>demo-accordion&lt;/code>.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Write a unique 1-2 sentence description for each demo describing what the
      component actually demonstrates&lt;/li> &lt;li>Also revisit the templated &lt;code>cta.description&lt;/code> stubs (&lt;code>'Articles showcase'&lt;/code>, etc.)&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Unique descriptions per page&lt;/p> &lt;p itemprop="description">Stop shipping duplicate meta descriptions&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>SEO tasks</title>
        <link href="/todos/seo/"/>
        <id>/todos/seo/</id>
        <updated>2026-05-15T00:09:00.000Z</updated>
        <published>2026-05-15T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/seo">Seo&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->SEO &lt;span>tasks&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-05-15" itemprop="datePublished">May 15&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Landing page for the SEO audit follow-ups. Each card below is a separate
    todo with its own write-up and tasks.&lt;/p> &lt;div>&lt;!--[-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!----> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">SEO follow-ups&lt;/p> &lt;p itemprop="description">Audit-driven tasks for crawling, indexing, and content quality&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Update CLAUDE.md (NavAnchor, exports)</title>
        <link href="/todos/update-claude-md-conventions/"/>
        <id>/todos/update-claude-md-conventions/</id>
        <updated>2026-05-15T00:10:00.000Z</updated>
        <published>2026-05-15T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/update-claude-md-conventions">Update Claude Md Conventions&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Update CLAUDE.md &lt;span>(NavAnchor, exports)&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-05-15" itemprop="datePublished">May 15&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Recent commits replaced &lt;code>NavAnchor&lt;/code> with the &lt;code>navSection&lt;/code> attachment and renamed &lt;code>PublicationAuthors&lt;/code> to &lt;code>Authors&lt;/code>, but the project's &lt;code>CLAUDE.md&lt;/code> hasn't caught up.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Replace &lt;code>NavAnchor&lt;/code> usage in the todo page template with &lt;code>&amp;lt;h2 {@attach navSection()}>&lt;/code>&lt;/li> &lt;li>Update the exports list to remove &lt;code>NavAnchor&lt;/code>, &lt;code>PublicationAuthors&lt;/code>, and &lt;code>pages&lt;/code>; add &lt;code>Authors&lt;/code>&lt;/li> &lt;li>Document that &lt;code>Meta&lt;/code> auto-resolves from &lt;code>PageMeta&lt;/code> — todo pages should not add a per-page &lt;code>&amp;lt;Meta>&lt;/code>&lt;/li> &lt;li>Document the SEO outputs: &lt;code>sitemap-appendix.xml&lt;/code>, &lt;code>feed.json&lt;/code>, &lt;code>feed.xml&lt;/code>&lt;/li> &lt;li>Fix README's Node version (24) and the imagetools-disabled claim&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Docs that match the code&lt;/p> &lt;p itemprop="description">Fresh template and exports list&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Gallery</title>
        <link href="/features/gallery/"/>
        <id>/features/gallery/</id>
        <updated>2026-04-16T00:11:00.000Z</updated>
        <published>2026-04-16T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/features">Features&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/features/gallery">Gallery&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Gallery&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-04-16" itemprop="datePublished">April 16&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Click any thumbnail to open it in a native, unstyled dialog.&lt;/p> &lt;div>&lt;!--[-->&lt;figure>&lt;a href="/_app/immutable/assets/1.B08UqseV.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/1.C2joqs79.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/1.B08UqseV.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[0-->&lt;figcaption>Bulbasaur&lt;/figcaption>&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/2.DfhhDRpk.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/2.tVeuFqCQ.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/2.DfhhDRpk.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/3.DYEpEso-.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/3.BDmhoCep.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/3.DYEpEso-.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/4.JpEcJ6s5.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/4.DjVh9p_K.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/4.JpEcJ6s5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[0-->&lt;figcaption>Charmander&lt;/figcaption>&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/5.CNHj6f07.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/5.Bjpb5bLz.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/5.CNHj6f07.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/6.BG0xQ_M_.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/6.C_MnepJM.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/6.BG0xQ_M_.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/7.qzVr7XA6.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/7.34dxhrxU.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/7.qzVr7XA6.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[0-->&lt;figcaption>Squirtle&lt;/figcaption>&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/8.CZEqRP4h.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/8.CK__0oXg.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/8.CZEqRP4h.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/9.BWXSlW2R.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/9.Dqgrji-x.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/9.BWXSlW2R.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/10.Dwgit1NQ.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/10.Ce2Ndxn2.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/10.Dwgit1NQ.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/11.C-g1E7F8.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/11.Dcrrg1eK.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/11.C-g1E7F8.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/12.Cqd34zKj.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/12.s0rFA8Kn.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/12.Cqd34zKj.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/13.Ci0unIIK.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/13.CXHMfSIM.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/13.Ci0unIIK.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/14.s1pr6V8C.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/14.BZFWCYqN.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/14.s1pr6V8C.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/15.CEG6-L4i.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/15.BCfXge_I.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/15.CEG6-L4i.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/16.CDkjZZGr.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/16.dp1ety_P.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/16.CDkjZZGr.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/17.DvDwqxOj.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/17.gKAzzklE.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/17.DvDwqxOj.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/18.Dee7U19m.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/18.CfmC1tIx.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/18.Dee7U19m.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/19.WzwffIOX.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/19.BTITigVg.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/19.WzwffIOX.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/20.BwsJAAyU.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/20.CW0IjuTg.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/20.BwsJAAyU.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/21.CH_QsB7h.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/21.CkCrVkeY.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/21.CH_QsB7h.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/22.D4fCJlWr.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/22.CgoL70Av.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/22.D4fCJlWr.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/23.Bzro0e7N.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/23.CZvTfV2D.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/23.Bzro0e7N.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/24.BO1nLo_D.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/24.DWKq1hjR.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/24.BO1nLo_D.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/25.CuUcZXUN.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/25.BV0i4n38.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/25.CuUcZXUN.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[0-->&lt;figcaption>Pikachu&lt;/figcaption>&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/26.QxgluLLu.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/26.DpQ1GYeB.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/26.QxgluLLu.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/27.CUfkOC7K.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/27.2GfrbT-m.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/27.CUfkOC7K.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/28.rhEwm6jV.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/28.tNDCXUZl.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/28.rhEwm6jV.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/29.DxL_SXvv.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/29.C7q4FoT4.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/29.DxL_SXvv.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;a href="/_app/immutable/assets/30.BrwxZ0TO.avif" target="_blank">&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/30.BwcGKdlI.avif 197w" sizes="120px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/30.BrwxZ0TO.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div>&lt;/a> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;!--]-->&lt;/div> &lt;dialog>&lt;button type="button" tabindex="-1" aria-label="Previous image">&lt;span>&lt;/span>&lt;/button> &lt;div>&lt;!--[-->&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/1.C2joqs79.avif 197w, /_app/immutable/assets/1.DX19tXHG.avif 263w, /_app/immutable/assets/1.CdNwv4B8.avif 349w, /_app/immutable/assets/1.UOQICCqr.avif 360w, /_app/immutable/assets/1.Cr8AaN_T.avif 385w, /_app/immutable/assets/1.DDfqp_52.avif 414w, /_app/immutable/assets/1.B4M6tdt-.avif 768w, /_app/immutable/assets/1.B08UqseV.avif 784w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/1.B08UqseV.avif" alt="" loading="eager"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[0-->&lt;figcaption>Bulbasaur&lt;/figcaption>&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/2.tVeuFqCQ.avif 197w, /_app/immutable/assets/2.BhOxMvI5.avif 263w, /_app/immutable/assets/2.BrARDYDq.avif 349w, /_app/immutable/assets/2.DNx1UNOM.avif 360w, /_app/immutable/assets/2.C3IkTnbZ.avif 385w, /_app/immutable/assets/2.BHE6vust.avif 414w, /_app/immutable/assets/2.DZ1hqlwj.avif 768w, /_app/immutable/assets/2.DfhhDRpk.avif 900w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/2.DfhhDRpk.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/3.BDmhoCep.avif 197w, /_app/immutable/assets/3.DpPL3LTN.avif 263w, /_app/immutable/assets/3.0NGjjhSe.avif 349w, /_app/immutable/assets/3.cVg9FgM7.avif 360w, /_app/immutable/assets/3.CeNMYKPB.avif 385w, /_app/immutable/assets/3._UltSE36.avif 414w, /_app/immutable/assets/3.C2BKALkL.avif 768w, /_app/immutable/assets/3.DYEpEso-.avif 900w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/3.DYEpEso-.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/4.DjVh9p_K.avif 197w, /_app/immutable/assets/4.CKkAd-Wn.avif 263w, /_app/immutable/assets/4.DZQv7A3w.avif 349w, /_app/immutable/assets/4.CcKfNch3.avif 360w, /_app/immutable/assets/4.BfSGKc-q.avif 385w, /_app/immutable/assets/4.B0iCVSAs.avif 414w, /_app/immutable/assets/4.CuNAmJie.avif 768w, /_app/immutable/assets/4.JpEcJ6s5.avif 834w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/4.JpEcJ6s5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[0-->&lt;figcaption>Charmander&lt;/figcaption>&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/5.Bjpb5bLz.avif 197w, /_app/immutable/assets/5.DCrLcf7-.avif 263w, /_app/immutable/assets/5.DdAD7HuL.avif 349w, /_app/immutable/assets/5.DRbfetnZ.avif 360w, /_app/immutable/assets/5.CTDt8Q2j.avif 385w, /_app/immutable/assets/5.wdoOq5nL.avif 414w, /_app/immutable/assets/5.BIEAbaal.avif 768w, /_app/immutable/assets/5.CNHj6f07.avif 851w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/5.CNHj6f07.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/6.C_MnepJM.avif 197w, /_app/immutable/assets/6.CKqlDX-e.avif 263w, /_app/immutable/assets/6.Dz9Jy2YK.avif 349w, /_app/immutable/assets/6.D7369BPE.avif 360w, /_app/immutable/assets/6.YS0Yyxoa.avif 385w, /_app/immutable/assets/6.BJlXFIGK.avif 414w, /_app/immutable/assets/6.C9LulLUn.avif 768w, /_app/immutable/assets/6.BG0xQ_M_.avif 900w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/6.BG0xQ_M_.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/7.34dxhrxU.avif 197w, /_app/immutable/assets/7.DIbqaGMi.avif 263w, /_app/immutable/assets/7.DJoEz8vk.avif 349w, /_app/immutable/assets/7.6tA-RRZ9.avif 360w, /_app/immutable/assets/7.FPbUQFYm.avif 385w, /_app/immutable/assets/7.D602LHi2.avif 414w, /_app/immutable/assets/7.Bc_cfBfF.avif 768w, /_app/immutable/assets/7.qzVr7XA6.avif 886w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/7.qzVr7XA6.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[0-->&lt;figcaption>Squirtle&lt;/figcaption>&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/8.CK__0oXg.avif 197w, /_app/immutable/assets/8.D08FoFzH.avif 263w, /_app/immutable/assets/8.BwBkYch0.avif 349w, /_app/immutable/assets/8.ECu66M4g.avif 360w, /_app/immutable/assets/8.C825gMl6.avif 385w, /_app/immutable/assets/8.BD3yuShe.avif 414w, /_app/immutable/assets/8.lF1GD8F5.avif 768w, /_app/immutable/assets/8.CZEqRP4h.avif 900w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/8.CZEqRP4h.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/9.Dqgrji-x.avif 197w, /_app/immutable/assets/9.CUkYdbSq.avif 263w, /_app/immutable/assets/9.BTDrtHbu.avif 349w, /_app/immutable/assets/9.DHFiVqVm.avif 360w, /_app/immutable/assets/9.B7jb-Evf.avif 385w, /_app/immutable/assets/9.BHv7qT8G.avif 414w, /_app/immutable/assets/9.B59PFLcB.avif 768w, /_app/immutable/assets/9.BWXSlW2R.avif 900w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/9.BWXSlW2R.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/10.Ce2Ndxn2.avif 197w, /_app/immutable/assets/10.CF7YEzow.avif 263w, /_app/immutable/assets/10.BIylQ_rF.avif 349w, /_app/immutable/assets/10.79iR13fj.avif 360w, /_app/immutable/assets/10.jnm3yrDd.avif 385w, /_app/immutable/assets/10.BhokoESh.avif 414w, /_app/immutable/assets/10.Dwgit1NQ.avif 509w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/10.Dwgit1NQ.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/11.Dcrrg1eK.avif 197w, /_app/immutable/assets/11.DVs4im6H.avif 263w, /_app/immutable/assets/11.3ntzBExV.avif 349w, /_app/immutable/assets/11.BegVrsG1.avif 360w, /_app/immutable/assets/11.Csdcf4NQ.avif 385w, /_app/immutable/assets/11.DQNjhuGt.avif 414w, /_app/immutable/assets/11.C0F2uYK8.avif 768w, /_app/immutable/assets/11.C-g1E7F8.avif 879w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/11.C-g1E7F8.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/12.s0rFA8Kn.avif 197w, /_app/immutable/assets/12.B-YUr8uC.avif 263w, /_app/immutable/assets/12.Czq8CPRf.avif 349w, /_app/immutable/assets/12.GNAugr_x.avif 360w, /_app/immutable/assets/12.Dcs2niyd.avif 385w, /_app/immutable/assets/12.B7_-Kump.avif 414w, /_app/immutable/assets/12.Cqd34zKj.avif 551w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/12.Cqd34zKj.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/13.CXHMfSIM.avif 197w, /_app/immutable/assets/13.CaEC1ryW.avif 263w, /_app/immutable/assets/13.DA1M38CV.avif 349w, /_app/immutable/assets/13._3veh2d8.avif 360w, /_app/immutable/assets/13.7FX-jHHn.avif 385w, /_app/immutable/assets/13.b0r-rgdG.avif 414w, /_app/immutable/assets/13.BJNXJEBY.avif 768w, /_app/immutable/assets/13.Ci0unIIK.avif 787w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/13.Ci0unIIK.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/14.BZFWCYqN.avif 197w, /_app/immutable/assets/14.aDW4tSbI.avif 263w, /_app/immutable/assets/14.s1pr6V8C.avif 297w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/14.s1pr6V8C.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/15.BCfXge_I.avif 197w, /_app/immutable/assets/15.Ce_8psfi.avif 263w, /_app/immutable/assets/15.418r_3Yp.avif 349w, /_app/immutable/assets/15.3p5LRJQs.avif 360w, /_app/immutable/assets/15.DVQvF985.avif 385w, /_app/immutable/assets/15.pn0BGHrr.avif 414w, /_app/immutable/assets/15.CCSG46Wu.avif 768w, /_app/immutable/assets/15.CEG6-L4i.avif 831w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/15.CEG6-L4i.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/16.dp1ety_P.avif 197w, /_app/immutable/assets/16.SP4rDjfT.avif 263w, /_app/immutable/assets/16.BZ6Cg2_d.avif 349w, /_app/immutable/assets/16.cRHl-4OM.avif 360w, /_app/immutable/assets/16.BppvBH0m.avif 385w, /_app/immutable/assets/16.DkPH8H08.avif 414w, /_app/immutable/assets/16.oRw4v_SF.avif 768w, /_app/immutable/assets/16.CDkjZZGr.avif 770w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/16.CDkjZZGr.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/17.gKAzzklE.avif 197w, /_app/immutable/assets/17.DW_bQJtv.avif 263w, /_app/immutable/assets/17.C5BUI07x.avif 349w, /_app/immutable/assets/17.BKYkgdIT.avif 360w, /_app/immutable/assets/17.DWwNlG3H.avif 385w, /_app/immutable/assets/17.DoYxB5M2.avif 414w, /_app/immutable/assets/17.BNS80E0r.avif 768w, /_app/immutable/assets/17.DvDwqxOj.avif 866w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/17.DvDwqxOj.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/18.CfmC1tIx.avif 197w, /_app/immutable/assets/18.Dt5U3Aaw.avif 263w, /_app/immutable/assets/18.CLbDLZ5-.avif 349w, /_app/immutable/assets/18.CPrvXpua.avif 360w, /_app/immutable/assets/18.4E4--uPa.avif 385w, /_app/immutable/assets/18.5lw3a-i6.avif 414w, /_app/immutable/assets/18.QGrRMhrU.avif 768w, /_app/immutable/assets/18.Dee7U19m.avif 900w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/18.Dee7U19m.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/19.BTITigVg.avif 197w, /_app/immutable/assets/19.BLyucuTl.avif 263w, /_app/immutable/assets/19.Bj87KydE.avif 349w, /_app/immutable/assets/19.CJeHAkER.avif 360w, /_app/immutable/assets/19.Dv3Op22q.avif 385w, /_app/immutable/assets/19.w-YQAOjM.avif 414w, /_app/immutable/assets/19.WzwffIOX.avif 548w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/19.WzwffIOX.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/20.CW0IjuTg.avif 197w, /_app/immutable/assets/20.DhsKYytt.avif 263w, /_app/immutable/assets/20.DjObYONz.avif 349w, /_app/immutable/assets/20.C1ZzJuPT.avif 360w, /_app/immutable/assets/20.CbuO80Vj.avif 385w, /_app/immutable/assets/20.0eOF5TBR.avif 414w, /_app/immutable/assets/20.BwsJAAyU.avif 543w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/20.BwsJAAyU.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/21.CkCrVkeY.avif 197w, /_app/immutable/assets/21.-c4u7mI_.avif 263w, /_app/immutable/assets/21.VNphZb1K.avif 349w, /_app/immutable/assets/21.DorotM3w.avif 360w, /_app/immutable/assets/21.CAN77Stm.avif 385w, /_app/immutable/assets/21.JjaTXmcp.avif 414w, /_app/immutable/assets/21.CH_QsB7h.avif 537w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/21.CH_QsB7h.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/22.CgoL70Av.avif 197w, /_app/immutable/assets/22.kZTd0Obn.avif 263w, /_app/immutable/assets/22.CltCd7gf.avif 349w, /_app/immutable/assets/22.DfinffQJ.avif 360w, /_app/immutable/assets/22.D_VL3OXd.avif 385w, /_app/immutable/assets/22.DcyCz3Ez.avif 414w, /_app/immutable/assets/22.D4fCJlWr.avif 560w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/22.D4fCJlWr.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/23.CZvTfV2D.avif 197w, /_app/immutable/assets/23.BIR5EDMe.avif 263w, /_app/immutable/assets/23._GW3J0tV.avif 349w, /_app/immutable/assets/23.XKTNSU1n.avif 360w, /_app/immutable/assets/23.DxJ3oTrK.avif 385w, /_app/immutable/assets/23.Br5teGqB.avif 414w, /_app/immutable/assets/23.Bzro0e7N.avif 539w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/23.Bzro0e7N.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/24.DWKq1hjR.avif 197w, /_app/immutable/assets/24.CF_UhUbl.avif 263w, /_app/immutable/assets/24.BZBDKZGs.avif 349w, /_app/immutable/assets/24.C9F3DnZL.avif 360w, /_app/immutable/assets/24.BiDuFahQ.avif 385w, /_app/immutable/assets/24.CA_99Xay.avif 414w, /_app/immutable/assets/24.BO1nLo_D.avif 490w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/24.BO1nLo_D.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/25.BV0i4n38.avif 197w, /_app/immutable/assets/25.CNLTdIv7.avif 263w, /_app/immutable/assets/25.CrQh0m3I.avif 349w, /_app/immutable/assets/25.BqSySEuw.avif 360w, /_app/immutable/assets/25.Dog4kYFc.avif 385w, /_app/immutable/assets/25.BKIYt--b.avif 414w, /_app/immutable/assets/25.yfA75qqg.avif 768w, /_app/immutable/assets/25.CuUcZXUN.avif 900w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/25.CuUcZXUN.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[0-->&lt;figcaption>Pikachu&lt;/figcaption>&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/26.DpQ1GYeB.avif 197w, /_app/immutable/assets/26.DLk3ZJkA.avif 263w, /_app/immutable/assets/26.Dcn7p60-.avif 349w, /_app/immutable/assets/26.B8xxpB2L.avif 360w, /_app/immutable/assets/26.DKHH8xxi.avif 385w, /_app/immutable/assets/26.D53MhNJ5.avif 414w, /_app/immutable/assets/26.D_4oYBRf.avif 768w, /_app/immutable/assets/26.QxgluLLu.avif 900w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/26.QxgluLLu.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/27.2GfrbT-m.avif 197w, /_app/immutable/assets/27.Ku54RRoL.avif 263w, /_app/immutable/assets/27.DYw8Rt4b.avif 349w, /_app/immutable/assets/27.e1-Vd7hN.avif 360w, /_app/immutable/assets/27.C9_YTa55.avif 385w, /_app/immutable/assets/27.dsEUu0it.avif 414w, /_app/immutable/assets/27.D3OvdmaK.avif 768w, /_app/immutable/assets/27.CUfkOC7K.avif 838w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/27.CUfkOC7K.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/28.tNDCXUZl.avif 197w, /_app/immutable/assets/28.dMIrkZPp.avif 263w, /_app/immutable/assets/28.bNFGWgwy.avif 349w, /_app/immutable/assets/28.CDHf71Kt.avif 360w, /_app/immutable/assets/28.ww7Jkfj2.avif 385w, /_app/immutable/assets/28.BCK3lBnG.avif 414w, /_app/immutable/assets/28.Cy34fzkU.avif 768w, /_app/immutable/assets/28.rhEwm6jV.avif 900w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/28.rhEwm6jV.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/29.C7q4FoT4.avif 197w, /_app/immutable/assets/29.CmIgLM_t.avif 263w, /_app/immutable/assets/29.CTf_yAlK.avif 349w, /_app/immutable/assets/29.DbtHDKZK.avif 360w, /_app/immutable/assets/29.SHh1TU0g.avif 385w, /_app/immutable/assets/29.DWJTPnDD.avif 414w, /_app/immutable/assets/29.DxL_SXvv.avif 523w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/29.DxL_SXvv.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;figure>&lt;div>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/30.BwcGKdlI.avif 197w, /_app/immutable/assets/30.BVpGCoIX.avif 263w, /_app/immutable/assets/30.BXc0PnGW.avif 349w, /_app/immutable/assets/30.BP1qZzgI.avif 360w, /_app/immutable/assets/30.H-R3B2SH.avif 385w, /_app/immutable/assets/30.DgN_B2-E.avif 414w, /_app/immutable/assets/30.BrwxZ0TO.avif 541w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/30.BrwxZ0TO.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!---->&lt;/div> &lt;!--[-1-->&lt;!--]-->&lt;/figure>&lt;!--]-->&lt;/div> &lt;button type="button" tabindex="-1" aria-label="Next image">&lt;span>&lt;/span>&lt;/button>&lt;/dialog>&lt;!----> &lt;h2>Usage&lt;/h2> &lt;p>Import &lt;code>Gallery&lt;/code> from &lt;code>$lib&lt;/code> and pass an array of
    imagetools-processed images to the &lt;code>images&lt;/code> prop.&lt;/p> &lt;h3>Glob import&lt;/h3> &lt;p>Load all images from a folder at once. Ideal when you have many files and
    don't need to reference them individually.&lt;/p> &lt;pre>&lt;code>&amp;lt;script>
import { Gallery } from '$lib';

const modules = import.meta.glob('./assets/*.jpg', {
  eager: true,
  import: 'default',
});
const images = Object.values(modules);
&amp;lt;/script>

&amp;lt;Gallery {images} />&lt;/code>&lt;/pre> &lt;aside>&lt;p>Files loaded via &lt;code>import.meta.glob&lt;/code> are sorted alphabetically
      by path. To control order, prefix filenames with numbers (&lt;code>01.jpg&lt;/code>, &lt;code>02.jpg&lt;/code>) or sort the entries yourself.&lt;/p>&lt;/aside> &lt;h3>Individual imports&lt;/h3> &lt;p>Import each image explicitly. Useful when you need a specific subset or want
    full control over order.&lt;/p> &lt;pre>&lt;code>&amp;lt;script>
import { Gallery } from '$lib';
import hero from './assets/hero.jpg';
import detail from './assets/detail.jpg';
import wide from './assets/wide.jpg';
&amp;lt;/script>

&amp;lt;Gallery images={[hero, detail, wide]} />&lt;/code>&lt;/pre> &lt;h3>Mixed sources&lt;/h3> &lt;p>Combine glob and individual imports. For example, glob a folder and prepend
    a cover image.&lt;/p> &lt;pre>&lt;code>&amp;lt;script>
import { Gallery } from '$lib';
import cover from './assets/cover.jpg';

const rest = Object.values(
  import.meta.glob('./assets/photos/*.jpg', {
    eager: true,
    import: 'default',
  }),
);
const images = [cover, ...rest];
&amp;lt;/script>

&amp;lt;Gallery {images} />&lt;/code>&lt;/pre> &lt;h2>Captions&lt;/h2> &lt;p>Pass an optional &lt;code>captions&lt;/code> prop as a &lt;code>Record&amp;lt;string, string>&lt;/code> keyed by the same paths used in the &lt;code>images&lt;/code> record. Captions
    appear as &lt;code>&amp;lt;figcaption>&lt;/code> in both the grid and the dialog.&lt;/p> &lt;pre>&lt;code>&amp;lt;script>
import { Gallery } from '$lib';

const images = import.meta.glob('./assets/*.jpg', {
  eager: true,
  import: 'default',
});

const captions = {
  './assets/hero.jpg': 'Hero shot',
  './assets/detail.jpg': 'Close-up detail',
};
&amp;lt;/script>

&amp;lt;Gallery {images} {captions} />&lt;/code>&lt;/pre> &lt;aside>&lt;p>Keys must match the glob paths exactly (e.g. &lt;code>'./assets/1.jpg'&lt;/code>). Images without a matching key render no
      caption.&lt;/p>&lt;/aside> &lt;h2>Features&lt;/h2> &lt;ul>&lt;li>Click a thumbnail to open a fullscreen dialog with the image&lt;/li> &lt;li>Horizontal scroll-snap navigation between images&lt;/li> &lt;li>Prev/next buttons on each side of the dialog&lt;/li> &lt;li>View transition animation from thumbnail to fullscreen&lt;/li> &lt;li>Close on Esc, backdrop click, or vertical page scroll&lt;/li> &lt;li>Full-size images preloaded on hover for instant transitions&lt;/li> &lt;li>Thumbnails use &lt;code>sizes="120px"&lt;/code> to load smaller variants&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Sveleton&lt;/p> &lt;p itemprop="description">Bootstrap your next media project&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Document Deploy</title>
        <link href="/todos/document-deploy/"/>
        <id>/todos/document-deploy/</id>
        <updated>2026-04-13T00:12:00.000Z</updated>
        <published>2026-04-13T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/document-deploy">Document Deploy&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Document &lt;span>Deploy&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-04-13" itemprop="datePublished">April 13&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-04-17" itemprop="dateModified">April 17&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Document the full deployment setup for &lt;code>sveleton.ramilkarimov.me&lt;/code> — server config, nginx, SSL, and the deploy process.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Document server setup (nginx config, web root, SSL via certbot)&lt;/li> &lt;li>Document &lt;code>./deploy.sh&lt;/code> usage and requirements&lt;/li> &lt;li>Add deploy section to &lt;code>CLAUDE.md&lt;/code> for future reference&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Docs&lt;/p> &lt;p itemprop="description">Document the deploy setup&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Move Deploy to CI</title>
        <link href="/todos/move-deploy-to-ci/"/>
        <id>/todos/move-deploy-to-ci/</id>
        <updated>2026-04-13T00:13:00.000Z</updated>
        <published>2026-04-13T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/move-deploy-to-ci">Move Deploy To Ci&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Move Deploy &lt;span>to CI&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-04-13" itemprop="datePublished">April 13&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-04-17" itemprop="dateModified">April 17&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Currently deployment is manual via &lt;code>./deploy.sh&lt;/code>. Move it to
    GitHub Actions so every push to &lt;code>main&lt;/code> deploys automatically to &lt;code>sveleton.ramilkarimov.me&lt;/code>.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Add &lt;code>SSH_PRIVATE_KEY&lt;/code> secret to GitHub repo&lt;/li> &lt;li>Add deploy job to &lt;code>.github/workflows/ci.yml&lt;/code> (runs after build,
      on &lt;code>main&lt;/code> only)&lt;/li> &lt;li>Deploy via rsync to &lt;code>root@universal.ramilkarimov.me:/var/www/sveleton&lt;/code>&lt;/li> &lt;li>Remove or keep &lt;code>deploy.sh&lt;/code> for local use&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">CI&lt;/p> &lt;p itemprop="description">Automate the deploy&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Re-enable Share Button</title>
        <link href="/todos/reenable-share-button/"/>
        <id>/todos/reenable-share-button/</id>
        <updated>2026-04-13T00:14:00.000Z</updated>
        <published>2026-04-13T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/reenable-share-button">Reenable Share Button&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Re-enable &lt;span>Share Button&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-04-13" itemprop="datePublished">April 13&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>The share post link button was temporarily removed from the publication
    footer. It needs to be re-enabled once the implementation is ready.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Re-add &lt;code>SharePostLink&lt;/code> to &lt;code>Publication.svelte&lt;/code> article footer&lt;/li> &lt;li>Ensure Yandex Metrics event tracking works correctly&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">UI&lt;/p> &lt;p itemprop="description">Restore share functionality&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Revise Deploy Process</title>
        <link href="/todos/revise-deploy-process/"/>
        <id>/todos/revise-deploy-process/</id>
        <updated>2026-04-13T00:15:00.000Z</updated>
        <published>2026-04-13T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/revise-deploy-process">Revise Deploy Process&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Revise &lt;span>Deploy Process&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-04-13" itemprop="datePublished">April 13&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-04-17" itemprop="dateModified">April 17&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Review the current deployment setup and improve it where needed.&lt;/p> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Deploy&lt;/p> &lt;p itemprop="description">Improve the deploy process&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Add test run to CI</title>
        <link href="/todos/add-test-run-to-ci/"/>
        <id>/todos/add-test-run-to-ci/</id>
        <updated>2026-04-06T00:16:00.000Z</updated>
        <published>2026-04-06T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/add-test-run-to-ci">Add Test Run To Ci&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Add &lt;span>test run to CI&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-04-06" itemprop="datePublished">April 6&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-04-17" itemprop="dateModified">April 17&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>&lt;code>pnpm test:ci&lt;/code> (&lt;code>vitest run&lt;/code>) is set up and passing locally. Add it to &lt;code>.github/workflows/ci.yml&lt;/code> before the build step so failures are caught early.&lt;/p> &lt;h2>Change&lt;/h2> &lt;p>In &lt;code>.github/workflows/ci.yml&lt;/code>, add after &lt;code>pnpm check&lt;/code>:&lt;/p> &lt;pre>&lt;code>- run: pnpm test:ci&lt;/code>&lt;/pre> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">CI&lt;/p> &lt;p itemprop="description">Tests run on every push&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Cleanup Magazine components</title>
        <link href="/todos/cleanup-magazine-components/"/>
        <id>/todos/cleanup-magazine-components/</id>
        <updated>2026-02-28T00:17:00.000Z</updated>
        <published>2026-02-28T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/cleanup-magazine-components">Cleanup Magazine Components&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Cleanup Magazine components&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-28" itemprop="datePublished">February 28&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-05-05" itemprop="dateModified">May 5&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>TBD&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Cleanup Magazine components&lt;/p> &lt;p itemprop="description">Remove all components created specifically for magazine&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Audit: Meta Refactoring</title>
        <link href="/reports/audit-meta-refactoring/"/>
        <id>/reports/audit-meta-refactoring/</id>
        <updated>2026-02-09T00:18:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/reports">Reports&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/reports/audit-meta-refactoring">Audit Meta Refactoring&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Audit: &lt;span>Meta Refactoring&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Comprehensive audit of the Meta.svelte self-resolving refactoring, performed
    by 8 specialized agents in parallel.&lt;/p> &lt;h2>Executive Summary&lt;/h2> &lt;p>The refactoring successfully makes &lt;code>Meta.svelte&lt;/code> self-resolve
    title, description, and new SEO tags from &lt;code>PageMeta&lt;/code> exports via
    synchronous &lt;code>import.meta.glob&lt;/code>. The build succeeds and meta tags render
    correctly in both dev and production. However, the refactoring is
    incomplete: 66 page files still pass a &lt;code>meta&lt;/code> prop to &lt;code>&amp;lt;Publication>&lt;/code> that no longer accepts it, and &lt;code>CLAUDE.md&lt;/code> still documents the old API.&lt;/p> &lt;h2>Critical Issues&lt;/h2> &lt;h3>1. Orphaned meta prop on 66 Publication calls&lt;/h3> &lt;p>&lt;code>Publication.svelte&lt;/code> no longer accepts a &lt;code>meta&lt;/code> prop, but 66 page files still pass &lt;code>meta={{ title, description }}&lt;/code>. Svelte
    silently ignores unknown props at runtime, so there is no error, but this is
    dead code that creates API confusion.&lt;/p> &lt;aside>&lt;p>Fix: Remove &lt;code>meta={{...}}&lt;/code> from all 66 page
      files. This is a mechanical bulk change.&lt;/p>&lt;/aside> &lt;h3>2. CLAUDE.md shows outdated Publication API&lt;/h3> &lt;p>Lines 82-90 of &lt;code>CLAUDE.md&lt;/code> show the old pattern with &lt;code>meta={{ title, description }}&lt;/code> on &lt;code>&amp;lt;Publication>&lt;/code>. This no longer works since Publication
    dropped the prop.&lt;/p> &lt;aside>&lt;p>Fix: Update the todo page template in &lt;code>CLAUDE.md&lt;/code> to remove the &lt;code>meta&lt;/code> prop from &lt;code>&amp;lt;Publication>&lt;/code>.&lt;/p>&lt;/aside> &lt;h3>3. Unused SharePostLink import in PublicationHead.svelte&lt;/h3> &lt;p>&lt;code>PublicationHead.svelte&lt;/code> line 6 imports &lt;code>SharePostLink&lt;/code> from &lt;code>$lib&lt;/code> but never uses it. This was likely left over from a previous version.&lt;/p> &lt;aside>&lt;p>Fix: Change &lt;code>import { SharePostLink, Meta } from '$lib'&lt;/code> to &lt;code>import { Meta } from '$lib'&lt;/code>.&lt;/p>&lt;/aside> &lt;h2>Maintainability Concerns&lt;/h2> &lt;h3>Pages map built 3 times&lt;/h3> &lt;p>The same &lt;code>import.meta.glob('/**/+page.svelte', { import: 'meta', eager: true
      })&lt;/code> pattern is duplicated in 3 files:&lt;/p> &lt;ul>&lt;li>&lt;code>Meta.svelte&lt;/code> (for head tag resolution)&lt;/li> &lt;li>&lt;code>Articles.svelte&lt;/code> (for article listings)&lt;/li> &lt;li>&lt;code>pages.remote.js&lt;/code> (for server-side metadata)&lt;/li>&lt;/ul> &lt;p>Each builds a nearly identical pages map with the same &lt;code>pathToPublicURL&lt;/code> + filter + cover-strip logic. If the glob pattern or mapping logic needs to
    change, all 3 must be updated.&lt;/p> &lt;aside>&lt;p>Recommendation: Consider extracting into a shared &lt;code>getPagesMeta()&lt;/code> utility. However, since &lt;code>import.meta.glob&lt;/code> is a Vite compile-time transform, extracting it to a function that returns
      the glob result may not be straightforward. Worth investigating.&lt;/p>&lt;/aside> &lt;h3>getCoverUrl duplicated&lt;/h3> &lt;p>The &lt;code>getCoverUrl(cover)&lt;/code> helper exists in both &lt;code>Meta.svelte&lt;/code> and &lt;code>page-renderer.svelte.js&lt;/code> with identical logic.&lt;/p> &lt;aside>&lt;p>Recommendation: Extract to &lt;code>url-utils.js&lt;/code>.&lt;/p>&lt;/aside> &lt;h3>Magic numbers for OG image dimensions&lt;/h3> &lt;p>&lt;code>Meta.svelte&lt;/code> hardcodes &lt;code>1200&lt;/code> and &lt;code>630&lt;/code> for OG image width and height. These are standard Open Graph sizes but would
    be clearer as named constants.&lt;/p> &lt;h2>Consistency Audit&lt;/h2> &lt;h3>Glob pattern: Consistent&lt;/h3> &lt;p>All 3 files use the same glob pattern, &lt;code>pathToPublicURL&lt;/code> prefix ( &lt;code>'/src/routes/'&lt;/code>), and cover-stripping destructure. The pattern
    matches the established convention in &lt;code>Articles.svelte&lt;/code>.&lt;/p> &lt;h3>Indentation: Mixed&lt;/h3> &lt;p>Some files use tabs (newer todo pages), others use spaces (older pages, lib
    components). This is a pre-existing inconsistency not introduced by this
    refactoring.&lt;/p> &lt;h3>Title variations: By design&lt;/h3> &lt;p>Some pages have different titles in &lt;code>PageMeta.title&lt;/code> vs the
    former Publication &lt;code>meta.title&lt;/code> (e.g., "Sync editor settings" vs "Sync Biome, Zed and VS Code settings").
    Since Meta now resolves from &lt;code>PageMeta.title&lt;/code>, the shorter title will appear in &lt;code>&amp;lt;title>&lt;/code>. This may or may not be desired.&lt;/p> &lt;h2>Dead Code&lt;/h2> &lt;ul>&lt;li>SharePostLink import in &lt;code>PublicationHead.svelte&lt;/code> —
      imported but unused&lt;/li> &lt;li>66 &lt;code>meta={{...}}&lt;/code> props on Publication
      calls — passed but ignored&lt;/li> &lt;li>YandexMetricsEventShareLink in &lt;code>SharePostLink.svelte&lt;/code> — defined but never called (pre-existing)&lt;/li>&lt;/ul> &lt;h2>AI Artifacts&lt;/h2> &lt;p>Overly verbose JSDoc comments exist in several files (notably &lt;code>Articles.svelte&lt;/code> with a 40-line file-level comment block). These are pre-existing and not
    introduced by this refactoring. The new code in &lt;code>Meta.svelte&lt;/code> has
    appropriate-level documentation.&lt;/p> &lt;h2>Test Coverage&lt;/h2> &lt;p>No tests exist. Vitest 4.0.18 is installed as a devDependency but no test
    script, config, or test files exist. Key functions that should be tested:&lt;/p> &lt;ul>&lt;li>&lt;code>pathToPublicURL&lt;/code> — core routing logic, pure function, easy to test&lt;/li> &lt;li>&lt;code>getCoverUrl&lt;/code> — image URL extraction, pure function&lt;/li> &lt;li>&lt;code>escape_html&lt;/code>, &lt;code>pathEncode&lt;/code>, &lt;code>pathDecode&lt;/code> — security-critical utilities&lt;/li>&lt;/ul> &lt;h2>Documentation&lt;/h2> &lt;ul>&lt;li>CLAUDE.md: Outdated — still shows &lt;code>meta&lt;/code> prop on
      Publication&lt;/li> &lt;li>MEMORY.md: Accurate — correctly documents the synchronous glob
      approach and that &lt;code>&amp;lt;svelte:head>&lt;/code> cannot use async&lt;/li> &lt;li>Meta.svelte JSDoc: Accurate — Props typedef correctly shows all
      fields as optional&lt;/li> &lt;li>Publication.svelte JSDoc: Accurate — no &lt;code>meta&lt;/code> prop
      documented&lt;/li>&lt;/ul> &lt;h2>What's Fine As-Is&lt;/h2> &lt;ul>&lt;li>The synchronous glob approach correctly avoids the &lt;code>&amp;lt;svelte:head>&lt;/code> async limitation&lt;/li> &lt;li>Prop fallback chain (&lt;code>pageMeta → prop → default&lt;/code>)
      works correctly&lt;/li> &lt;li>New SEO tags (canonical, robots, og:locale, keywords) are correctly
      conditional&lt;/li> &lt;li>Error page correctly falls back to props ( &lt;code>title={page.status}&lt;/code>)&lt;/li> &lt;li>Build succeeds and produces correct static HTML with all meta tags&lt;/li> &lt;li>Cover stripping is consistent with &lt;code>pages.remote.js&lt;/code>&lt;/li> &lt;li>Description field was correctly added to all 68 page meta exports&lt;/li>&lt;/ul> &lt;h2>Action Items&lt;/h2> &lt;h3>Must fix&lt;/h3> &lt;ol>&lt;li>Remove unused &lt;code>SharePostLink&lt;/code> import from &lt;code>PublicationHead.svelte&lt;/code>&lt;/li> &lt;li>Update &lt;code>CLAUDE.md&lt;/code> todo page template to remove &lt;code>meta&lt;/code> prop from Publication&lt;/li> &lt;li>Remove orphaned &lt;code>meta={{...}}&lt;/code> prop from
      all 66 page files&lt;/li>&lt;/ol> &lt;h3>Should fix&lt;/h3> &lt;ol>&lt;li>Extract &lt;code>getCoverUrl&lt;/code> to shared utility&lt;/li> &lt;li>Review title differences between PageMeta and old Publication meta&lt;/li>&lt;/ol> &lt;h3>Nice to have&lt;/h3> &lt;ol>&lt;li>Extract OG image dimensions as named constants&lt;/li> &lt;li>Investigate consolidating the 3x glob pattern&lt;/li> &lt;li>Set up test infrastructure and add tests for &lt;code>pathToPublicURL&lt;/code>&lt;/li>&lt;/ol> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Audit Complete&lt;/p> &lt;p itemprop="description">8-agent parallel audit of the Meta refactoring&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Add feed link tags to layout</title>
        <link href="/todos/add-feed-link-tags/"/>
        <id>/todos/add-feed-link-tags/</id>
        <updated>2026-02-09T00:19:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/add-feed-link-tags">Add Feed Link Tags&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Add feed link tags &lt;span>to layout&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-05-04" itemprop="dateModified">May 4&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>The feed link tags in &lt;code>+layout.svelte&lt;/code> were commented out during
    initial setup and never restored. Without &lt;code>&amp;lt;link rel="alternate">&lt;/code> tags, feed readers and browsers cannot auto-discover the site's JSON and XML
    feeds.&lt;/p> &lt;h2>Current State&lt;/h2> &lt;ul>&lt;li>&lt;code>feed.json&lt;/code> and &lt;code>feed.xml&lt;/code> routes are restored and working&lt;/li> &lt;li>&lt;code>+layout.svelte&lt;/code> has no &lt;code>&amp;lt;link rel="alternate">&lt;/code> tags pointing to either feed&lt;/li>&lt;/ul> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Add &lt;code>&amp;lt;link rel="alternate" type="application/feed+json" href="/feed.json">&lt;/code> to &lt;code>&amp;lt;svelte:head>&lt;/code> in &lt;code>+layout.svelte&lt;/code>&lt;/li> &lt;li>Add &lt;code>&amp;lt;link rel="alternate" type="application/atom+xml" href="/feed.xml">&lt;/code> to &lt;code>&amp;lt;svelte:head>&lt;/code> in &lt;code>+layout.svelte&lt;/code>&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Feed discovery&lt;/p> &lt;p itemprop="description">Discoverable RSS and JSON feeds&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Add Fields to PageMeta</title>
        <link href="/todos/add-fields-to-page-meta/"/>
        <id>/todos/add-fields-to-page-meta/</id>
        <updated>2026-02-09T00:20:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/add-fields-to-page-meta">Add Fields To Page Meta&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Add Fields to &lt;span>PageMeta&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>The &lt;code>PageMeta&lt;/code> interface in &lt;code>app.d.ts&lt;/code> defines the
    metadata structure for all pages. It currently supports title, date,
    authors, tags, sort order, cover image, and todo state. This task is about
    extending it with additional fields to support richer page metadata.&lt;/p> &lt;h2>Current Fields&lt;/h2> &lt;ul>&lt;li>&lt;code>title&lt;/code> — page title (required)&lt;/li> &lt;li>&lt;code>menuTitle&lt;/code> — alternative title for navigation menus&lt;/li> &lt;li>&lt;code>date&lt;/code> — publication date in DD-MM-YYYY format&lt;/li> &lt;li>&lt;code>updated&lt;/code> — last updated date&lt;/li> &lt;li>&lt;code>authors&lt;/code> — author tags or full Author objects&lt;/li> &lt;li>&lt;code>tags&lt;/code> — content tags&lt;/li> &lt;li>&lt;code>sortOrder&lt;/code> — numeric sort order for listings&lt;/li> &lt;li>&lt;code>cover&lt;/code> — cover image&lt;/li> &lt;li>&lt;code>state&lt;/code> — todo state (done, new, in_progress)&lt;/li>&lt;/ul> &lt;h2>Candidate Fields&lt;/h2> &lt;ul>&lt;li>&lt;code>description&lt;/code> — SEO meta description, currently only passed to Publication&lt;/li> &lt;li>&lt;code>draft&lt;/code> — boolean to mark unpublished pages&lt;/li> &lt;li>&lt;code>featured&lt;/code> — boolean or number for featured/pinned content&lt;/li> &lt;li>&lt;code>readingTime&lt;/code> — estimated reading time override&lt;/li> &lt;li>&lt;code>canonical&lt;/code> — canonical URL for cross-posted content&lt;/li> &lt;li>&lt;code>noindex&lt;/code> — exclude page from search engines&lt;/li> &lt;li>&lt;code>lang&lt;/code> — page language if different from site default&lt;/li> &lt;li>&lt;code>category&lt;/code> — broader content category beyond tags&lt;/li>&lt;/ul> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Decide which fields to add to &lt;code>PageMeta&lt;/code>&lt;/li> &lt;li>Update the interface in &lt;code>app.d.ts&lt;/code>&lt;/li> &lt;li>Update components that consume &lt;code>PageMeta&lt;/code> to use new fields&lt;/li> &lt;li>Update existing pages if needed&lt;/li> &lt;li>Verify type checking passes with &lt;code>pnpm check&lt;/code>&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Page metadata&lt;/p> &lt;p itemprop="description">Richer metadata for pages&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Add links to footer</title>
        <link href="/todos/add-footer-links/"/>
        <id>/todos/add-footer-links/</id>
        <updated>2026-02-09T00:21:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/add-footer-links">Add Footer Links&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Add links to &lt;span>footer&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-02-09" itemprop="dateModified">February 9&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Add links to the glossary page and the sitemap into the footer for better
    site navigation.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Add a glossary link to the footer&lt;/li> &lt;li>Add a sitemap link to the footer&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Footer Links&lt;/p> &lt;p itemprop="description">Improve footer navigation&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Add glossary page</title>
        <link href="/todos/add-glossary-page/"/>
        <id>/todos/add-glossary-page/</id>
        <updated>2026-02-09T00:22:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/add-glossary-page">Add Glossary Page&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Add &lt;span>glossary page&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-02-09" itemprop="dateModified">February 9&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a glossary page that defines key terms and concepts used across the
    project.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Create a new route for the glossary page&lt;/li> &lt;li>Define glossary data structure (term, definition, related links)&lt;/li> &lt;li>Add alphabetical navigation or search/filter&lt;/li> &lt;li>Link glossary terms from other pages where relevant&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Glossary&lt;/p> &lt;p itemprop="description">Project terminology reference&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Add tests and CI integration</title>
        <link href="/todos/add-tests/"/>
        <id>/todos/add-tests/</id>
        <updated>2026-02-09T00:23:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/add-tests">Add Tests&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Add &lt;span>tests and CI integration&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Vitest is already installed (&lt;code>^4.0.18&lt;/code>) but has no configuration,
    no test scripts, and no test files. This is the umbrella task, split into 4
    sub-tasks that should be done in order.&lt;/p> &lt;h2>Sub-tasks&lt;/h2> &lt;ol>&lt;li>&lt;a href="/todos/setup-testing-environment/">Set up testing environment and CI&lt;/a> -- vitest config, scripts, CI pipeline step&lt;/li> &lt;li>&lt;a href="/todos/unit-tests-utilities/">Unit tests for utility functions&lt;/a> -- escape.js, url-utils.js, scroll-to.js&lt;/li> &lt;li>&lt;a href="/todos/unit-tests-endpoints/">Unit tests for endpoints and renderer&lt;/a> -- sitemap, feed, page-renderer&lt;/li> &lt;li>&lt;a href="/todos/component-tests/">Component tests&lt;/a> -- Svelte component rendering with @testing-library/svelte&lt;/li>&lt;/ol> &lt;h2>Execution order&lt;/h2> &lt;p>Task 1 (environment setup) must be done first. Tasks 2 and 3 can be done in
    parallel after that. Task 4 (component tests) depends on task 1 and may
    require additional dependencies (&lt;code>@testing-library/svelte&lt;/code>).&lt;/p> &lt;h2>E2E tests (future consideration)&lt;/h2> &lt;p>Playwright for full browser testing. Lower priority since this is a static
    site, but useful for interactive components.&lt;/p> &lt;ul>&lt;li>Homepage loads and renders&lt;/li> &lt;li>Navigation works (links, breadcrumbs)&lt;/li> &lt;li>Todo listing page shows all todos&lt;/li> &lt;li>Individual todo pages render content&lt;/li> &lt;li>Interactive components: Clock, Timer, Snake game, Pinball&lt;/li> &lt;li>Accordion expand/collapse&lt;/li> &lt;li>Smooth scroll behavior&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Test coverage&lt;/p> &lt;p itemprop="description">Ship with confidence&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Cleanup PageMeta</title>
        <link href="/todos/cleanup-page-meta/"/>
        <id>/todos/cleanup-page-meta/</id>
        <updated>2026-02-09T00:24:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/cleanup-page-meta">Cleanup Page Meta&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Cleanup &lt;span>PageMeta&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>After adding new fields to &lt;code>PageMeta&lt;/code>, several inconsistencies
    remain between the interface, its consumers, and the runtime data flow. This
    task addresses duplication, missing type connections, and stale patterns.&lt;/p> &lt;h2>Issues&lt;/h2> &lt;ul>&lt;li>&lt;code>description&lt;/code> is defined in &lt;code>PageMeta&lt;/code> but not wired through — pages still
      duplicate it in the &lt;code>Publication&lt;/code> meta prop&lt;/li> &lt;li>&lt;code>page-renderer.svelte.js&lt;/code> reads &lt;code>pageMetadata&lt;/code> as untyped &lt;code>Record&amp;lt;string, unknown>&lt;/code> — should use &lt;code>PageMeta&lt;/code>&lt;/li> &lt;li>&lt;code>FeedItem&lt;/code> in &lt;code>app.d.ts&lt;/code> duplicates fields from &lt;code>PageMeta&lt;/code> (tags, authors, cover) with slightly different types&lt;/li> &lt;li>&lt;code>Publication.svelte&lt;/code> MetaConfig typedef duplicates fields that could come from &lt;code>PageMeta&lt;/code>&lt;/li> &lt;li>&lt;code>PageModule&lt;/code> interface (title, menuTitle) overlaps with &lt;code>PageMeta&lt;/code> — consider removing it&lt;/li> &lt;li>The &lt;code>cover&lt;/code> field is typed as &lt;code>unknown&lt;/code> in &lt;code>PageMeta&lt;/code> but has a specific shape in &lt;code>FeedItem&lt;/code>&lt;/li>&lt;/ul> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Wire &lt;code>PageMeta.description&lt;/code> through Publication so pages don't
      need to pass it twice&lt;/li> &lt;li>Type &lt;code>pageMetadata&lt;/code> in &lt;code>page-renderer.svelte.js&lt;/code> as &lt;code>PageMeta&lt;/code>&lt;/li> &lt;li>Align &lt;code>FeedItem&lt;/code> cover type with &lt;code>PageMeta&lt;/code> cover
      type&lt;/li> &lt;li>Consider deriving &lt;code>FeedItem&lt;/code> fields from &lt;code>PageMeta&lt;/code> using &lt;code>Pick&lt;/code>&lt;/li> &lt;li>Remove &lt;code>PageModule&lt;/code> if fully superseded by &lt;code>PageMeta&lt;/code>&lt;/li> &lt;li>Add a shared cover image type to replace &lt;code>unknown&lt;/code>&lt;/li> &lt;li>Verify with &lt;code>pnpm check&lt;/code>&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Type hygiene&lt;/p> &lt;p itemprop="description">Consistent metadata types&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Component tests</title>
        <link href="/todos/component-tests/"/>
        <id>/todos/component-tests/</id>
        <updated>2026-02-09T00:25:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/component-tests">Component Tests&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Component &lt;span>tests&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Svelte 5 component tests to verify rendering output and behavior. Uses &lt;code>@testing-library/svelte&lt;/code> for DOM-based tests or Svelte's &lt;code>render&lt;/code> from &lt;code>svelte/server&lt;/code> for SSR snapshot tests.&lt;/p> &lt;p>Part of &lt;a href="/todos/add-tests/">Add tests and CI integration&lt;/a> (sub-task 4 of 4). Requires &lt;a href="/todos/setup-testing-environment/">testing environment setup&lt;/a> first.&lt;/p> &lt;h2>Additional setup&lt;/h2> &lt;ul>&lt;li>Install &lt;code>@testing-library/svelte&lt;/code> (check Svelte 5
      compatibility)&lt;/li> &lt;li>Install &lt;code>jsdom&lt;/code> or &lt;code>happy-dom&lt;/code> for DOM environment&lt;/li> &lt;li>Configure &lt;code>$app/*&lt;/code> mocks (stores, navigation, paths,
      environment)&lt;/li>&lt;/ul> &lt;h2>Priority components&lt;/h2> &lt;h3>&lt;code>Meta.svelte&lt;/code>&lt;/h3> &lt;ul>&lt;li>Renders correct &lt;code>&amp;lt;meta>&lt;/code> tags for title, description&lt;/li> &lt;li>Renders &lt;code>og:image&lt;/code>, &lt;code>og:title&lt;/code>, &lt;code>og:description&lt;/code>&lt;/li> &lt;li>Handles missing optional props&lt;/li>&lt;/ul> &lt;h3>&lt;code>TodoCover.svelte&lt;/code>&lt;/h3> &lt;ul>&lt;li>Renders different visual states: &lt;code>new&lt;/code>, &lt;code>done&lt;/code>, &lt;code>in_progress&lt;/code>&lt;/li>&lt;/ul> &lt;h3>&lt;code>PublicationDate.svelte&lt;/code>&lt;/h3> &lt;ul>&lt;li>Formats &lt;code>DD-MM-YYYY&lt;/code> dates correctly for display&lt;/li> &lt;li>Handles &lt;code>updated&lt;/code> date&lt;/li>&lt;/ul> &lt;h3>&lt;code>ReadingTime.svelte&lt;/code>&lt;/h3> &lt;ul>&lt;li>Calculates and displays reading time from word count&lt;/li>&lt;/ul> &lt;h3>&lt;code>Accordion.svelte&lt;/code>&lt;/h3> &lt;ul>&lt;li>Renders collapsed by default&lt;/li> &lt;li>Expands on click/interaction&lt;/li> &lt;li>Shows/hides content&lt;/li>&lt;/ul> &lt;h3>&lt;code>AnchorHeading.svelte&lt;/code>&lt;/h3> &lt;ul>&lt;li>Renders heading element with anchor link&lt;/li> &lt;li>Correct &lt;code>id&lt;/code> attribute&lt;/li>&lt;/ul> &lt;h2>Navigation components&lt;/h2> &lt;h3>&lt;code>NavAnchor.svelte&lt;/code>&lt;/h3> &lt;ul>&lt;li>Renders anchor with correct &lt;code>id&lt;/code> and &lt;code>name&lt;/code>&lt;/li>&lt;/ul> &lt;h3>&lt;code>Breadcrumbs.svelte&lt;/code>&lt;/h3> &lt;ul>&lt;li>Generates correct breadcrumb trail from URL path&lt;/li> &lt;li>Links are correct for each level&lt;/li>&lt;/ul> &lt;h3>&lt;code>Nav.svelte&lt;/code>&lt;/h3> &lt;ul>&lt;li>Renders navigation items&lt;/li> &lt;li>Active state for current page&lt;/li>&lt;/ul> &lt;h2>Content components&lt;/h2> &lt;h3>&lt;code>Articles.svelte&lt;/code>&lt;/h3> &lt;ul>&lt;li>Renders article list from feed items&lt;/li> &lt;li>Handles empty list&lt;/li> &lt;li>Correct links and titles&lt;/li>&lt;/ul> &lt;h3>&lt;code>PostPreview.svelte&lt;/code>&lt;/h3> &lt;ul>&lt;li>Renders preview card with title, summary, date&lt;/li> &lt;li>Cover image rendering&lt;/li>&lt;/ul> &lt;h3>&lt;code>LinkBlock.svelte&lt;/code>&lt;/h3> &lt;ul>&lt;li>Renders link with correct &lt;code>href&lt;/code>&lt;/li>&lt;/ul> &lt;h3>&lt;code>CallToAction.svelte&lt;/code>&lt;/h3> &lt;ul>&lt;li>Renders CTA with title and description&lt;/li>&lt;/ul> &lt;h3>&lt;code>SharePostLink.svelte&lt;/code>&lt;/h3> &lt;ul>&lt;li>Generates correct share URL&lt;/li>&lt;/ul> &lt;h3>&lt;code>ReadNext.svelte&lt;/code>&lt;/h3> &lt;ul>&lt;li>Renders next post suggestion with title and link&lt;/li> &lt;li>Handles missing post gracefully&lt;/li>&lt;/ul> &lt;h3>&lt;code>Publication.svelte&lt;/code>&lt;/h3> &lt;ul>&lt;li>Full wrapper: renders meta, heading, content, CTA&lt;/li> &lt;li>Passes props through to child components&lt;/li>&lt;/ul> &lt;h2>Notes&lt;/h2> &lt;ul>&lt;li>Components using &lt;code>$app/stores&lt;/code> (page, navigating) need mocked
      stores&lt;/li> &lt;li>Components using &lt;code>$app/paths&lt;/code> (base, assets) need path mocks&lt;/li> &lt;li>Some components may use Svelte 5 runes (&lt;code>$state&lt;/code>, &lt;code>$derived&lt;/code>) -- check testing-library compatibility&lt;/li> &lt;li>SSR render tests (&lt;code>svelte/server&lt;/code>) are simpler but only verify
      HTML output, not interactivity&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Component tests&lt;/p> &lt;p itemprop="description">UI correctness&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Deduplicate utility functions</title>
        <link href="/todos/deduplicate-utility-functions/"/>
        <id>/todos/deduplicate-utility-functions/</id>
        <updated>2026-02-09T00:26:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/deduplicate-utility-functions">Deduplicate Utility Functions&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Deduplicate &lt;span>utility functions&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-05-04" itemprop="dateModified">May 4&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Several pieces of logic are duplicated across the codebase and should be
    extracted into shared utilities.&lt;/p> &lt;h2>Duplicated Logic&lt;/h2> &lt;ul>&lt;li>&lt;del>&lt;strong>Date parsing (DD-MM-YYYY)&lt;/strong> - duplicated in &lt;code>PublicationDate.svelte&lt;/code> and &lt;code>page-renderer.svelte.js&lt;/code>&lt;/del> — extracted to &lt;code>date-utils.js&lt;/code>&lt;/li> &lt;li>&lt;del>&lt;strong>getCoverUrl()&lt;/strong> - identical implementation in &lt;code>Meta.svelte&lt;/code> and &lt;code>page-renderer.svelte.js&lt;/code>&lt;/del> — deduplicated to &lt;code>url-utils.js&lt;/code>&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">DRY code&lt;/p> &lt;p itemprop="description">Less duplication&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Enable remote functions</title>
        <link href="/todos/enable-remote-functions/"/>
        <id>/todos/enable-remote-functions/</id>
        <updated>2026-02-09T00:27:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/enable-remote-functions">Enable Remote Functions&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Enable &lt;span>remote functions&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-02-09" itemprop="dateModified">February 9&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Enable &lt;a href="https://svelte.dev/docs/kit/remote-functions">SvelteKit remote functions&lt;/a> to allow &lt;code>.remote.ts&lt;/code> files with &lt;code>query&lt;/code>, &lt;code>prerender&lt;/code>,&lt;code>command&lt;/code>, and &lt;code>form&lt;/code> functions.&lt;/p> &lt;h2>Changes to svelte.config.js&lt;/h2> &lt;pre>&lt;code>export default {
  kit: {
    experimental: {
      remoteFunctions: true
    }
  },
  compilerOptions: {
    experimental: {
      async: true
    }
  }
}&lt;/code>&lt;/pre> &lt;h2>Docs&lt;/h2> &lt;ul>&lt;li>&lt;a href="https://svelte.dev/docs/kit/remote-functions">Remote functions&lt;/a>&lt;/li> &lt;li>&lt;a href="https://svelte.dev/docs/kit/$app-server">$app/server&lt;/a>&lt;/li>&lt;/ul> &lt;h2>Notes&lt;/h2> &lt;ul>&lt;li>Feature is experimental, APIs may change&lt;/li> &lt;li>&lt;code>async: true&lt;/code> compiler option enables &lt;code>await&lt;/code> in component templates&lt;/li> &lt;li>Prerequisite for the &lt;a href="/todos/create-pages-metadata-module">pages metadata remote function&lt;/a> and &lt;a href="/todos/use-remote-function-to-read-next">ReadNext remote function&lt;/a> tasks&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Remote functions&lt;/p> &lt;p itemprop="description">Server-side type safety&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Extract hardcoded config values</title>
        <link href="/todos/extract-hardcoded-config-values/"/>
        <id>/todos/extract-hardcoded-config-values/</id>
        <updated>2026-02-09T00:28:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/extract-hardcoded-config-values">Extract Hardcoded Config Values&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Extract &lt;span>hardcoded config values&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Several values are hardcoded in components that should be extracted into a
    config or environment variables for portability.&lt;/p> &lt;h2>Hardcoded Values&lt;/h2> &lt;ul>&lt;li>Yandex Metrics ID &lt;code>34795480&lt;/code> in &lt;code>CallToAction.svelte&lt;/code> and &lt;code>SharePostLink.svelte&lt;/code>&lt;/li> &lt;li>Base URL &lt;code>https://sveleton.ramilkarimov.me&lt;/code> in &lt;code>Img.svelte&lt;/code>&lt;/li> &lt;li>Unused function &lt;code>YandexMetricsEventShareLink()&lt;/code> in &lt;code>SharePostLink.svelte&lt;/code> (dead code)&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Config cleanup&lt;/p> &lt;p itemprop="description">Portable configuration&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Finish Svelte 5 migration</title>
        <link href="/todos/finish-svelte5-migration/"/>
        <id>/todos/finish-svelte5-migration/</id>
        <updated>2026-02-09T00:29:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/finish-svelte5-migration">Finish Svelte5 Migration&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Finish &lt;span>Svelte 5 migration&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Some components still use the legacy &lt;code>export let&lt;/code> pattern instead
    of the Svelte 5 &lt;code>$props()&lt;/code> rune.&lt;/p> &lt;h2>Components to Migrate&lt;/h2> &lt;ul>&lt;li>&lt;code>src/lib/Accordion.svelte&lt;/code>- uses &lt;code>export let&lt;/code>&lt;/li> &lt;li>&lt;code>src/lib/AnchorHeading.svelte&lt;/code> - uses &lt;code>export let&lt;/code>&lt;/li> &lt;li>&lt;code>src/lib/PublicationAuthors.svelte&lt;/code> - uses &lt;code>export let&lt;/code> (3 props)&lt;/li> &lt;li>&lt;code>src/lib/Fun/Timer.svelte&lt;/code>- uses &lt;code>export let&lt;/code>&lt;/li>&lt;/ul> &lt;h2>Deprecated Imports&lt;/h2> &lt;ul>&lt;li>&lt;del>&lt;code>src/routes/+error.svelte&lt;/code> - uses &lt;code>$app/stores&lt;/code> instead of &lt;code>$app/state&lt;/code>&lt;/del> — migrated&lt;/li> &lt;li>&lt;code>src/routes/Header.svelte&lt;/code> - uses &lt;code>$app/stores&lt;/code> instead of &lt;code>$app/state&lt;/code>&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Svelte 5&lt;/p> &lt;p itemprop="description">Consistent runes usage&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Fix breadcrumbs layout</title>
        <link href="/todos/fix-breadcrumbs-layout/"/>
        <id>/todos/fix-breadcrumbs-layout/</id>
        <updated>2026-02-09T00:30:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/fix-breadcrumbs-layout">Fix Breadcrumbs Layout&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Fix breadcrumbs &lt;span>layout&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-02-09" itemprop="dateModified">February 9&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Fix layout issues with the breadcrumbs component.&lt;/p> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Breadcrumbs fix&lt;/p> &lt;p itemprop="description">Fix breadcrumbs layout&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Fix CI type errors and lint errors</title>
        <link href="/todos/fix-ci-type-errors/"/>
        <id>/todos/fix-ci-type-errors/</id>
        <updated>2026-02-09T00:31:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/fix-ci-type-errors">Fix Ci Type Errors&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Fix CI &lt;span>type errors and lint errors&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Both &lt;code>pnpm check&lt;/code> and &lt;code>pnpm lint&lt;/code> are currently
    failing, which means CI is broken.&lt;/p> &lt;h2>Type Errors&lt;/h2> &lt;ul>&lt;li>&lt;del>&lt;code>excluded&lt;/code> and &lt;code>featured&lt;/code> properties missing from &lt;code>PageMeta&lt;/code> interface in &lt;code>src/app.d.ts&lt;/code>&lt;/del> — added&lt;/li> &lt;li>&lt;del>&lt;code>excluded&lt;/code> missing from &lt;code>FeedItem&lt;/code> interface&lt;/del> — added&lt;/li> &lt;li>&lt;code>cover&lt;/code> variable used before declaration in ~30 todo pages&lt;/li>&lt;/ul> &lt;h2>Lint Errors&lt;/h2> &lt;ul>&lt;li>&lt;code>useExportType&lt;/code> issues across todo pages&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Fix CI&lt;/p> &lt;p itemprop="description">Green builds again&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Fix naming inconsistencies</title>
        <link href="/todos/fix-naming-inconsistencies/"/>
        <id>/todos/fix-naming-inconsistencies/</id>
        <updated>2026-02-09T00:32:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/fix-naming-inconsistencies">Fix Naming Inconsistencies&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Fix &lt;span>naming inconsistencies&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Several naming inconsistencies across the codebase.&lt;/p> &lt;h2>File Names&lt;/h2> &lt;ul>&lt;li>&lt;code>src/lib/Fun/pinball.svelte&lt;/code> - should be PascalCase ( &lt;code>Pinball.svelte&lt;/code>)&lt;/li> &lt;li>&lt;code>src/lib/svg-icons/LinkedIn.svelte&lt;/code> - should follow &lt;code>*Icon.svelte&lt;/code> convention&lt;/li>&lt;/ul> &lt;h2>Prop Names&lt;/h2> &lt;p>Some components use snake_case props instead of camelCase:&lt;/p> &lt;ul>&lt;li>&lt;code>CallToAction.svelte&lt;/code> - &lt;code>button_text&lt;/code>, &lt;code>button_link&lt;/code>&lt;/li> &lt;li>&lt;code>CallToAction-black.svelte&lt;/code> - &lt;code>button_text&lt;/code>, &lt;code>button_link&lt;/code>&lt;/li> &lt;li>&lt;code>PostPreview.svelte&lt;/code> - &lt;code>post_title&lt;/code>, &lt;code>post_link&lt;/code>, &lt;code>cover_src&lt;/code>, etc.&lt;/li>&lt;/ul> &lt;h2>CSS Typo&lt;/h2> &lt;ul>&lt;li>&lt;code>CallToAction-black.svelte:23&lt;/code> - CSS class &lt;code>desctiption&lt;/code> should be &lt;code>description&lt;/code>&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Consistency&lt;/p> &lt;p itemprop="description">Uniform naming&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Investigate installHook.js.map 404</title>
        <link href="/todos/investigate-installhook-404/"/>
        <id>/todos/investigate-installhook-404/</id>
        <updated>2026-02-09T00:33:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/investigate-installhook-404">Investigate Installhook 404&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Investigate &lt;span>installHook.js.map 404&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Dev server logs show: &lt;br/> &lt;code>[404] GET /todos/add-fields-to-page-meta/installHook.js.map&lt;/code>&lt;/p> &lt;p>This is likely a browser extension (React DevTools, Vue DevTools, etc.)
    injecting &lt;code>installHook.js&lt;/code> into the page and then requesting its source map relative to the current
    page URL. Need to confirm the source and decide whether to suppress or fix.&lt;/p> &lt;h2>Things to Check&lt;/h2> &lt;ul>&lt;li>Does it reproduce with all browser extensions disabled?&lt;/li> &lt;li>Which extension injects &lt;code>installHook.js&lt;/code>?&lt;/li> &lt;li>Does it happen on all todo pages or only this one?&lt;/li> &lt;li>Is it harmless noise or does it affect the build/SSG output?&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Debug&lt;/p> &lt;p itemprop="description">Fix 404 request&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Move Meta tag into root layout</title>
        <link href="/todos/move-meta-to-root-layout/"/>
        <id>/todos/move-meta-to-root-layout/</id>
        <updated>2026-02-09T00:34:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/move-meta-to-root-layout">Move Meta To Root Layout&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Move Meta tag &lt;span>into root layout&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Currently &lt;code>Meta.svelte&lt;/code> is imported and rendered manually in
    individual pages, listing pages, and inside &lt;code>PublicationHead.svelte&lt;/code>. Since Meta already self-resolves
    title/description/tags from PageMeta via the current URL pathname, it can
    live in the root layout and work for every page automatically.&lt;/p> &lt;h2>Current usage&lt;/h2> &lt;p>Meta is imported and used in these places:&lt;/p> &lt;ul>&lt;li>&lt;code>+page.svelte&lt;/code> -- homepage&lt;/li> &lt;li>&lt;code>+error.svelte&lt;/code> -- error page&lt;/li> &lt;li>&lt;code>todos/+page.svelte&lt;/code> -- todos listing&lt;/li> &lt;li>&lt;code>features/+page.svelte&lt;/code> -- features listing&lt;/li> &lt;li>&lt;code>PublicationHead.svelte&lt;/code> -- all publications&lt;/li> &lt;li>Several standalone todo pages&lt;/li>&lt;/ul> &lt;h2>Goal&lt;/h2> &lt;p>Add &lt;code>&amp;lt;Meta />&lt;/code> to &lt;code>src/routes/+layout.svelte&lt;/code> with no props. It will auto-resolve from PageMeta for every page. Then
    remove all the individual &lt;code>&amp;lt;Meta>&lt;/code> usages.&lt;/p> &lt;h2>Steps&lt;/h2> &lt;ol>&lt;li>Add Meta to &lt;code>+layout.svelte&lt;/code>&lt;/li> &lt;li>Remove Meta from &lt;code>PublicationHead&lt;/code>&lt;/li> &lt;li>Remove Meta from homepage, todos, features&lt;/li> &lt;li>Remove Meta from standalone todo pages&lt;/li> &lt;li>Handle the error page -- it uses explicit props since error pages don't
      have PageMeta. Keep Meta there as a fallback, or add error-specific logic
      to layout Meta.&lt;/li> &lt;li>Verify all pages still have correct meta tags&lt;/li>&lt;/ol> &lt;h2>Edge cases&lt;/h2> &lt;ul>&lt;li>Error page: passes explicit title/description props. Meta falls back to
      props when PageMeta is not found, so it could stay in both error page and
      layout. Check for duplicate title tags.&lt;/li> &lt;li>Homepage: passes explicit props. Verify PageMeta has the correct
      title/description.&lt;/li> &lt;li>Duplicate canonical: root layout already renders canonical link. Meta also
      renders one when pageMeta.canonical is set. Avoid conflicts.&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Centralized meta&lt;/p> &lt;p itemprop="description">One place, every page&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Organize Distribution Options</title>
        <link href="/todos/organize-distribution-options/"/>
        <id>/todos/organize-distribution-options/</id>
        <updated>2026-02-09T00:35:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/organize-distribution-options">Organize Distribution Options&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Organize &lt;span>Distribution Options&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Explore and set up distribution options so the project can be shipped as a
    static bundle, Docker image, or deployed to edge functions depending on the
    target environment.&lt;/p> &lt;h2>Options to evaluate&lt;/h2> &lt;ul>&lt;li>&lt;strong>Static build&lt;/strong> — current default via &lt;code>@sveltejs/adapter-static&lt;/code>, outputs to &lt;code>build/&lt;/code>&lt;/li> &lt;li>&lt;strong>Docker&lt;/strong> — containerized build for self-hosting (Nginx/Caddy serving static files,
      or Node server)&lt;/li> &lt;li>&lt;strong>Edge functions&lt;/strong> — Cloudflare Pages, Vercel Edge, Netlify Edge&lt;/li> &lt;li>&lt;strong>Node server&lt;/strong> — &lt;code>@sveltejs/adapter-node&lt;/code> for traditional server deployment&lt;/li>&lt;/ul> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Document current static adapter setup and its limitations&lt;/li> &lt;li>Add a Dockerfile for static build serving (Nginx or Caddy)&lt;/li> &lt;li>Evaluate edge deployment adapters (Cloudflare, Vercel, Netlify)&lt;/li> &lt;li>Consider multi-adapter setup for different deployment targets&lt;/li> &lt;li>Add build scripts or profiles for each distribution option&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Deploy anywhere&lt;/p> &lt;p itemprop="description">Multiple distribution targets&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Organize Releases Process</title>
        <link href="/todos/organize-releases-process/"/>
        <id>/todos/organize-releases-process/</id>
        <updated>2026-02-09T00:36:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/organize-releases-process">Organize Releases Process&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Organize &lt;span>Releases Process&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Set up a structured release process with versioning, changelogs, and
    deployment workflow.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Define versioning strategy (semver, date-based, etc.)&lt;/li> &lt;li>Set up changelog generation&lt;/li> &lt;li>Configure release workflow (GitHub Releases, tags)&lt;/li> &lt;li>Document the release process&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Ship with confidence&lt;/p> &lt;p itemprop="description">Structured release workflow&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Remove unused dependencies</title>
        <link href="/todos/remove-unused-dependencies/"/>
        <id>/todos/remove-unused-dependencies/</id>
        <updated>2026-02-09T00:37:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/remove-unused-dependencies">Remove Unused Dependencies&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Remove &lt;span>unused dependencies&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Several dependencies in &lt;code>package.json&lt;/code> are installed but never
    used in the codebase.&lt;/p> &lt;h2>Unused Dependencies&lt;/h2> &lt;ul>&lt;li>&lt;code>flowbite&lt;/code> (4.0.1) - not imported anywhere&lt;/li> &lt;li>&lt;code>flowbite-svelte&lt;/code> (1.31.0) - not imported anywhere&lt;/li> &lt;li>&lt;code>fast-glob&lt;/code> (3.3.3) - not referenced in codebase&lt;/li> &lt;li>&lt;code>@sveltejs/adapter-node&lt;/code> (5.5.2) - static adapter is used instead&lt;/li> &lt;li>&lt;code>vitest&lt;/code> (4.0.18) - installed but no tests or config exist. &lt;strong>Note:&lt;/strong> needed for planned &lt;a href="/todos/add-tests/">testing tasks&lt;/a>, do not remove&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Cleanup&lt;/p> &lt;p itemprop="description">Leaner package.json&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Replace NavAnchor with normal anchors</title>
        <link href="/todos/replace-navanchor-with-anchors/"/>
        <id>/todos/replace-navanchor-with-anchors/</id>
        <updated>2026-02-09T00:38:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/replace-navanchor-with-anchors">Replace Navanchor With Anchors&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Replace NavAnchor &lt;span>with normal anchors&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-05-04" itemprop="dateModified">May 4&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>The &lt;code>NavAnchor&lt;/code> component is used throughout publication pages to
    create section anchors for the sidebar navigation. It could be replaced with
    plain HTML anchor elements, reducing the component abstraction.&lt;/p> &lt;h2>Current behavior&lt;/h2> &lt;p>&lt;code>NavAnchor&lt;/code> does three things:&lt;/p> &lt;ol>&lt;li>Renders a &lt;code>&amp;lt;div>&lt;/code> with an &lt;code>id&lt;/code> attribute for
      anchor linking&lt;/li> &lt;li>Registers itself with the sidebar &lt;code>Nav&lt;/code> component via &lt;code>addItem()&lt;/code>/&lt;code>removeItem()&lt;/code> (from &lt;code>Nav.svelte&lt;/code>)&lt;/li> &lt;li>Tracks its DOM position via &lt;code>use:updateTopPosition&lt;/code> action
      for scroll-spy behavior&lt;/li>&lt;/ol> &lt;p>Usage pattern:&lt;/p> &lt;pre>&lt;code>&amp;lt;NavAnchor name="Section Name">&amp;lt;/NavAnchor>
&amp;lt;h2>Section Name&amp;lt;/h2>&lt;/code>&lt;/pre> &lt;h2>Goal&lt;/h2> &lt;p>Replace with plain anchors, e.g.:&lt;/p> &lt;pre>&lt;code>&amp;lt;h2>Section Name&amp;lt;/h2>&lt;/code>&lt;/pre> &lt;h2>Challenge: sidebar navigation&lt;/h2> &lt;p>The key complexity is that NavAnchor is not just an anchor -- it registers
    with the sidebar Nav for table-of-contents generation and scroll-spy.
    Removing NavAnchor requires an alternative way to:&lt;/p> &lt;ul>&lt;li>Discover section headings for the sidebar table of contents&lt;/li> &lt;li>Track scroll position to highlight the active section&lt;/li>&lt;/ul> &lt;h2>Possible approaches&lt;/h2> &lt;h3>Option A: DOM-based heading discovery&lt;/h3> &lt;p>Nav component queries the DOM for headings with &lt;code>id&lt;/code> attributes
    (e.g. &lt;code>h2[id]&lt;/code>) and builds the TOC automatically. Uses &lt;code>IntersectionObserver&lt;/code> for scroll-spy instead of manual position tracking.&lt;/p> &lt;h3>Option B: Svelte action on headings&lt;/h3> &lt;p>Create a &lt;code>use:navSection&lt;/code> action that replaces NavAnchor's
    registration logic. Headings become &lt;code>&amp;lt;h2 use:navSection>&lt;/code>.&lt;/p> &lt;h3>Option C: Keep registration, lose the component&lt;/h3> &lt;p>Move the anchor+registration into an action or into the heading elements
    directly, but still use the &lt;code>addItem&lt;/code>/&lt;code>removeItem&lt;/code> pattern from Nav.&lt;/p> &lt;h2>Scope&lt;/h2> &lt;p>NavAnchor is used in many pages across the codebase. This is a bulk
    replacement task.&lt;/p> &lt;ul>&lt;li>All publication pages (via Publication wrapper pattern)&lt;/li> &lt;li>Feature pages&lt;/li> &lt;li>Todo pages&lt;/li> &lt;li>Standalone pages&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Simpler anchors&lt;/p> &lt;p itemprop="description">Less abstraction, same result&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Restore dynamic OG image generation</title>
        <link href="/todos/restore-og-image-generation/"/>
        <id>/todos/restore-og-image-generation/</id>
        <updated>2026-02-09T00:39:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/restore-og-image-generation">Restore Og Image Generation&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Restore dynamic &lt;span>OG image generation&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>The &lt;code>og/&lt;/code> route was disabled during the initial setup. Currently &lt;code>Meta.svelte&lt;/code> uses the cover image directly via &lt;code>getCoverUrl()&lt;/code> instead of a purpose-built 1200x630 OG image. Social sharing previews are
    either missing or use an arbitrarily sized cover.&lt;/p> &lt;h2>Current State&lt;/h2> &lt;ul>&lt;li>No &lt;code>src/routes/og/&lt;/code> route exists&lt;/li> &lt;li>&lt;code>Meta.svelte&lt;/code> sets &lt;code>og:image&lt;/code> to the raw cover image src (&lt;code>getCoverUrl(cover)&lt;/code>)&lt;/li> &lt;li>OG image meta tags claim 1200x630 PNG but the actual image may be a
      different size and format&lt;/li>&lt;/ul> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Create &lt;code>src/routes/og/[...path]/+server.js&lt;/code> route that
      generates 1200x630 OG images&lt;/li> &lt;li>Decide on generation approach (satori, puppeteer, canvas, or static
      template)&lt;/li> &lt;li>Update &lt;code>Meta.svelte&lt;/code> to point &lt;code>og:image&lt;/code> at the
      generated OG endpoint instead of the raw cover&lt;/li> &lt;li>Ensure OG images are prerendered at build time for static hosting&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">OG images&lt;/p> &lt;p itemprop="description">Better social sharing&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Set up testing environment and CI</title>
        <link href="/todos/setup-testing-environment/"/>
        <id>/todos/setup-testing-environment/</id>
        <updated>2026-02-09T00:40:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/setup-testing-environment">Setup Testing Environment&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Set up &lt;span>testing environment and CI&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-05-15" itemprop="dateModified">May 15&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Vitest &lt;code>^4.0.18&lt;/code> is installed but completely unconfigured. This
    task sets up the foundation so that subsequent test-writing tasks can just
    add &lt;code>.test.js&lt;/code> files and they work.&lt;/p> &lt;p>Part of &lt;a href="/todos/add-tests/">Add tests and CI integration&lt;/a> (sub-task 1 of 4).&lt;/p> &lt;h2>Vitest config&lt;/h2> &lt;p>Create &lt;code>vitest.config.js&lt;/code> (or extend &lt;code>vite.config.js&lt;/code> ):&lt;/p> &lt;ul>&lt;li>Resolve &lt;code>$lib&lt;/code> alias to &lt;code>src/lib&lt;/code>&lt;/li> &lt;li>Resolve &lt;code>$styles&lt;/code> alias to &lt;code>src/styles&lt;/code>&lt;/li> &lt;li>Mock or stub &lt;code>$app/*&lt;/code> imports (paths, environment, stores,
      navigation)&lt;/li> &lt;li>Set &lt;code>environment: 'node'&lt;/code> as default (override per-file for DOM
      tests)&lt;/li> &lt;li>Configure &lt;code>include&lt;/code> pattern: &lt;code>src/**/*.test.{js,ts}&lt;/code>&lt;/li>&lt;/ul> &lt;h2>Package scripts&lt;/h2> &lt;p>Add to &lt;code>package.json&lt;/code>:&lt;/p> &lt;pre>&lt;code>"test": "vitest",
"test:ci": "vitest run"&lt;/code>&lt;/pre> &lt;p>&lt;code>test&lt;/code> runs in watch mode for development. &lt;code>test:ci&lt;/code> runs once and exits for CI.&lt;/p> &lt;h2>CI integration&lt;/h2> &lt;p>Update &lt;code>.github/workflows/ci.yml&lt;/code> to add test step before build:&lt;/p> &lt;pre>&lt;code>- run: pnpm install --frozen-lockfile
- run: pnpm lint
- run: pnpm check
- run: pnpm test:ci
- run: pnpm build&lt;/code>&lt;/pre> &lt;aside>&lt;p>Tests run before build for faster feedback on failures.&lt;/p>&lt;/aside> &lt;h2>Smoke test&lt;/h2> &lt;p>Create one minimal test file (&lt;code>src/lib/__tests__/smoke.test.js&lt;/code>)
    to verify the setup works end-to-end before writing real tests.&lt;/p> &lt;h2>Dependencies to consider&lt;/h2> &lt;ul>&lt;li>&lt;code>@testing-library/svelte&lt;/code> -- for component tests (can be added later in the component tests task)&lt;/li> &lt;li>&lt;code>jsdom&lt;/code> or &lt;code>happy-dom&lt;/code> -- for tests that need DOM APIs (scroll-to.js,
      component tests)&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Testing infra&lt;/p> &lt;p itemprop="description">Foundation for all tests&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Unit tests for endpoints and renderer</title>
        <link href="/todos/unit-tests-endpoints/"/>
        <id>/todos/unit-tests-endpoints/</id>
        <updated>2026-02-09T00:41:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/unit-tests-endpoints">Unit Tests Endpoints&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Unit tests for &lt;span>endpoints and renderer&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Tests for server-side logic: sitemap generation helpers, RSS feed sanitizer,
    and the page renderer. Most of these functions are currently not exported
    and need to be made testable first.&lt;/p> &lt;p>Part of &lt;a href="/todos/add-tests/">Add tests and CI integration&lt;/a> (sub-task 3 of 4). Requires &lt;a href="/todos/setup-testing-environment/">testing environment setup&lt;/a> first. Can be done in parallel with &lt;a href="/todos/unit-tests-utilities/">utility tests&lt;/a>.&lt;/p> &lt;h2>Prerequisite: export helper functions&lt;/h2> &lt;p>Before writing tests, these currently-private functions need to be exported
    (or extracted into separate testable modules):&lt;/p> &lt;ul>&lt;li>&lt;code>sitemap-appendix.xml/+server.js&lt;/code>:&lt;code>getRouteFromPath&lt;/code> , &lt;code>calculatePriority&lt;/code>,&lt;code>extractSections&lt;/code>&lt;/li> &lt;li>&lt;code>feed.xml/+server.js&lt;/code>: &lt;code>sanitizeContentForRSS&lt;/code>&lt;/li> &lt;li>&lt;code>page-renderer.svelte.js&lt;/code>: &lt;code>getCoverUrl&lt;/code>, &lt;code>createSvelteKitStateMocks&lt;/code>, &lt;code>createRenderContext&lt;/code>&lt;/li>&lt;/ul> &lt;aside>&lt;p>Extracting into separate files (e.g. &lt;code>sitemap-helpers.js&lt;/code>, &lt;code>feed-helpers.js&lt;/code>) is cleaner than exporting from +server.js
      files, which have SvelteKit conventions around exports.&lt;/p>&lt;/aside> &lt;h2>Sitemap helpers&lt;/h2> &lt;p>From &lt;code>src/routes/sitemap-appendix.xml/+server.js&lt;/code>:&lt;/p> &lt;h3>&lt;code>getRouteFromPath(filePath)&lt;/code>&lt;/h3> &lt;ul>&lt;li>Strips &lt;code>+page.svelte&lt;/code> and &lt;code>..&lt;/code> prefix&lt;/li> &lt;li>Prepends base path&lt;/li>&lt;/ul> &lt;h3>&lt;code>calculatePriority(path)&lt;/code>&lt;/h3> &lt;ul>&lt;li>&lt;code>/&lt;/code> (root) returns &lt;code>"0.9"&lt;/code>&lt;/li> &lt;li>Each nesting level reduces by 0.1&lt;/li> &lt;li>Minimum priority is &lt;code>"0.1"&lt;/code> (deeply nested paths don't go
      below)&lt;/li> &lt;li>Returns string with one decimal place&lt;/li>&lt;/ul> &lt;h3>&lt;code>extractSections(pagePaths)&lt;/code>&lt;/h3> &lt;ul>&lt;li>Extracts parent sections from page paths&lt;/li> &lt;li>Returns sorted, deduplicated array&lt;/li> &lt;li>Each section has trailing slash&lt;/li> &lt;li>Handles deeply nested paths (creates all intermediate sections)&lt;/li>&lt;/ul> &lt;h2>Feed sanitizer&lt;/h2> &lt;p>From &lt;code>src/routes/feed.xml/+server.js&lt;/code>:&lt;/p> &lt;h3>&lt;code>sanitizeContentForRSS(html)&lt;/code>&lt;/h3> &lt;ul>&lt;li>Removes &lt;code>onload&lt;/code>, &lt;code>onerror&lt;/code> and other event handler
      attributes&lt;/li> &lt;li>Removes single-quoted event handlers&lt;/li> &lt;li>Removes &lt;code>style&lt;/code> attributes (both quote types)&lt;/li> &lt;li>Removes &lt;code>javascript:&lt;/code> URLs&lt;/li> &lt;li>Removes &lt;code>data-*&lt;/code> attributes&lt;/li> &lt;li>Removes &lt;code>class&lt;/code> attributes&lt;/li> &lt;li>Removes &lt;code>id&lt;/code> attributes&lt;/li> &lt;li>Preserves actual content text and tag structure&lt;/li> &lt;li>Test with HTML containing all pattern types combined&lt;/li>&lt;/ul> &lt;h2>Page renderer&lt;/h2> &lt;p>From &lt;code>src/lib/page-renderer.svelte.js&lt;/code>:&lt;/p> &lt;h3>&lt;code>getCoverUrl(cover)&lt;/code>&lt;/h3> &lt;ul>&lt;li>Returns empty string for &lt;code>null&lt;/code>/&lt;code>undefined&lt;/code>/falsy&lt;/li> &lt;li>Returns the string directly if &lt;code>cover&lt;/code> is a string&lt;/li> &lt;li>Extracts &lt;code>img.src&lt;/code> from object form&lt;/li> &lt;li>Returns empty string if object has no &lt;code>img.src&lt;/code>&lt;/li>&lt;/ul> &lt;h3>&lt;code>createSvelteKitStateMocks(filePath, pageData)&lt;/code>&lt;/h3> &lt;ul>&lt;li>Returns object with &lt;code>url&lt;/code>, &lt;code>params&lt;/code>, &lt;code>route&lt;/code>, &lt;code>data&lt;/code>, &lt;code>form&lt;/code>, &lt;code>error&lt;/code>, &lt;code>status&lt;/code>&lt;/li> &lt;li>&lt;code>url&lt;/code> is a valid URL object based on filePath&lt;/li> &lt;li>&lt;code>data.info&lt;/code> merges defaults with provided &lt;code>pageData&lt;/code>&lt;/li> &lt;li>Default date is &lt;code>'01-01-2024'&lt;/code>&lt;/li>&lt;/ul> &lt;h3>&lt;code>createRenderContext&lt;/code>&lt;/h3> &lt;ul>&lt;li>Returns a Map&lt;/li> &lt;li>Has &lt;code>'meta'&lt;/code> key with a Store instance&lt;/li> &lt;li>Has &lt;code>'__request__'&lt;/code> key with page mock&lt;/li>&lt;/ul> &lt;h3>Date formatting in &lt;code>renderBlogPage&lt;/code>&lt;/h3> &lt;ul>&lt;li>&lt;code>DD-MM-YYYY&lt;/code> converts to &lt;code>YYYY-MM-DDT00:00:00-00:00&lt;/code>&lt;/li> &lt;li>Fallback to &lt;code>01-01-2024&lt;/code> when no date provided&lt;/li>&lt;/ul> &lt;h3>&lt;code>EXCLUDE_PATHS&lt;/code> filtering&lt;/h3> &lt;ul>&lt;li>Pages matching excluded paths return &lt;code>null&lt;/code>&lt;/li> &lt;li>Pages not in the set are rendered normally&lt;/li>&lt;/ul> &lt;aside>&lt;p>&lt;code>page-renderer.svelte.js&lt;/code> imports &lt;code>svelte/server&lt;/code> and &lt;code>cheerio&lt;/code>. Testing &lt;code>renderBlogPage&lt;/code> end-to-end
      requires Svelte SSR support in the test environment. Testing the helper
      functions in isolation is simpler.&lt;/p>&lt;/aside> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Endpoint tests&lt;/p> &lt;p itemprop="description">Server logic correctness&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Unit tests for utility functions</title>
        <link href="/todos/unit-tests-utilities/"/>
        <id>/todos/unit-tests-utilities/</id>
        <updated>2026-02-09T00:42:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/unit-tests-utilities">Unit Tests Utilities&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Unit tests for &lt;span>utility functions&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Pure functions that can be tested directly with minimal or no mocking. These
    are the easiest tests to write and provide immediate value.&lt;/p> &lt;p>Part of &lt;a href="/todos/add-tests/">Add tests and CI integration&lt;/a> (sub-task 2 of 4). Requires &lt;a href="/todos/setup-testing-environment/">testing environment setup&lt;/a> first.&lt;/p> &lt;h2>&lt;code>src/lib/escape.js&lt;/code>&lt;/h2> &lt;h3>&lt;code>escape_html(value, is_attr)&lt;/code>&lt;/h3> &lt;ul>&lt;li>Content mode: escapes &lt;code>&amp;amp;&lt;/code> and &lt;code>&amp;lt;&lt;/code>&lt;/li> &lt;li>Attribute mode: escapes &lt;code>&amp;amp;&lt;/code>, &lt;code>&amp;lt;&lt;/code>, and &lt;code>"&lt;/code>&lt;/li> &lt;li>Passthrough: strings with no special characters return unchanged&lt;/li> &lt;li>Edge cases: &lt;code>null&lt;/code>, &lt;code>undefined&lt;/code>, numbers, empty
      string&lt;/li> &lt;li>Multiple special characters in one string&lt;/li> &lt;li>Special characters at start, middle, and end of string&lt;/li>&lt;/ul> &lt;h3>&lt;code>pathEncode(str, maxInputLen)&lt;/code>&lt;/h3> &lt;ul>&lt;li>Roundtrip: &lt;code>pathDecode(pathEncode(str)) === str&lt;/code> for various
      inputs&lt;/li> &lt;li>URL-safety: output contains no &lt;code>+&lt;/code>, &lt;code>/&lt;/code>, or &lt;code>=&lt;/code> characters&lt;/li> &lt;li>Truncation: input longer than &lt;code>maxInputLen&lt;/code> gets truncated
      before encoding&lt;/li> &lt;li>Custom &lt;code>maxInputLen&lt;/code> parameter&lt;/li> &lt;li>Unicode strings (emoji, CJK, diacritics)&lt;/li> &lt;li>Empty string&lt;/li>&lt;/ul> &lt;h3>&lt;code>pathDecode(str)&lt;/code>&lt;/h3> &lt;ul>&lt;li>Decodes valid base64url strings&lt;/li> &lt;li>Fallback: returns original string on invalid input (does not throw)&lt;/li>&lt;/ul> &lt;h2>&lt;code>src/lib/url-utils.js&lt;/code>&lt;/h2> &lt;h3>&lt;code>pathToPublicURL(filePath, prefix)&lt;/code>&lt;/h3> &lt;ul>&lt;li>Strips &lt;code>+page.svelte&lt;/code> suffix&lt;/li> &lt;li>Strips route group prefixes like &lt;code>(demo)/&lt;/code>&lt;/li> &lt;li>Default prefix &lt;code>../&lt;/code> replaced with &lt;code>/&lt;/code>&lt;/li> &lt;li>Custom prefix parameter&lt;/li> &lt;li>Adds trailing slash&lt;/li> &lt;li>Nested routes: &lt;code>../blog/post-slug/+page.svelte&lt;/code> becomes &lt;code>/blog/post-slug/&lt;/code>&lt;/li>&lt;/ul> &lt;h2>&lt;code>src/lib/scroll-to.js&lt;/code>&lt;/h2> &lt;h3>Easing functions&lt;/h3> &lt;p>The easing functions are not exported directly, but can be tested by
    extracting them or by testing through the module's internal structure.&lt;/p> &lt;ul>&lt;li>&lt;code>easeInOutCubic&lt;/code>, &lt;code>easeOutSine&lt;/code>, &lt;code>easeInOutSine&lt;/code>, &lt;code>easeInOutQuint&lt;/code>&lt;/li> &lt;li>Boundary: &lt;code>f(0) = 0&lt;/code> and &lt;code>f(1) = 1&lt;/code> for all easing
      functions&lt;/li> &lt;li>Midpoint: &lt;code>f(0.5)&lt;/code> is reasonable (between 0 and 1)&lt;/li> &lt;li>Monotonicity: output increases as input increases from 0 to 1&lt;/li>&lt;/ul> &lt;aside>&lt;p>The easing equations object is not exported. Either export it for testing,
      or test indirectly. The &lt;code>scrollTo&lt;/code> and &lt;code>scrollToY&lt;/code> functions need DOM (&lt;code>window&lt;/code>,&lt;code>requestAnimationFrame&lt;/code> ) so they need jsdom/happy-dom environment.&lt;/p>&lt;/aside> &lt;h3>&lt;code>scrollTo(element, speed, easing)&lt;/code>&lt;/h3> &lt;ul>&lt;li>Returns early without throwing when &lt;code>element&lt;/code> is &lt;code>null&lt;/code>&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Utility tests&lt;/p> &lt;p itemprop="description">Pure functions, easy wins&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Update Meta Component</title>
        <link href="/todos/update-meta-component/"/>
        <id>/todos/update-meta-component/</id>
        <updated>2026-02-09T00:43:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/update-meta-component">Update Meta Component&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Update &lt;span>Meta Component&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-02-09" itemprop="dateModified">February 9&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>&lt;code>Meta.svelte&lt;/code> now self-resolves title, description, and SEO tags using a synchronous &lt;code>import.meta.glob&lt;/code> PageMeta lookup keyed by the current pathname via &lt;code>$app/state&lt;/code>.
    Props are still accepted as fallbacks for pages without &lt;code>PageMeta&lt;/code> exports (error page).&lt;/p> &lt;aside>&lt;p>The original plan used &lt;code>getPages()&lt;/code> remote function, but &lt;code>&amp;lt;svelte:head>&lt;/code> renders synchronously and cannot use &lt;code>await&lt;/code>. The synchronous glob achieves the same result.&lt;/p>&lt;/aside> &lt;h2>What Changed&lt;/h2> &lt;h3>Meta.svelte&lt;/h3> &lt;p>Builds a pages map via &lt;code>import.meta.glob&lt;/code> and resolves &lt;code>pages[page.url.pathname]&lt;/code>. Title and description come from &lt;code>PageMeta&lt;/code> with prop fallbacks. New tags added:&lt;/p> &lt;ul>&lt;li>&lt;code>&amp;lt;link rel="canonical">&lt;/code> from &lt;code>canonical&lt;/code>&lt;/li> &lt;li>&lt;code>&amp;lt;meta name="robots">&lt;/code> from &lt;code>noindex&lt;/code>&lt;/li> &lt;li>&lt;code>&amp;lt;meta property="og:locale">&lt;/code> from &lt;code>lang&lt;/code>&lt;/li> &lt;li>&lt;code>&amp;lt;meta name="keywords">&lt;/code> from &lt;code>tags&lt;/code>&lt;/li>&lt;/ul> &lt;h3>Publication / PublicationHead&lt;/h3> &lt;p>&lt;code>meta&lt;/code> prop removed from &lt;code>Publication&lt;/code> and &lt;code>PublicationHead&lt;/code>. &lt;code>&amp;lt;Meta />&lt;/code> is now called with
    no props.&lt;/p> &lt;h3>Page meta exports&lt;/h3> &lt;p>Added &lt;code>description&lt;/code> field to every page's &lt;code>PageMeta&lt;/code> export, migrated from the former &lt;code>Publication&lt;/code> meta prop.&lt;/p> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Zero-prop Meta&lt;/p> &lt;p itemprop="description">Self-resolving page metadata&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Use Img component for author avatars</title>
        <link href="/todos/use-img-component-for-author-avatars/"/>
        <id>/todos/use-img-component-for-author-avatars/</id>
        <updated>2026-02-09T00:44:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/use-img-component-for-author-avatars">Use Img Component For Author Avatars&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Use Img component &lt;span>for author avatars&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Author avatars are stored in &lt;code>static/images/authors/&lt;/code> and the &lt;code>avatar&lt;/code> field is defined in &lt;code>src/lib/authors.js&lt;/code>, but &lt;code>PublicationAuthors.svelte&lt;/code> doesn't render them yet. Use the common &lt;code>Img&lt;/code> component so
    avatars go through the same image pipeline as everything else (srcset,
    LQIP).&lt;/p> &lt;h2>Current State&lt;/h2> &lt;ul>&lt;li>&lt;code>Author&lt;/code> interface in &lt;code>src/app.d.ts&lt;/code> has an optional &lt;code>avatar&lt;/code> field&lt;/li> &lt;li>&lt;code>src/lib/authors.js&lt;/code> has avatar paths set (e.g. &lt;code>/images/authors/ramil.avif&lt;/code>)&lt;/li> &lt;li>&lt;code>PublicationAuthors.svelte&lt;/code> only renders author names, no images&lt;/li>&lt;/ul> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Update &lt;code>PublicationAuthors.svelte&lt;/code> to render avatar via &lt;code>Img&lt;/code> component&lt;/li> &lt;li>Look up full author data from &lt;code>authors&lt;/code> map using the tag&lt;/li> &lt;li>Handle missing avatars gracefully (initials fallback or hide image)&lt;/li> &lt;li>Migrate from &lt;code>export let&lt;/code> to &lt;code>$props()&lt;/code> while at it
      (Svelte 5)&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Author avatars&lt;/p> &lt;p itemprop="description">Consistent image handling&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Use remote function to ReadNext</title>
        <link href="/todos/use-remote-function-to-read-next/"/>
        <id>/todos/use-remote-function-to-read-next/</id>
        <updated>2026-02-09T00:45:00.000Z</updated>
        <published>2026-02-09T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/use-remote-function-to-read-next">Use Remote Function To Read Next&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Use remote function &lt;span>to ReadNext&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-09" itemprop="datePublished">February 9&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>The &lt;code>ReadNext&lt;/code> component should suggest related articles based on
    shared tags, excluding the current article.&lt;/p> &lt;h2>Current State&lt;/h2> &lt;p>Currently reads from &lt;code>page.data.readNextPosts&lt;/code> which is not
    populated. The component needs to self-resolve suggestions from the feed.&lt;/p> &lt;h2>Requirements&lt;/h2> &lt;ul>&lt;li>Load articles from the feed that share at least one tag with the current
      article&lt;/li> &lt;li>Exclude the current article from results&lt;/li> &lt;li>Sort by number of shared tags (most relevant first)&lt;/li> &lt;li>Limit to 3-4 suggestions&lt;/li> &lt;li>Fall back to recent articles if no tag matches found&lt;/li>&lt;/ul> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Resolve current page tags from PageMeta (via &lt;code>buildPagesMap&lt;/code> or
      feed data)&lt;/li> &lt;li>Filter feed items by shared tags, excluding current URL&lt;/li> &lt;li>Rank by tag overlap count&lt;/li> &lt;li>Pass filtered posts to the ReadNext template&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Remote ReadNext&lt;/p> &lt;p itemprop="description">Fetch next articles remotely&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Features</title>
        <link href="/features/"/>
        <id>/features/</id>
        <updated>2026-02-08T00:46:00.000Z</updated>
        <published>2026-02-08T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;div>&lt;h1>Features&lt;/h1> &lt;div>&lt;!--[-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!---->&lt;/div>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Component Library</title>
        <link href="/features/component-library/"/>
        <id>/features/component-library/</id>
        <updated>2026-02-08T00:47:00.000Z</updated>
        <published>2026-02-08T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/features">Features&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/features/component-library">Component Library&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Component &lt;span>Library&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-08" itemprop="datePublished">February 8&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;h2>Overview&lt;/h2> &lt;p>Sveleton provides a collection of reusable UI components optimized for
    content-rich media projects. All components are exported from &lt;code>$lib&lt;/code> for easy importing throughout your application.&lt;/p> &lt;h2>Key Components&lt;/h2> &lt;p>The component library includes the following building blocks:&lt;/p> &lt;p>&lt;strong>Articles&lt;/strong> - Grid layout component for displaying collections of articles or posts.&lt;/p> &lt;p>&lt;strong>PostPreview&lt;/strong> - Card component for article previews with metadata and thumbnails.&lt;/p> &lt;p>&lt;strong>Accordion&lt;/strong> - Collapsible content sections for FAQ-style layouts.&lt;/p> &lt;p>&lt;strong>Img&lt;/strong> - Responsive image component powered by &lt;code>@zerodevx/svelte-img&lt;/code> with automatic srcset generation and LQIP placeholders.&lt;/p> &lt;p>&lt;strong>LinkBlock&lt;/strong> - Clickable card component for featured links and CTAs.&lt;/p> &lt;p>&lt;strong>SharePostLink&lt;/strong> - Social sharing buttons for content distribution.&lt;/p> &lt;p>&lt;strong>CallToAction&lt;/strong> - Prominent CTA sections for conversion optimization.&lt;/p> &lt;p>&lt;strong>AnchorHeading&lt;/strong> - Headings with automatic anchor links for deep linking.&lt;/p> &lt;aside>&lt;p>All components follow the Intuition Design System and are optimized for
      static site generation with SvelteKit.&lt;/p>&lt;/aside> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Sveleton&lt;/p> &lt;p itemprop="description">Bootstrap your next media project&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>JSON and XML Feeds</title>
        <link href="/features/feeds/"/>
        <id>/features/feeds/</id>
        <updated>2026-02-08T00:48:00.000Z</updated>
        <published>2026-02-08T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/features">Features&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/features/feeds">Feeds&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->JSON and &lt;span>XML Feeds&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-08" itemprop="datePublished">February 8&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Sveleton automatically generates content feeds for RSS readers and
    aggregators. Both modern JSON Feed and traditional Atom XML formats are
    supported, ensuring your content reaches the widest possible audience.&lt;/p> &lt;h2>JSON Feed&lt;/h2> &lt;p>The &lt;code>/feed.json&lt;/code> endpoint serves a JSON Feed 1.1 compliant feed.
    This modern format is easier to parse and more developer-friendly than XML.
    The feed includes all your published articles with titles, descriptions,
    dates, authors, and cover images.&lt;/p> &lt;p>Content extraction happens server-side using Cheerio to parse each article's
    HTML and generate clean feed items. This ensures feed readers get properly
    formatted content without any layout artifacts.&lt;/p> &lt;h2>XML Feed&lt;/h2> &lt;p>The &lt;code>/feed.xml&lt;/code> endpoint provides an Atom-format XML feed for
    traditional RSS readers. Like the JSON feed, it includes full article
    metadata and content, ensuring compatibility with all major feed readers and
    aggregation services.&lt;/p> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Sveleton&lt;/p> &lt;p itemprop="description">Bootstrap your next media project&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Image Optimization</title>
        <link href="/features/image-optimization/"/>
        <id>/features/image-optimization/</id>
        <updated>2026-02-08T00:49:00.000Z</updated>
        <published>2026-02-08T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/features">Features&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/features/image-optimization">Image Optimization&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Image &lt;span>Optimization&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-08" itemprop="datePublished">February 8&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/cover.DT5_Pqg3.avif 197w, /_app/immutable/assets/cover.6wOSTk_Q.avif 263w, /_app/immutable/assets/cover.Ne5wwxTB.avif 349w, /_app/immutable/assets/cover.BIe3fckn.avif 360w, /_app/immutable/assets/cover.D_pvR5s4.avif 385w, /_app/immutable/assets/cover.BT5VTWJV.avif 414w, /_app/immutable/assets/cover.Dv8n2GyW.avif 768w, /_app/immutable/assets/cover.iORoWzZB.avif 1200w"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/cover.iORoWzZB.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!----> &lt;p>Sveleton automatically optimizes images at build time using &lt;code>vite-imagetools&lt;/code>. Every image is transformed into multiple sizes
    and formats, ensuring fast loading times across all devices and network
    conditions.&lt;/p> &lt;h2>How It Works&lt;/h2> &lt;p>Images are processed during the Vite build step, generating responsive
    variants from 197px to 1920px wide in AVIF format. The system automatically
    creates a &lt;code>srcset&lt;/code> attribute with all variants, letting browsers
    choose the optimal size for each viewport.&lt;/p> &lt;p>LQIP (Low Quality Image Placeholder) support provides instant visual
    feedback. A tiny, blurred version of the image appears immediately while the
    full image loads in the background, improving perceived performance.&lt;/p> &lt;h2>Usage&lt;/h2> &lt;p>Import images directly — no query parameters needed. Responsive variants and
    LQIP placeholders are applied automatically via &lt;code>defaultDirectives&lt;/code> in &lt;code>vite.config.js&lt;/code>.&lt;/p> &lt;aside>&lt;p>The &lt;code>&amp;lt;Img>&lt;/code> component handles all the complexity: it shows
      the LQIP, loads the appropriate size for the viewport, and provides smooth
      transitions between placeholder and full image.&lt;/p>&lt;/aside> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Sveleton&lt;/p> &lt;p itemprop="description">Bootstrap your next media project&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Navigation System</title>
        <link href="/features/navigation/"/>
        <id>/features/navigation/</id>
        <updated>2026-02-08T00:50:00.000Z</updated>
        <published>2026-02-08T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/features">Features&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/features/navigation">Navigation&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Navigation &lt;span>System&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-08" itemprop="datePublished">February 8&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;h2>Table of Contents&lt;/h2> &lt;p>The &lt;code>Nav&lt;/code> component provides an automatic sidebar table of
    contents that generates navigation links from &lt;code>NavAnchor&lt;/code> elements placed throughout your content. Simply add &lt;code>NavAnchor&lt;/code> components before each section heading to create jump links.&lt;/p> &lt;p>The navigation updates automatically as users scroll, highlighting the
    current section and providing smooth anchor-based scrolling between content
    sections.&lt;/p> &lt;h2>Breadcrumbs&lt;/h2> &lt;p>The &lt;code>Breadcrumbs&lt;/code> component generates hierarchical navigation
    automatically based on your route structure. It helps users understand their
    current location within the site and provides quick access to parent pages.&lt;/p> &lt;p>For site-wide navigation, the &lt;code>sitemap&lt;/code> page provides a complete
    overview of all available content organized by category and type.&lt;/p> &lt;aside>&lt;p>Both components require no manual configuration - they work automatically
      based on your page structure and routing.&lt;/p>&lt;/aside> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Sveleton&lt;/p> &lt;p itemprop="description">Bootstrap your next media project&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Publication System</title>
        <link href="/features/publication-system/"/>
        <id>/features/publication-system/</id>
        <updated>2026-02-08T00:51:00.000Z</updated>
        <published>2026-02-08T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/features">Features&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/features/publication-system">Publication System&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Publication &lt;span>System&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-08" itemprop="datePublished">February 8&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>The &lt;code>Publication&lt;/code> component is the foundation of Sveleton's
    article publishing system. It wraps your content and automatically adds all
    the metadata, navigation, and layout elements needed for a professional
    publication.&lt;/p> &lt;h2>Overview&lt;/h2> &lt;p>Every article wrapped in the &lt;code>Publication&lt;/code> component gets
    automatic breadcrumb navigation, author bylines, publication and update
    dates, and estimated reading time. The component also handles the article's
    table of contents navigation, allowing readers to jump between sections
    using &lt;code>NavAnchor&lt;/code> components.&lt;/p> &lt;p>At the end of each article, the &lt;code>ReadNext&lt;/code> carousel automatically
    suggests related content based on tags and categories. This keeps readers
    engaged and helps them discover more of your content.&lt;/p> &lt;h2>Components&lt;/h2> &lt;p>The system includes several supporting components: &lt;code>PublicationAuthors&lt;/code> for displaying author information with avatars and links, &lt;code>Breadcrumbs&lt;/code> for site navigation, &lt;code>Nav&lt;/code> for the in-page table of contents, and &lt;code>CallToAction&lt;/code> for adding engagement prompts at the end of articles.&lt;/p> &lt;aside>&lt;p>All publication metadata is defined in the page's module script using the &lt;code>meta&lt;/code> export, ensuring type safety and consistency across your entire site.&lt;/p>&lt;/aside> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Sveleton&lt;/p> &lt;p itemprop="description">Bootstrap your next media project&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>SEO and Meta Tags</title>
        <link href="/features/seo-and-meta-tags/"/>
        <id>/features/seo-and-meta-tags/</id>
        <updated>2026-02-08T00:52:00.000Z</updated>
        <published>2026-02-08T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/features">Features&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/features/seo-and-meta-tags">Seo And Meta Tags&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->SEO and &lt;span>Meta Tags&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-08" itemprop="datePublished">February 8&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Sveleton includes a comprehensive &lt;code>Meta&lt;/code> component that handles
    all your SEO needs out of the box. Every page gets proper meta tags for
    search engines and social media platforms without any additional
    configuration.&lt;/p> &lt;h2>What Is Included&lt;/h2> &lt;p>The &lt;code>Meta&lt;/code> component automatically generates OpenGraph tags for
    Facebook and LinkedIn, Twitter Card markup for enhanced tweet previews, and
    Schema.org Article structured data for rich search results. All pages
    include canonical URLs to prevent duplicate content issues.&lt;/p> &lt;p>Each publication page can specify its own title, description, and cover
    image through the &lt;code>meta&lt;/code> prop. These values are used consistently
    across all meta tag formats to ensure your content appears correctly when
    shared on any platform.&lt;/p> &lt;h2>Usage&lt;/h2> &lt;p>Simply wrap your content in the &lt;code>Publication&lt;/code> component and pass
    the meta object with your page's title, description, and optional cover
    image. The component handles everything else automatically, including
    generating the proper meta tags, setting up breadcrumbs, and injecting
    Schema.org markup into the page head.&lt;/p> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Sveleton&lt;/p> &lt;p itemprop="description">Bootstrap your next media project&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Static Site Generation</title>
        <link href="/features/static-site-generation/"/>
        <id>/features/static-site-generation/</id>
        <updated>2026-02-08T00:53:00.000Z</updated>
        <published>2026-02-08T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/features">Features&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/features/static-site-generation">Static Site Generation&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Static Site &lt;span>Generation&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-08" itemprop="datePublished">February 8&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Sveleton uses SvelteKit's &lt;code>adapter-static&lt;/code> to generate fully
    pre-rendered HTML pages at build time. Every route is converted to static
    HTML and output to the &lt;code>build/&lt;/code> directory, making the site
    incredibly fast and suitable for hosting on any static file server.&lt;/p> &lt;h2>How It Works&lt;/h2> &lt;p>During the build process, SvelteKit crawls all routes starting from the root
    and generates static HTML files. The adapter outputs a &lt;code>200.html&lt;/code> fallback file for client-side routing, ensuring smooth navigation between
    pages without full page reloads.&lt;/p> &lt;p>All pages are pre-rendered by default using SvelteKit's &lt;code>prerender = true&lt;/code> configuration. This means content is generated once at build time, not on
    each request, resulting in optimal performance and SEO.&lt;/p> &lt;h2>Benefits&lt;/h2> &lt;p>Static site generation offers significant advantages for media projects:
    blazing-fast page loads, perfect SEO crawlability, and simple deployment to
    any CDN or static host. No server required.&lt;/p> &lt;aside>&lt;p>The entire site can be deployed to GitHub Pages, Netlify, Vercel, or any
      static hosting provider. Just point them at the &lt;code>build/&lt;/code> directory.&lt;/p>&lt;/aside> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Sveleton&lt;/p> &lt;p itemprop="description">Bootstrap your next media project&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Migrate to Lightning CSS</title>
        <link href="/todos/migrate-to-lightning-css/"/>
        <id>/todos/migrate-to-lightning-css/</id>
        <updated>2026-02-08T00:54:00.000Z</updated>
        <published>2026-02-08T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/migrate-to-lightning-css">Migrate To Lightning Css&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Migrate to &lt;span>Lightning CSS&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-08" itemprop="datePublished">February 8&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Replace the current PostCSS pipeline with Lightning CSS. Lightning CSS is a
    fast CSS parser, transformer, and minifier written in Rust, with built-in
    support for nesting, custom media queries, and modern CSS features without
    needing separate plugins.&lt;/p> &lt;h2>Motivation&lt;/h2> &lt;ul>&lt;li>Significantly faster CSS processing (Rust-based)&lt;/li> &lt;li>Native support for CSS nesting, no plugin needed&lt;/li> &lt;li>Built-in vendor prefixing and browser target support&lt;/li> &lt;li>Vite has built-in Lightning CSS integration&lt;/li> &lt;li>Reduce dependency count by removing PostCSS plugins&lt;/li>&lt;/ul> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Enable &lt;code>css.lightningcss&lt;/code> in &lt;code>vite.config.js&lt;/code>&lt;/li> &lt;li>Replace &lt;code>postcss-nested-props&lt;/code> usage with standard CSS nesting&lt;/li> &lt;li>Replace &lt;code>postcss-simple-vars&lt;/code> with CSS custom properties&lt;/li> &lt;li>Replace &lt;code>postcss-easy-import&lt;/code> with native CSS imports&lt;/li> &lt;li>Remove &lt;code>postcss-preset-env&lt;/code> (Lightning CSS handles transforms)&lt;/li> &lt;li>Remove &lt;code>postcss.config.cjs&lt;/code>&lt;/li> &lt;li>Update &lt;code>svelte-preprocess&lt;/code> config if needed&lt;/li> &lt;li>Test all component styles for regressions&lt;/li>&lt;/ul> &lt;h2>Risks&lt;/h2> &lt;ul>&lt;li>&lt;code>postcss-nested-props&lt;/code> shorthand has no direct equivalent in Lightning CSS — need to expand
      manually&lt;/li> &lt;li>&lt;code>postcss-simple-vars&lt;/code> (&lt;code>$var&lt;/code> syntax) needs migrating to &lt;code>var(--var)&lt;/code>&lt;/li> &lt;li>Some edge cases in nesting behavior may differ between PostCSS and
      Lightning CSS&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Build performance&lt;/p> &lt;p itemprop="description">Faster CSS processing&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Migrate Lighthouse and Links Check</title>
        <link href="/todos/migrate-lighthouse-and-links-check/"/>
        <id>/todos/migrate-lighthouse-and-links-check/</id>
        <updated>2026-02-06T00:55:00.000Z</updated>
        <published>2026-02-06T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/migrate-lighthouse-and-links-check">Migrate Lighthouse And Links Check&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Migrate &lt;span>Lighthouse and Links Check&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-06" itemprop="datePublished">February 6&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Migrate Lighthouse CI audits and broken links checking into this repository.&lt;/p> &lt;h2>Context&lt;/h2> &lt;p>SvelteKit's prerender crawler only validates &lt;strong>internal&lt;/strong> links. External URLs (&lt;code>https://...&lt;/code>) are silently discarded by &lt;code>is_root_relative()&lt;/code> in the prerender loop — no handler, callback, or plugin hook ever sees them.
    There is no built-in or planned feature for external link validation.&lt;/p> &lt;h2>Approach&lt;/h2> &lt;p>Use &lt;a href="https://github.com/lycheeverse/lychee">lychee&lt;/a> (same as
    timestripe) as a post-build link checker against the &lt;code>build/&lt;/code> output. Lychee is a fast Rust-based tool that checks both internal and
    external links in HTML files.&lt;/p> &lt;ul>&lt;li>Install via &lt;code>brew install lychee&lt;/code> (local) and GitHub Action
      (CI)&lt;/li> &lt;li>Run against &lt;code>./build/&lt;/code> after &lt;code>pnpm build&lt;/code>&lt;/li> &lt;li>Add a &lt;code>check:links&lt;/code> script (not &lt;code>postbuild&lt;/code> — avoid
      slowing local dev)&lt;/li> &lt;li>Configure &lt;code>.lychee.toml&lt;/code> for excludes, timeouts, accepted
      status codes&lt;/li>&lt;/ul> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Migrate Lighthouse CI configuration and scripts&lt;/li> &lt;li>Add &lt;code>lychee&lt;/code> as the broken links checker (replaces previous
      solution)&lt;/li> &lt;li>Add &lt;code>.lychee.toml&lt;/code> config with sensible defaults&lt;/li> &lt;li>Add &lt;code>check:links&lt;/code> script to &lt;code>package.json&lt;/code>&lt;/li> &lt;li>Integrate both into the CI/CD pipeline (GitHub Actions)&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Quality checks in-repo&lt;/p> &lt;p itemprop="description">Lighthouse and links check migration&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Rename Project to Sveleton</title>
        <link href="/todos/rename-project-to-sveleton/"/>
        <id>/todos/rename-project-to-sveleton/</id>
        <updated>2026-02-02T00:56:00.000Z</updated>
        <published>2026-02-02T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/rename-project-to-sveleton">Rename Project To Sveleton&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Rename Project &lt;span>to Sveleton&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-02-02" itemprop="datePublished">February 2&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Rename the project from Sveleton to Sveleton for a cleaner, shorter name.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Update package.json name&lt;/li> &lt;li>Update PROJECT_NAME in src/lib/index.js&lt;/li> &lt;li>Update README.md&lt;/li> &lt;li>Update CLAUDE.md&lt;/li> &lt;li>Rename repository (if applicable)&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Project&lt;/p> &lt;p itemprop="description">Simplify the name&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Add demos page</title>
        <link href="/todos/add-demos-page/"/>
        <id>/todos/add-demos-page/</id>
        <updated>2026-01-27T00:57:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/add-demos-page">Add Demos Page&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Add &lt;span>demos page&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a dedicated page to showcase interactive demos and Fun components
    like games, timers, and animations.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Create &lt;code>/demos/&lt;/code> route&lt;/li> &lt;li>Add navigation link to demos page&lt;/li> &lt;li>Showcase Fun components (Clock, Timer, Snake, Pinball, etc.)&lt;/li> &lt;li>Add interactive examples with descriptions&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Interactive demos&lt;/p> &lt;p itemprop="description">Showcase Fun components&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: Accordion</title>
        <link href="/todos/demo-accordion/"/>
        <id>/todos/demo-accordion/</id>
        <updated>2026-01-27T00:58:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-accordion">Demo Accordion&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>Accordion&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>Accordion&lt;/code> component with
    interactive examples.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Add usage examples for &lt;code>Accordion&lt;/code>&lt;/li> &lt;li>Document available props&lt;/li> &lt;li>Show different configurations and states&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Component demo&lt;/p> &lt;p itemprop="description">Accordion showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: AnchorHeading</title>
        <link href="/todos/demo-anchor-heading/"/>
        <id>/todos/demo-anchor-heading/</id>
        <updated>2026-01-27T00:59:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-anchor-heading">Demo Anchor Heading&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>AnchorHeading&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>AnchorHeading&lt;/code> component with
    interactive examples.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Add usage examples for &lt;code>AnchorHeading&lt;/code>&lt;/li> &lt;li>Document available props&lt;/li> &lt;li>Show different configurations and states&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Component demo&lt;/p> &lt;p itemprop="description">AnchorHeading showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: Articles</title>
        <link href="/todos/demo-articles/"/>
        <id>/todos/demo-articles/</id>
        <updated>2026-01-27T01:00:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-articles">Demo Articles&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>Articles&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>Articles&lt;/code> component with
    interactive examples.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Add usage examples for &lt;code>Articles&lt;/code>&lt;/li> &lt;li>Document available props&lt;/li> &lt;li>Show different configurations and states&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Component demo&lt;/p> &lt;p itemprop="description">Articles showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: Authors</title>
        <link href="/todos/demo-authors/"/>
        <id>/todos/demo-authors/</id>
        <updated>2026-01-27T01:01:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-authors">Demo Authors&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>Authors&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>Authors&lt;/code> component with
    interactive examples.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Add usage examples for &lt;code>Authors&lt;/code>&lt;/li> &lt;li>Document available props&lt;/li> &lt;li>Show different configurations and states&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Component demo&lt;/p> &lt;p itemprop="description">Authors showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: CallToAction</title>
        <link href="/todos/demo-call-to-action/"/>
        <id>/todos/demo-call-to-action/</id>
        <updated>2026-01-27T01:02:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-call-to-action">Demo Call To Action&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>CallToAction&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>CallToAction&lt;/code> component with
    interactive examples.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Add usage examples for &lt;code>CallToAction&lt;/code>&lt;/li> &lt;li>Document available props&lt;/li> &lt;li>Show different configurations and states&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Component demo&lt;/p> &lt;p itemprop="description">CallToAction showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: CallToAction-black</title>
        <link href="/todos/demo-call-to-action-black/"/>
        <id>/todos/demo-call-to-action-black/</id>
        <updated>2026-01-27T01:03:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-call-to-action-black">Demo Call To Action Black&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>CallToAction-black&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>CallToAction-black&lt;/code> component
    with interactive examples.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Add usage examples for &lt;code>CallToAction-black&lt;/code>&lt;/li> &lt;li>Document available props&lt;/li> &lt;li>Show different configurations and states&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Component demo&lt;/p> &lt;p itemprop="description">CallToAction-black showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: Feed JSON</title>
        <link href="/todos/demo-feed-json/"/>
        <id>/todos/demo-feed-json/</id>
        <updated>2026-01-27T01:04:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-feed-json">Demo Feed Json&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>Feed JSON&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>/feed.json&lt;/code> route.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Document the purpose of &lt;code>/feed.json&lt;/code>&lt;/li> &lt;li>Show example output&lt;/li> &lt;li>Document configuration options&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Route demo&lt;/p> &lt;p itemprop="description">Feed JSON showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: Feed XML</title>
        <link href="/todos/demo-feed-xml/"/>
        <id>/todos/demo-feed-xml/</id>
        <updated>2026-01-27T01:05:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-feed-xml">Demo Feed Xml&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>Feed XML&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>/feed.xml&lt;/code> route.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Document the purpose of &lt;code>/feed.xml&lt;/code>&lt;/li> &lt;li>Show example output&lt;/li> &lt;li>Document configuration options&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Route demo&lt;/p> &lt;p itemprop="description">Feed XML showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: Img</title>
        <link href="/todos/demo-img/"/>
        <id>/todos/demo-img/</id>
        <updated>2026-01-27T01:06:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-img">Demo Img&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>Img&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>Img&lt;/code> component with
    interactive examples.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Add usage examples for &lt;code>Img&lt;/code>&lt;/li> &lt;li>Document available props&lt;/li> &lt;li>Show different configurations and states&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Component demo&lt;/p> &lt;p itemprop="description">Img showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: LinkBlock</title>
        <link href="/todos/demo-link-block/"/>
        <id>/todos/demo-link-block/</id>
        <updated>2026-01-27T01:07:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-link-block">Demo Link Block&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>LinkBlock&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>LinkBlock&lt;/code> component with
    interactive examples.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Add usage examples for &lt;code>LinkBlock&lt;/code>&lt;/li> &lt;li>Document available props&lt;/li> &lt;li>Show different configurations and states&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Component demo&lt;/p> &lt;p itemprop="description">LinkBlock showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: Meta</title>
        <link href="/todos/demo-meta/"/>
        <id>/todos/demo-meta/</id>
        <updated>2026-01-27T01:08:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-meta">Demo Meta&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>Meta&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>Meta&lt;/code> component with
    interactive examples.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Add usage examples for &lt;code>Meta&lt;/code>&lt;/li> &lt;li>Document available props&lt;/li> &lt;li>Show different configurations and states&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Component demo&lt;/p> &lt;p itemprop="description">Meta showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: PostPreview</title>
        <link href="/todos/demo-post-preview/"/>
        <id>/todos/demo-post-preview/</id>
        <updated>2026-01-27T01:09:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-post-preview">Demo Post Preview&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>PostPreview&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>PostPreview&lt;/code> component with
    interactive examples.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Add usage examples for &lt;code>PostPreview&lt;/code>&lt;/li> &lt;li>Document available props&lt;/li> &lt;li>Show different configurations and states&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Component demo&lt;/p> &lt;p itemprop="description">PostPreview showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: PublicationAuthors</title>
        <link href="/todos/demo-publication-authors/"/>
        <id>/todos/demo-publication-authors/</id>
        <updated>2026-01-27T01:10:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-publication-authors">Demo Publication Authors&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>PublicationAuthors&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-05-14" itemprop="dateModified">May 14&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>PublicationAuthors&lt;/code> component
    with interactive examples.&lt;/p> &lt;aside>&lt;p>Canceled: PublicationAuthors was merged into Authors with a variant prop
      (byline, compact, credits). See &lt;a href="/todos/demo-authors/">Demo: Authors&lt;/a>.&lt;/p>&lt;/aside> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Add usage examples for &lt;code>PublicationAuthors&lt;/code>&lt;/li> &lt;li>Document available props&lt;/li> &lt;li>Show different configurations and states&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Component demo&lt;/p> &lt;p itemprop="description">PublicationAuthors showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: PublicationDate</title>
        <link href="/todos/demo-publication-date/"/>
        <id>/todos/demo-publication-date/</id>
        <updated>2026-01-27T01:11:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-publication-date">Demo Publication Date&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>PublicationDate&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>PublicationDate&lt;/code> component
    with interactive examples.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Add usage examples for &lt;code>PublicationDate&lt;/code>&lt;/li> &lt;li>Document available props&lt;/li> &lt;li>Show different configurations and states&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Component demo&lt;/p> &lt;p itemprop="description">PublicationDate showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: ReadNext</title>
        <link href="/todos/demo-read-next/"/>
        <id>/todos/demo-read-next/</id>
        <updated>2026-01-27T01:12:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-read-next">Demo Read Next&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>ReadNext&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>ReadNext&lt;/code> component, which
    suggests related articles based on shared tags.&lt;/p> &lt;h2>Current State&lt;/h2> &lt;p>The ReadNext implementation is complete (see &lt;a href="/todos/use-remote-function-to-read-next/">Use remote function to ReadNext&lt;/a>). It reads from &lt;code>page.data.readNextPosts&lt;/code> populated by &lt;code>getReadNext()&lt;/code> in &lt;code>+layout.server.js&lt;/code>, and delegates rendering to &lt;code>Articles&lt;/code> in compact mode.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Create a demo page with usage examples&lt;/li> &lt;li>Show how tag-based matching and fallback behavior works&lt;/li> &lt;li>Document the &lt;code>getReadNext()&lt;/code> remote function API&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Component demo&lt;/p> &lt;p itemprop="description">ReadNext showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: ReadingTime</title>
        <link href="/todos/demo-reading-time/"/>
        <id>/todos/demo-reading-time/</id>
        <updated>2026-01-27T01:13:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-reading-time">Demo Reading Time&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>ReadingTime&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>ReadingTime&lt;/code> component with
    interactive examples.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Add usage examples for &lt;code>ReadingTime&lt;/code>&lt;/li> &lt;li>Document available props&lt;/li> &lt;li>Show different configurations and states&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Component demo&lt;/p> &lt;p itemprop="description">ReadingTime showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: SharePostLink</title>
        <link href="/todos/demo-share-post-link/"/>
        <id>/todos/demo-share-post-link/</id>
        <updated>2026-01-27T01:14:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-share-post-link">Demo Share Post Link&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>SharePostLink&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>SharePostLink&lt;/code> component with
    interactive examples.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Add usage examples for &lt;code>SharePostLink&lt;/code>&lt;/li> &lt;li>Document available props&lt;/li> &lt;li>Show different configurations and states&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Component demo&lt;/p> &lt;p itemprop="description">SharePostLink showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: Sitemap</title>
        <link href="/todos/demo-sitemap/"/>
        <id>/todos/demo-sitemap/</id>
        <updated>2026-01-27T01:15:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-sitemap">Demo Sitemap&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>Sitemap&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>/sitemap/&lt;/code> route.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Document the purpose of &lt;code>/sitemap/&lt;/code>&lt;/li> &lt;li>Show example output&lt;/li> &lt;li>Document configuration options&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Route demo&lt;/p> &lt;p itemprop="description">Sitemap showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: Sitemap Appendix</title>
        <link href="/todos/demo-sitemap-appendix/"/>
        <id>/todos/demo-sitemap-appendix/</id>
        <updated>2026-01-27T01:16:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-sitemap-appendix">Demo Sitemap Appendix&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>Sitemap Appendix&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>/sitemap-appendix.xml&lt;/code> route.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Document the purpose of &lt;code>/sitemap-appendix.xml&lt;/code>&lt;/li> &lt;li>Show example output&lt;/li> &lt;li>Document configuration options&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Route demo&lt;/p> &lt;p itemprop="description">Sitemap Appendix showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Demo: TodoCover</title>
        <link href="/todos/demo-todo-cover/"/>
        <id>/todos/demo-todo-cover/</id>
        <updated>2026-01-27T01:17:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/demo-todo-cover">Demo Todo Cover&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Demo: &lt;span>TodoCover&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a demo page showcasing the &lt;code>TodoCover&lt;/code> component with
    interactive examples.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Add usage examples for &lt;code>TodoCover&lt;/code>&lt;/li> &lt;li>Document available props&lt;/li> &lt;li>Show different configurations and states&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Component demo&lt;/p> &lt;p itemprop="description">TodoCover showcase&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Fix time to read</title>
        <link href="/todos/fix-time-to-read/"/>
        <id>/todos/fix-time-to-read/</id>
        <updated>2026-01-27T01:18:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/fix-time-to-read">Fix Time To Read&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Fix &lt;span>time to read&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-02-09" itemprop="dateModified">February 9&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Fix the reading time estimation feature to accurately calculate and display
    reading time for articles.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Investigate current ReadingTime component&lt;/li> &lt;li>Fix word count calculation&lt;/li> &lt;li>Ensure proper display in article pages&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Reading time&lt;/p> &lt;p itemprop="description">Accurate estimates&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Sync editor settings</title>
        <link href="/todos/sync-editor-settings/"/>
        <id>/todos/sync-editor-settings/</id>
        <updated>2026-01-27T01:19:00.000Z</updated>
        <published>2026-01-27T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/sync-editor-settings">Sync Editor Settings&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Sync &lt;span>editor settings&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-27" itemprop="datePublished">January 27&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Ensure Biome, Zed, and VS Code all use consistent formatting and linting
    settings.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Configure Zed to use Biome for formatting&lt;/li> &lt;li>Configure VS Code to use Biome extension&lt;/li> &lt;li>Add &lt;code>.vscode/settings.json&lt;/code> with Biome as default formatter&lt;/li> &lt;li>Add &lt;code>.zed/settings.json&lt;/code> with Biome configuration&lt;/li> &lt;li>Ensure indent style (tabs) and width (4) match across all tools&lt;/li> &lt;li>Test formatting consistency across editors&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Consistent tooling&lt;/p> &lt;p itemprop="description">Same settings everywhere&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Todos for Daler</title>
        <link href="/daler/"/>
        <id>/daler/</id>
        <updated>2026-01-26T01:20:00.000Z</updated>
        <published>2026-01-26T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;div>&lt;h1>Todos for Daler&lt;/h1> &lt;div>&lt;!--[-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!---->&lt;/div>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Add optional snippet for article preview</title>
        <link href="/todos/add-optional-snippet-for-article-preview/"/>
        <id>/todos/add-optional-snippet-for-article-preview/</id>
        <updated>2026-01-26T01:21:00.000Z</updated>
        <published>2026-01-26T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/add-optional-snippet-for-article-preview">Add Optional Snippet For Article Preview&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Add optional &lt;span>snippet&lt;/span> for article preview&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-26" itemprop="datePublished">January 26&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-02-09" itemprop="dateModified">February 9&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Currently the &lt;code>PostPreview&lt;/code> component only displays the article
    title, cover image, and authors. Adding an optional Svelte snippet would
    allow rich preview content for articles.&lt;/p> &lt;h2>Problem&lt;/h2> &lt;p>Svelte snippets cannot be passed through JSON. The current architecture:&lt;/p> &lt;ol>&lt;li>Pages export metadata in &lt;code>&amp;lt;script module>&lt;/code>&lt;/li> &lt;li>&lt;code>page-renderer.svelte.js&lt;/code> extracts exports into JSON feed&lt;/li> &lt;li>&lt;code>Articles.svelte&lt;/code> reads from &lt;code>page.data.feed&lt;/code> (JSON)&lt;/li> &lt;li>&lt;code>PostPreview.svelte&lt;/code> renders from JSON data&lt;/li>&lt;/ol> &lt;p>Svelte snippets are runtime constructs that cannot be serialized to JSON.&lt;/p> &lt;h2>Solution&lt;/h2> &lt;p>Import all page modules directly in the layout and map them to feed items,
    bypassing JSON serialization for snippet data.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Import all page modules in layout using &lt;code>import.meta.glob&lt;/code>&lt;/li> &lt;li>Create a map from feed item URLs to page modules&lt;/li> &lt;li>Extract snippet from page module and pass to &lt;code>PostPreview&lt;/code>&lt;/li> &lt;li>Update &lt;code>PostPreview.svelte&lt;/code> to accept and render optional
      snippet prop&lt;/li>&lt;/ul> &lt;h2>Considerations&lt;/h2> &lt;ul>&lt;li>Performance impact of importing all page modules in layout&lt;/li> &lt;li>May want different snippet visibility for compact vs fancy layouts&lt;/li> &lt;li>Snippet should be optional - fall back to title-only preview&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Better previews&lt;/p> &lt;p itemprop="description">Rich article snippets&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Create new homepage</title>
        <link href="/todos/create-new-homepage/"/>
        <id>/todos/create-new-homepage/</id>
        <updated>2026-01-26T01:22:00.000Z</updated>
        <published>2026-01-26T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/create-new-homepage">Create New Homepage&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Create &lt;span>new homepage&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-26" itemprop="datePublished">January 26&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Currently the homepage redirects to &lt;code>/todos/&lt;/code>. Create a proper
    landing page for the Sveleton project.&lt;/p> &lt;h2>About Sveleton&lt;/h2> &lt;p>Sveleton is a bootstrap project based on the Intuition Design System, built
    on the foundations of intuition.team and timestripe.com for quick-starting
    new media projects with everything ready for content writing, SEO, and more.&lt;/p> &lt;h2>Requirements&lt;/h2> &lt;ul>&lt;li>Welcome message explaining what Sveleton is (see above)&lt;/li> &lt;li>Links to key sections (Todos, Sitemap)&lt;/li> &lt;li>Clean, minimal design consistent with the rest of the site&lt;/li> &lt;li>Proper meta tags for SEO&lt;/li>&lt;/ul> &lt;h2>Implementation&lt;/h2> &lt;ul>&lt;li>Replace &lt;code>src/routes/+page.server.js&lt;/code> redirect with actual &lt;code>+page.svelte&lt;/code>&lt;/li> &lt;li>Use existing design patterns from todo pages&lt;/li> &lt;li>Keep it simple - this is a demo/template project&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">New homepage&lt;/p> &lt;p itemprop="description">Welcome visitors properly&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Create pages metadata module</title>
        <link href="/todos/create-pages-metadata-module/"/>
        <id>/todos/create-pages-metadata-module/</id>
        <updated>2026-01-26T01:23:00.000Z</updated>
        <published>2026-01-26T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/create-pages-metadata-module">Create Pages Metadata Module&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Create &lt;span>pages metadata module&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-26" itemprop="datePublished">January 26&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-02-09" itemprop="dateModified">February 9&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Create a pages metadata module using a &lt;a href="https://svelte.dev/docs/kit/remote-functions">SvelteKit remote function&lt;/a> (&lt;code>prerender&lt;/code>) instead of a plain client-side module with &lt;code>import.meta.glob&lt;/code>. This keeps the glob/metadata resolution on
    the server and prerendered at build time.&lt;/p> &lt;h2>Goal&lt;/h2> &lt;p>Provide a single module that exports all page metadata, enabling:&lt;/p> &lt;ul>&lt;li>Type-safe access to page metadata&lt;/li> &lt;li>Easy iteration over all pages (for sitemap, feeds, navigation)&lt;/li> &lt;li>Consistent metadata structure across the app&lt;/li> &lt;li>Server-side only execution (no glob in the client bundle)&lt;/li>&lt;/ul> &lt;h2>Relevant Docs&lt;/h2> &lt;ul>&lt;li>&lt;a href="https://svelte.dev/docs/kit/remote-functions">Remote functions&lt;/a> - overview of query, form, command, and prerender&lt;/li> &lt;li>&lt;a href="https://svelte.dev/docs/kit/$app-server">$app/server&lt;/a> - API reference for &lt;code>query&lt;/code>, &lt;code>prerender&lt;/code>, etc.&lt;/li>&lt;/ul> &lt;h2>Approach&lt;/h2> &lt;p>Use a &lt;code>prerender&lt;/code> remote function since page metadata only
    changes at build time. The result gets cached and prerendered during the
    build, so no runtime server is needed for the static site.&lt;/p> &lt;h2>Implementation&lt;/h2> &lt;p>1. Enable remote functions in &lt;code>svelte.config.js&lt;/code>:&lt;/p> &lt;pre>&lt;code>export default { kit: { experimental: { remoteFunctions: true } } }&lt;/code>&lt;/pre> &lt;p>2. Create &lt;code>src/routes/pages.remote.ts&lt;/code>:&lt;/p> &lt;pre>&lt;code>import { prerender } from '$app/server';

const modules = import.meta.glob('/src/routes/**/+page.svelte', {
  import: 'meta',
  eager: true,
});

export const getPages = prerender(async () => {
  return Object.entries(modules).map(([path, meta]) => {
    const url = path
      .replace('/src/routes', '')
      .replace('/+page.svelte', '')
      .replace(/\([^)]+\)\//g, '') || '/';
    return { url, ...meta };
  });
});&lt;/code>&lt;/pre> &lt;p>3. Use in components:&lt;/p> &lt;pre>&lt;code>&amp;lt;script>
  import { getPages } from './pages.remote';
&amp;lt;/script>

{#each await getPages() as page}
  &amp;lt;a href={page.url}>{page.title}&amp;lt;/a>
{/each}&lt;/code>&lt;/pre> &lt;h2>Consumers to Update&lt;/h2> &lt;ul>&lt;li>&lt;code>src/lib/index.js&lt;/code> - remove the &lt;code>pages&lt;/code> export (currently uses &lt;code>import.meta.glob&lt;/code> on client)&lt;/li> &lt;li>&lt;code>src/lib/page-renderer.svelte.js&lt;/code> - use remote function instead of glob&lt;/li> &lt;li>&lt;code>src/routes/sitemap/+page.server.js&lt;/code> - use remote function&lt;/li> &lt;li>&lt;code>src/routes/feed.json/+server.js&lt;/code> - use remote function&lt;/li>&lt;/ul> &lt;h2>Config Requirements&lt;/h2> &lt;ul>&lt;li>Enable &lt;code>experimental.remoteFunctions&lt;/code> in &lt;code>svelte.config.js&lt;/code>&lt;/li> &lt;li>Enable &lt;code>compilerOptions.experimental.async&lt;/code> for &lt;code>await&lt;/code> in templates&lt;/li> &lt;li>Remote function files use &lt;code>.remote.ts&lt;/code> extension&lt;/li> &lt;li>Cannot be placed in &lt;code>src/lib/server/&lt;/code>&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Centralized metadata&lt;/p> &lt;p itemprop="description">Single source of truth&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Fix preview generation</title>
        <link href="/todos/fix-preview-generation/"/>
        <id>/todos/fix-preview-generation/</id>
        <updated>2026-01-26T01:24:00.000Z</updated>
        <published>2026-01-26T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/fix-preview-generation">Fix Preview Generation&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Fix &lt;span>preview generation&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-26" itemprop="datePublished">January 26&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-02-09" itemprop="dateModified">February 9&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Superseded by &lt;a href="/todos/restore-og-image-generation/">Restore dynamic OG image generation&lt;/a>, which has more detailed tasks and current state analysis.&lt;/p> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Fix previews&lt;/p> &lt;p itemprop="description">Better social sharing&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Remove background</title>
        <link href="/todos/remove-background/"/>
        <id>/todos/remove-background/</id>
        <updated>2026-01-26T01:25:00.000Z</updated>
        <published>2026-01-26T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/remove-background">Remove Background&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Remove &lt;span>background&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-26" itemprop="datePublished">January 26&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-02-09" itemprop="dateModified">February 9&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Remove or simplify the decorative background styles from the site.&lt;/p> &lt;h2>Tasks&lt;/h2> &lt;ul>&lt;li>Remove background image/gradient styles&lt;/li> &lt;li>Clean up related CSS variables&lt;/li> &lt;li>Ensure consistent appearance across pages&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Clean background&lt;/p> &lt;p itemprop="description">Simplify visual design&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Update README and CLAUDE.md</title>
        <link href="/todos/update-readme-and-claude-md/"/>
        <id>/todos/update-readme-and-claude-md/</id>
        <updated>2026-01-26T01:26:00.000Z</updated>
        <published>2026-01-26T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/update-readme-and-claude-md">Update Readme And Claude Md&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Update &lt;span>README and CLAUDE.md&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-26" itemprop="datePublished">January 26&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Update project documentation to reflect the current state after removing
    magazine/Timestripe content.&lt;/p> &lt;h2>About Sveleton&lt;/h2> &lt;p>Sveleton is a bootstrap project based on the Intuition Design System, built
    on the foundations of intuition.team and timestripe.com for quick-starting
    new media projects with everything ready for content writing, SEO, and more.&lt;/p> &lt;h2>README.md&lt;/h2> &lt;p>DONE - Updated with project description and commands.&lt;/p> &lt;h2>CLAUDE.md&lt;/h2> &lt;p>DONE - Updated with project overview, current structure, and todo page
    instructions.&lt;/p> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Documentation&lt;/p> &lt;p itemprop="description">Keep docs up to date&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Re-enable imagetools</title>
        <link href="/todos/re-enable-imagetools/"/>
        <id>/todos/re-enable-imagetools/</id>
        <updated>2026-01-25T01:27:00.000Z</updated>
        <published>2026-01-25T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/re-enable-imagetools">Re Enable Imagetools&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Re-enable &lt;span>imagetools&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-25" itemprop="datePublished">January 25&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-02-09" itemprop="dateModified">February 9&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>The &lt;code>vite-imagetools&lt;/code> plugin was disabled in &lt;code>vite.config.js&lt;/code> because it caused the build to freeze during the transform step.&lt;/p> &lt;h2>Problem&lt;/h2> &lt;p>The build would hang indefinitely after showing Svelte warnings, around the
    transform step. This is likely due to:&lt;/p> &lt;ul>&lt;li>Processing 340+ images with &lt;code>?as=run&lt;/code> imports&lt;/li> &lt;li>Each image being converted to 9 different widths (197-1920px)&lt;/li> &lt;li>AVIF format conversion being CPU-intensive&lt;/li> &lt;li>Possible memory issues or infinite loops in image processing&lt;/li>&lt;/ul> &lt;h2>Investigation Steps&lt;/h2> &lt;ul>&lt;li>Try building with fewer images first&lt;/li> &lt;li>Check if specific images cause the freeze&lt;/li> &lt;li>Monitor memory usage during build&lt;/li> &lt;li>Try reducing the number of output widths&lt;/li> &lt;li>Check imagetools version and changelog for known issues&lt;/li> &lt;li>Consider using a different image optimization approach&lt;/li>&lt;/ul> &lt;h2>Current State&lt;/h2> &lt;p>The imagetools plugin is commented out in &lt;code>vite.config.js&lt;/code>.
    Images are imported directly without optimization.&lt;/p> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Image optimization&lt;/p> &lt;p itemprop="description">Restore image processing&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Reduce build logging</title>
        <link href="/todos/reduce-build-logging/"/>
        <id>/todos/reduce-build-logging/</id>
        <updated>2026-01-25T01:28:00.000Z</updated>
        <published>2026-01-25T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/reduce-build-logging">Reduce Build Logging&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Reduce &lt;span>build logging&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-25" itemprop="datePublished">January 25&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>The build output is very verbose with many warnings. Add a way to toggle
    detailed logging.&lt;/p> &lt;h2>Current Warnings&lt;/h2> &lt;ul>&lt;li>Svelte a11y warnings (media captions, click handlers, etc.)&lt;/li> &lt;li>State referenced locally warnings&lt;/li> &lt;li>Missing anchor ID warnings from prerender&lt;/li> &lt;li>CSS syntax warnings&lt;/li> &lt;li>Component naming warnings&lt;/li>&lt;/ul> &lt;h2>Solution&lt;/h2> &lt;p>Options to reduce logging:&lt;/p> &lt;ul>&lt;li>Add &lt;code>onwarn&lt;/code> handler in &lt;code>svelte.config.js&lt;/code> to filter
      warnings&lt;/li> &lt;li>Use environment variable like &lt;code>VERBOSE=1 pnpm build&lt;/code> to toggle&lt;/li> &lt;li>Configure &lt;code>handleMissingId: 'ignore'&lt;/code> in SvelteKit config for
      anchor warnings&lt;/li> &lt;li>Set &lt;code>compilerOptions.warningFilter&lt;/code> in svelte.config.js&lt;/li>&lt;/ul> &lt;h2>Example&lt;/h2> &lt;pre>&lt;code>// svelte.config.js
const config = {
    onwarn: (warning, handler) => {
        if (process.env.VERBOSE) {
            handler(warning);
        } else if (warning.code === 'a11y_media_has_caption') return;
        else if (warning.code === 'state_referenced_locally') return;
        else handler(warning);
    }
};&lt;/code>&lt;/pre> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Clean output&lt;/p> &lt;p itemprop="description">Less noise in build logs&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Cleanup all warnings</title>
        <link href="/todos/cleanup-all-warnings/"/>
        <id>/todos/cleanup-all-warnings/</id>
        <updated>2026-01-23T01:29:00.000Z</updated>
        <published>2026-01-23T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/cleanup-all-warnings">Cleanup All Warnings&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Cleanup &lt;span>all warnings&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-23" itemprop="datePublished">January 23&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-01-26" itemprop="dateModified">January 26&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Fix all warnings from build process, svelte-check, and linting to achieve
    clean output.&lt;/p> &lt;h2>Current Status&lt;/h2> &lt;ul>&lt;li>&lt;strong>pnpm check&lt;/strong>: 0 errors, 0 warnings&lt;/li> &lt;li>&lt;strong>pnpm build&lt;/strong>: 6 warnings (see below)&lt;/li>&lt;/ul> &lt;h2>Build Warnings&lt;/h2> &lt;h3>1. tsconfig.json base config (2 warnings)&lt;/h3> &lt;pre>&lt;code>Cannot find base config file "./.svelte-kit/tsconfig.json"&lt;/code>&lt;/pre> &lt;p>&lt;strong>Cause:&lt;/strong> esbuild runs in parallel with vite, starts before SvelteKit generates
    tsconfig.&lt;/p> &lt;p>&lt;strong>Status:&lt;/strong> Added &lt;code>svelte-kit sync&lt;/code> to build script but warning persists due
    to parallel execution. Harmless - build succeeds.&lt;/p> &lt;h3>2. CSS :has() selector (4 warnings)&lt;/h3> &lt;pre>&lt;code>Expected identifier but found whitespace
Unexpected "has("&lt;/code>&lt;/pre> &lt;p>&lt;strong>Location:&lt;/strong> &lt;code>src/styles/ids/settings.pcss:82&lt;/code>&lt;/p> &lt;pre>&lt;code>html:has(.theme_dark) { ... }&lt;/code>&lt;/pre> &lt;p>&lt;strong>Cause:&lt;/strong> esbuild's CSS parser doesn't fully support :has() pseudo-selector.&lt;/p> &lt;p>&lt;strong>Fix options:&lt;/strong>&lt;/p> &lt;ul>&lt;li>Ignore (CSS works fine in browser, just parser warning)&lt;/li> &lt;li>Refactor to use JS-based theme switching instead of :has()&lt;/li> &lt;li>Use @supports or fallback approach&lt;/li>&lt;/ul> &lt;h2>Recommended Approach&lt;/h2> &lt;ol>&lt;li>&lt;strong>tsconfig warning&lt;/strong>: Leave as-is, it's harmless and resolves
      on build&lt;/li> &lt;li>&lt;strong>:has() warning&lt;/strong>: Keep for now - modern CSS feature that
      works in browsers. Consider refactoring only if it causes actual issues.&lt;/li>&lt;/ol> &lt;aside>&lt;p>All warnings are cosmetic - the build succeeds and output works correctly.
      These can be addressed later if needed.&lt;/p>&lt;/aside> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Zero warnings&lt;/p> &lt;p itemprop="description">Clean build output&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Enable disabled features</title>
        <link href="/todos/enable-disabled-features/"/>
        <id>/todos/enable-disabled-features/</id>
        <updated>2026-01-23T01:30:00.000Z</updated>
        <published>2026-01-23T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/enable-disabled-features">Enable Disabled Features&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Enable &lt;span>disabled features&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-23" itemprop="datePublished">January 23&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-02-09" itemprop="dateModified">February 9&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Re-enable features that were temporarily disabled or mocked during the
    initial project setup.&lt;/p> &lt;h2>Disabled Routes&lt;/h2> &lt;p>Routes that were moved to &lt;code>src/lib/disabled-routes/&lt;/code>:&lt;/p> &lt;ul>&lt;li>&lt;del>&lt;code>feed.json&lt;/code> - JSON feed endpoint&lt;/del> — restored&lt;/li> &lt;li>&lt;del>&lt;code>feed.xml&lt;/code> - RSS/Atom feed endpoint&lt;/del> — restored&lt;/li> &lt;li>&lt;del>&lt;code>sitemap-appendix.xml&lt;/code> - Sitemap XML endpoint&lt;/del> — restored&lt;/li> &lt;li>&lt;code>og/&lt;/code> - Dynamic OG image generation — &lt;a href="/todos/restore-og-image-generation/">separate todo&lt;/a>&lt;/li> &lt;li>&lt;del>&lt;code>sitemap/&lt;/code> - Sitemap page&lt;/del> — restored&lt;/li>&lt;/ul> &lt;h2>Mocked Features&lt;/h2> &lt;ul>&lt;li>&lt;del>&lt;code>src/routes/+layout.server.js&lt;/code> - Feed fetch returns empty &lt;code>{ items: [] }&lt;/code>&lt;/del> — restored, fetches from &lt;code>/feed.json&lt;/code>&lt;/li> &lt;li>&lt;del>&lt;code>src/routes/+layout.server.js&lt;/code> - Module scanning commented out&lt;/del> — restored&lt;/li> &lt;li>&lt;code>src/routes/+layout.svelte&lt;/code> - Feed links commented out — &lt;a href="/todos/add-feed-link-tags/">separate todo&lt;/a>&lt;/li> &lt;li>&lt;code>src/lib/Meta.svelte&lt;/code> - OG image uses cover directly instead of generated image — &lt;a href="/todos/restore-og-image-generation/">separate todo&lt;/a>&lt;/li> &lt;li>&lt;del>&lt;code>src/lib/Articles.svelte&lt;/code> - Uses &lt;code>feed?.items ?? []&lt;/code> fallback&lt;/del> — acceptable now that feed is live&lt;/li>&lt;/ul> &lt;h2>Remaining&lt;/h2> &lt;ul>&lt;li>&lt;a href="/todos/restore-og-image-generation/">Restore dynamic OG image generation&lt;/a>&lt;/li> &lt;li>&lt;a href="/todos/add-feed-link-tags/">Add feed link tags to layout&lt;/a>&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Full functionality&lt;/p> &lt;p itemprop="description">Restore all features&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Investigate build freeze</title>
        <link href="/todos/investigate-build-freeze/"/>
        <id>/todos/investigate-build-freeze/</id>
        <updated>2026-01-23T01:31:00.000Z</updated>
        <published>2026-01-23T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/investigate-build-freeze">Investigate Build Freeze&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Investigate &lt;span>build freeze&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-23" itemprop="datePublished">January 23&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-02-09" itemprop="dateModified">February 9&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>The &lt;code>pnpm build&lt;/code> command freezes at some point. Need to identify
    the cause and fix it.&lt;/p> &lt;h2>Investigation Steps&lt;/h2> &lt;ul>&lt;li>Run &lt;code>pnpm build&lt;/code> and observe where it hangs&lt;/li> &lt;li>Check for infinite loops or circular dependencies&lt;/li> &lt;li>Check vite-imagetools processing (large images, many images)&lt;/li> &lt;li>Check for problematic imports or dynamic imports&lt;/li> &lt;li>Try building with verbose output&lt;/li>&lt;/ul> &lt;h2>Potential Causes&lt;/h2> &lt;ul>&lt;li>vite-imagetools processing too many images&lt;/li> &lt;li>Circular dependencies in imports&lt;/li> &lt;li>Large asset processing&lt;/li> &lt;li>Memory issues during build&lt;/li> &lt;li>Plugin conflicts&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Build stability&lt;/p> &lt;p itemprop="description">Reliable builds&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Restore meta context</title>
        <link href="/todos/restore-meta-context/"/>
        <id>/todos/restore-meta-context/</id>
        <updated>2026-01-23T01:32:00.000Z</updated>
        <published>2026-01-23T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/restore-meta-context">Restore Meta Context&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Restore &lt;span>meta context&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-23" itemprop="datePublished">January 23&lt;/time>&lt;!----> &lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>The &lt;code>getContext('meta')&lt;/code> call in &lt;code>src/lib/meta.svelte&lt;/code> was commented out to investigate build freeze.&lt;/p> &lt;h2>Location&lt;/h2> &lt;p>File: &lt;code>src/lib/meta.svelte:68&lt;/code>&lt;/p> &lt;h2>Task&lt;/h2> &lt;ul>&lt;li>Uncomment the &lt;code>getContext('meta')&lt;/code> line&lt;/li> &lt;li>Verify build still works after restoring&lt;/li> &lt;li>If build freezes again, investigate why this call causes issues&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Meta context&lt;/p> &lt;p itemprop="description">Restore functionality&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Set up GitHub Actions</title>
        <link href="/todos/set-up-gh-actions/"/>
        <id>/todos/set-up-gh-actions/</id>
        <updated>2026-01-23T01:33:00.000Z</updated>
        <published>2026-01-23T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;article itemscope="" itemtype="https://schema.org/Article">&lt;section>&lt;!--[0-->&lt;nav aria-label="breadcrumb">&lt;!--[-->&lt;!--[-1-->&lt;!--]--> &lt;!--[-1-->&lt;a href="/src">Src&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes">Routes&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)">(demo)&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos">Todos&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[-1-->&lt;a href="/src/routes/(demo)/todos/set-up-gh-actions">Set Up Gh Actions&lt;/a>&lt;!--]-->&lt;!--[0-->&lt;span>>&lt;/span>&lt;!--]--> &lt;!--[0-->&lt;span>+page.svelte&lt;/span>&lt;!--]-->&lt;!--]-->&lt;/nav>&lt;!--]-->&lt;!----> &lt;h1 itemprop="headline">&lt;!---->Set up &lt;span>GitHub Actions&lt;/span>&lt;!---->&lt;/h1> &lt;div>&lt;ul>&lt;!--[-->&lt;li itemprop="author" itemscope="" itemtype="https://schema.org/Organization">&lt;!--[0-->&lt;picture>&lt;!--[-->&lt;source type="image/avif" srcset="/_app/immutable/assets/ramil.DJHUn9oQ.avif 197w" sizes="48px"/>&lt;!--]--> &lt;img src="/_app/immutable/assets/ramil.Dcc4DoX5.avif" alt="" loading="lazy"/>&lt;/picture>&lt;!--]--> &lt;span>&lt;span itemprop="name">Ramil Karimov&lt;/span> &lt;!--[0-->&lt;span>developer&lt;/span>&lt;!--]-->&lt;/span>&lt;/li>&lt;!--]-->&lt;/ul>&lt;!---->&lt;/div> &lt;!--[0-->&lt;div>&lt;time datetime="2026-01-23" itemprop="datePublished">January 23&lt;/time>&lt;!----> &lt;!--[0-->&lt;span>·  Updated on&lt;/span> &lt;time datetime="2026-04-17" itemprop="dateModified">April 17&lt;/time>&lt;!---->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;!----> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;p>Configure GitHub Actions for automated builds, linting, and deployment.&lt;/p> &lt;h2>Subtasks&lt;/h2> &lt;h3>1. CI workflow&lt;/h3> &lt;ul>&lt;li>Create &lt;code>.github/workflows/ci.yml&lt;/code>&lt;/li> &lt;li>Configure pnpm caching for faster installs&lt;/li> &lt;li>Add linting job (&lt;code>pnpm lint&lt;/code>)&lt;/li> &lt;li>Add type-checking job (&lt;code>pnpm check&lt;/code>)&lt;/li> &lt;li>Add build job (&lt;code>pnpm build&lt;/code>)&lt;/li> &lt;li>Run on push and PR to &lt;code>main&lt;/code>&lt;/li>&lt;/ul> &lt;h3>2. Deployment workflow&lt;/h3> &lt;ul>&lt;li>Create &lt;code>.github/workflows/deploy.yml&lt;/code>&lt;/li> &lt;li>Build and deploy to GitHub Pages (or target host)&lt;/li> &lt;li>Run only on push to &lt;code>main&lt;/code>&lt;/li>&lt;/ul> &lt;h3>3. Quality gates&lt;/h3> &lt;ul>&lt;li>Require CI to pass before merging PRs&lt;/li> &lt;li>Add branch protection rules for &lt;code>main&lt;/code>&lt;/li>&lt;/ul> &lt;h2>Workflow Structure&lt;/h2> &lt;ul>&lt;li>&lt;strong>on push/PR to main&lt;/strong>: Run lint, check, build&lt;/li> &lt;li>&lt;strong>on push to main&lt;/strong>: Deploy to production&lt;/li>&lt;/ul> &lt;div>&lt;/div>&lt;!---->&lt;/section> &lt;!--[0-->&lt;section>&lt;!--[-1-->&lt;!--]-->&lt;!---->&lt;/section> &lt;section>&lt;div itemscope="" itemtype="https://schema.org/Offer">&lt;div>&lt;/div> &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 190 190" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z">&lt;/path>&lt;/svg> &lt;svg viewBox="-20 0 190 190" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">&lt;path fill-rule="evenodd" clip-rule="evenodd" d="M110.16 123.68L107.74 130.45C107.74 130.45 99.84 129.02 93.07 130.61C86.3 132.2 57.63 143.09 57.63 143.09C57.63 143.09 54.24 146.61 51.96 149.09C48.36 153.21 41.96 151.24 43.88 142.83C42.02 141.12 39.88 136.92 39.88 136.92L43.6 131.92C43.6 131.92 49.6 136.78 55.22 135.22C56.94 134.74 61.13 133.33 66.11 131.61C61.75 129.34 58.24 127.52 56.93 126.87C50.93 123.87 50.08 126.87 44.68 126.11C41.62 125.66 39.09 118.5 44.6 117.73C42.9 115.44 45.38 109.96 45.38 109.96L51.38 108.34C51.38 108.34 52.32 115.97 61.67 120.83C64.3 122.19 70 125.26 75.67 128.26C84.48 125.14 92.67 122.19 92.67 122.19C92.67 122.19 97.55 115.47 98.92 113.04C105.53 110.32 108.71 116.18 105.68 120.04C107.9 120.44 110.16 123.68 110.16 123.68ZM88.66 116.37L64.9 116C65.9 103 64.52 100.6 55.08 97.3C50.65 82.54 58.15 59.56 83.32 62.65C108.49 65.74 108.7 88.26 102.13 101.51C91.3 102.26 89.87 105.43 88.66 116.37ZM72.24 82.9C62.82 81.74 60.61 96 70.64 97.21C79.81 98.34 81.62 84.05 72.24 82.9ZM89.94 88.2C83.35 87.39 81.8 97.35 88.82 98.2C95.23 99 96.5 89 89.94 88.2ZM87.09 137.88L89.72 135.27C99.46 139.19 104.98 135.86 104.98 135.86L108.75 141.74C108.75 141.74 106.39 146.47 103.66 146.92C107.75 152.36 100.51 157.09 97.01 154.54C95.15 149.66 93.62 145.99 93.62 145.99L82.26 139.99L84.16 137.33L87.09 137.88Z" fill="white">&lt;/path>&lt;/svg> &lt;div>&lt;p itemprop="name">Automate everything&lt;/p> &lt;p itemprop="description">CI/CD pipeline with GitHub Actions&lt;/p> &lt;a href="https://sveleton.ramilkarimov.me/" itemprop="url">Get Started&lt;/a> &lt;div itemprop="seller" itemscope="" itemtype="https://schema.org/Organization">&lt;meta itemprop="name" content="Sveleton"/> &lt;meta itemprop="url" content="https://sveleton.com/"/>&lt;/div>&lt;/div> &lt;div>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#fff" aria-hidden="true">&lt;path d="M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z">&lt;/path>&lt;/svg>&lt;/div>&lt;/div>&lt;!---->&lt;/section>&lt;!--]-->&lt;/article>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Reports</title>
        <link href="/reports/"/>
        <id>/reports/</id>
        <updated>2024-01-01T01:34:00.000Z</updated>
        <published>2024-01-01T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;div>&lt;h1>Reports&lt;/h1> &lt;div>&lt;!--[-->&lt;!--]--> &lt;!--[-1-->&lt;!--]-->&lt;/div>&lt;!---->&lt;/div>&lt;!--]--></content>
      </entry>
    <entry>
        <title>Glossary</title>
        <link href="/glossary/"/>
        <id>/glossary/</id>
        <updated>2024-01-01T01:35:00.000Z</updated>
        <published>2024-01-01T00:00:00-00:00</published>
        <content type="html">&lt;!--[-->&lt;div>&lt;h1>Glossary&lt;/h1> &lt;dl>&lt;dt>CTA&lt;/dt> &lt;dd>Call to Action. A prompt encouraging the reader to take a specific action,
      such as subscribing or reading more.&lt;/dd> &lt;dt>IDS&lt;/dt> &lt;dd>Intuition Design System. The design system that provides styles,
      components, and conventions used throughout the project.&lt;/dd> &lt;dt>LQIP&lt;/dt> &lt;dd>Low Quality Image Placeholder. A tiny blurred preview of an image
      displayed while the full-resolution version loads.&lt;/dd> &lt;dt>NavAnchor&lt;/dt> &lt;dd>A navigation anchor component that creates linkable sections within a
      page, used for in-page table of contents.&lt;/dd> &lt;dt>PageMeta&lt;/dt> &lt;dd>A TypeScript type describing page metadata: title, description, date,
      authors, tags, and sort order. Exported from each page's module script.&lt;/dd> &lt;dt>Publication&lt;/dt> &lt;dd>The main content wrapper component providing article layout, heading slot,
      and an optional CTA section.&lt;/dd> &lt;dt>Remote Functions&lt;/dt> &lt;dd>A SvelteKit experimental feature that allows server-side functions to be
      called from the client. Used for prerendering page metadata.&lt;/dd> &lt;dt>Sitemap&lt;/dt> &lt;dd>A page listing all routes in the project, organized hierarchically for
      navigation and SEO.&lt;/dd> &lt;dt>Sveleton&lt;/dt> &lt;dd>This project. A bootstrap template built on the Intuition Design System
      for quick-starting media projects with SvelteKit.&lt;/dd> &lt;dt>SvelteKit&lt;/dt> &lt;dd>The full-stack framework powering this project, used here as a static site
      generator with the static adapter.&lt;/dd> &lt;dt>TodoCover&lt;/dt> &lt;dd>A component rendering the visual cover for todo pages, with states: new,
      done, and canceled.&lt;/dd> &lt;dt>vite-imagetools&lt;/dt> &lt;dd>A Vite plugin for image optimization. Configured with default directives
      to produce AVIF format, responsive widths, and LQIP automatically.&lt;/dd>&lt;/dl>&lt;/div>&lt;!--]--></content>
      </entry>
  </feed>