<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Epistemic Technology</title>
    <link>https://epistemic.technology/</link>
    <description>Recent content on Epistemic Technology</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 09 Jul 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://epistemic.technology/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Projects</title>
      <link>https://epistemic.technology/projects/</link>
      <pubDate>Wed, 09 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://epistemic.technology/projects/</guid>
      <description>&lt;h2 id=&#34;epistemic-technology-projects&#34;&gt;Epistemic Technology Projects&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Projects I&amp;rsquo;ve worked on within Epistemic Technology&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;epistemic-technology-website&#34;&gt;Epistemic Technology Website&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://epistemic.technology/images/projects/epistemic-technology-home.png&#34; alt=&#34;Screenshot of the Epistemic Technology homepage showing hero image and mission statement&#34;&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Building and deploying the Epistemic Technology website.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Dates:&lt;/strong&gt; January - February 2025&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Technologies:&lt;/strong&gt; Hugo, Go, HTML, CSS, JavaScript, Railway, SendGrid&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href=&#34;https://github.com/Epistemic-Technology/epistemic.technology&#34;&gt;Epistemic-Technology/epistemic.technology&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;The Epistemic Technology website is a static website built using Hugo, a popular static site generator written in Go. It is hosted on Railway, a cloud platform for deploying and scaling web applications. The website uses SendGrid for email delivery. It has minimal JavaScript to handle form submissions and smooth scrolling. A few small backend services written in Go are used to handle functionality such as signing users up for blog subscriptions and handling contact form submissions.&lt;/li&gt;&#xA;&lt;li&gt;I discuss this project in my blog post &lt;a href=&#34;https://epistemic.technology/blog/2025-02-23-building-my-site-with-cursor/&#34;&gt;Building my site with Cursor&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;epistemic-technology-chatbot&#34;&gt;Epistemic Technology Chatbot&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://epistemic.technology/images/projects/epistemic-technology-chatbot.png&#34; alt=&#34;Screenshot of the Epistemic Technology chatbot showing a brief interaction and the WarGames aesthetic&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a RAG chatbot with Go, SolidJS, Hugo, and SQLite</title>
      <link>https://epistemic.technology/blog/2025-03-31-building-a-chatbot/</link>
      <pubDate>Mon, 31 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://epistemic.technology/blog/2025-03-31-building-a-chatbot/</guid>
      <description>&lt;p&gt;Last week I released a chatbot powered by retrieval-augmented generation (RAG) for the Epistemic Technology site. Along with it, I published a &lt;a href=&#34;../about-our-chatbot.md&#34;&gt;high-level overview&lt;/a&gt; of it intended for a general audience. In this post I dive more deeply into the engineering of the chatbot, for those who are pursuing similar experiments.&lt;/p&gt;&#xA;&lt;p&gt;All of the code for the chatbot is available in the &lt;a href=&#34;https://github.com/Epistemic-Technology/epistemic.technology/&#34;&gt;Epistemic Technology GitHub&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-big-picture&#34;&gt;The big picture&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://epistemic.technology/images/chatbot-architecture.png&#34; alt=&#34;Chatbot architecture, showing various components and control flows of the application.&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>About our chatbot</title>
      <link>https://epistemic.technology/about-our-chatbot/</link>
      <pubDate>Mon, 24 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://epistemic.technology/about-our-chatbot/</guid>
      <description>&lt;p&gt;Joshua, named after the computer in &lt;a href=&#34;https://en.wikipedia.org/wiki/WarGames&#34;&gt;Wargames (1983)&lt;/a&gt;, is a chatbot interface for the Epistemic Technology site. It uses &lt;a href=&#34;https://en.wikipedia.org/wiki/Retrieval-augmented_generation&#34;&gt;Retrieval-Augmented Generation (RAG)&lt;/a&gt; to respond to user queries with answers specific to our site.&lt;/p&gt;&#xA;&lt;p&gt;This page describes the high-level architecture and operation of the chatbot. It is meant to serve as both an explanation of this specific implementation and as an introduction to RAG in general.&lt;/p&gt;&#xA;&lt;p&gt;RAG applications work by inserting content relevant to a user&amp;rsquo;s query into the prompt sent to an LLM so the LLM&amp;rsquo;s response can take that content into account. It is essentially the same process as copy-pasting a document into ChatGPT and asking questions about that document. The main challenge of RAG is to retrieve &lt;em&gt;relevant&lt;/em&gt; context for the LLM based on the user&amp;rsquo;s query. Traditionally, RAG applications retrieve &amp;ldquo;chunks&amp;rdquo; of documents (such as paragraphs) based on their similarity to the query. With modern LLMs that can accept much more data in their context windows than earlier iterations, it is feasible to include entire documents, or multiple documents, rather than chunks. For the current size of the Epistemic Technology site, a simple working approach would be to just give the LLM &lt;em&gt;all&lt;/em&gt; of the site content with each query. However, as this was partly a learning project, it follows the traditional approach and chunks documents by paragraph.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How should LLMs change software architecture?</title>
      <link>https://epistemic.technology/blog/2025-03-03-how-should-llms-change-software-architecture/</link>
      <pubDate>Mon, 03 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://epistemic.technology/blog/2025-03-03-how-should-llms-change-software-architecture/</guid>
      <description>&lt;p&gt;One of my favorite thinkers on programming is &lt;a href=&#34;https://caseymuratori.com/about&#34;&gt;Casey Muratori&lt;/a&gt;, a low-level programmer, &lt;a href=&#34;https://www.computerenhance.com/&#34;&gt;educator&lt;/a&gt;, and occasional &lt;a href=&#34;https://www.youtube.com/@MollyRocket&#34;&gt;Youtuber&lt;/a&gt;. In &lt;a href=&#34;https://www.youtube.com/watch?v=5IUj1EZwpJY&#34;&gt;&amp;ldquo;The Only Unbreakable Law&amp;rdquo;&lt;/a&gt;, he makes the argument that, inevitably, the structure of software reflects the structure of the organizations that produce it. For example, Microsoft Windows has five separate volume control widgets, not due to any design reason, but due to the organizational structure of the teams that worked on the operating system.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://epistemic.technology/images/blog/2025-03-03-how-should-llms-change-software-architecture/volume-sliders.png&#34; alt=&#34;Five distinct volume control widgets in Windows&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building My Site with Cursor</title>
      <link>https://epistemic.technology/blog/2025-02-23-building-my-site-with-cursor/</link>
      <pubDate>Sun, 23 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://epistemic.technology/blog/2025-02-23-building-my-site-with-cursor/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.cursor.com/&#34;&gt;Cursor&lt;/a&gt; is a code editor based on Microsoft&amp;rsquo;s Visual Studio Code. Initially released in 2023, it has become one of the leading AI-focused code editors. I&amp;rsquo;ve been using Cursor for a while now but hadn&amp;rsquo;t tried out some of its newer features like Agent Mode. So building a new site from scratch seemed like the perfect opportunity to experiment.&lt;/p&gt;&#xA;&lt;h2 id=&#34;initial-planning-and-architecture&#34;&gt;Initial Planning and Architecture&lt;/h2&gt;&#xA;&lt;p&gt;For any new project, coding or otherwise, my starting point is ChatGPT. You could use Cursor&amp;rsquo;s chat mode for this, but I still find OpenAI&amp;rsquo;s chat interface better for developing my initial thoughts. Here&amp;rsquo;s my initial prompt:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why Epistemic Technology?</title>
      <link>https://epistemic.technology/blog/2025-02-12-why-epistemic-technology/</link>
      <pubDate>Wed, 12 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://epistemic.technology/blog/2025-02-12-why-epistemic-technology/</guid>
      <description>&lt;p&gt;Over the coming decades, I expect artificial intelligence to revolutionize our work and lives. For those like me, working in software development or knowledge-based fields, it is already beginning to do so. How will our work and lives change? I don&amp;rsquo;t know and I don&amp;rsquo;t think anyone knows. But I want to do my utmost to be in a position where I can adapt to those changes, and make a positive impact on the world. Epistemic Technology is my attempt to do that.&lt;/p&gt;</description>
    </item>
    <item>
      <title>About</title>
      <link>https://epistemic.technology/about/</link>
      <pubDate>Tue, 04 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://epistemic.technology/about/</guid>
      <description>&lt;h2 id=&#34;mike-thicke-founder&#34;&gt;Mike Thicke, Founder&lt;/h2&gt;&#xA;&lt;div class=&#34;social-links&#34;&gt;&#xA;    &#xA;    &#xA;        &#xA;        &#xA;        &#xA;        &#xA;        &#xA;        &#xA;        &lt;a href=&#34;https://www.linkedin.com/in/mike-thicke-38aa92303/&#34; class=&#34;social-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;            &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;32&#34; height=&#34;32&#34; viewBox=&#34;0 0 32 32&#34;&gt;&lt;path d=&#34;M26.111,3H5.889c-1.595,0-2.889,1.293-2.889,2.889V26.111c0,1.595,1.293,2.889,2.889,2.889H26.111c1.595,0,2.889-1.293,2.889-2.889V5.889c0-1.595-1.293-2.889-2.889-2.889ZM10.861,25.389h-3.877V12.87h3.877v12.519Zm-1.957-14.158c-1.267,0-2.293-1.034-2.293-2.31s1.026-2.31,2.293-2.31,2.292,1.034,2.292,2.31-1.026,2.31-2.292,2.31Zm16.485,14.158h-3.858v-6.571c0-1.802-.685-2.809-2.111-2.809-1.551,0-2.362,1.048-2.362,2.809v6.571h-3.718V12.87h3.718v1.686s1.118-2.069,3.775-2.069,4.556,1.621,4.556,4.975v7.926Z&#34; fill-rule=&#34;evenodd&#34;&gt;&lt;/path&gt;&lt;/svg&gt;&#xA;        &lt;/a&gt;&#xA;    &#xA;        &#xA;        &#xA;        &#xA;        &#xA;        &#xA;        &#xA;        &lt;a href=&#34;https://www.github.com/mikethicke&#34; class=&#34;social-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;            &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;32&#34; height=&#34;32&#34; viewBox=&#34;0 0 32 32&#34;&gt;&lt;path d=&#34;M16,2.345c7.735,0,14,6.265,14,14-.002,6.015-3.839,11.359-9.537,13.282-.7,.14-.963-.298-.963-.665,0-.473,.018-1.978,.018-3.85,0-1.312-.437-2.152-.945-2.59,3.115-.35,6.388-1.54,6.388-6.912,0-1.54-.543-2.783-1.435-3.762,.14-.35,.63-1.785-.14-3.71,0,0-1.173-.385-3.85,1.435-1.12-.315-2.31-.472-3.5-.472s-2.38,.157-3.5,.472c-2.677-1.802-3.85-1.435-3.85-1.435-.77,1.925-.28,3.36-.14,3.71-.892,.98-1.435,2.24-1.435,3.762,0,5.355,3.255,6.563,6.37,6.913-.403,.35-.77,.963-.893,1.872-.805,.368-2.818,.963-4.077-1.155-.263-.42-1.05-1.452-2.152-1.435-1.173,.018-.472,.665,.017,.927,.595,.332,1.277,1.575,1.435,1.978,.28,.787,1.19,2.293,4.707,1.645,0,1.173,.018,2.275,.018,2.607,0,.368-.263,.787-.963,.665-5.719-1.904-9.576-7.255-9.573-13.283,0-7.735,6.265-14,14-14Z&#34;&gt;&lt;/path&gt;&lt;/svg&gt;&#xA;        &lt;/a&gt;&#xA;    &#xA;&lt;/div&gt;&#xA;&#xA;&lt;style&gt;&#xA;.social-links {&#xA;    display: flex;&#xA;    gap: 1rem;&#xA;    align-items: center;&#xA;    margin: 1rem 0;&#xA;}&#xA;&#xA;.social-link {&#xA;    color: var(--color-text);&#xA;    transition: color 0.2s ease;&#xA;}&#xA;&#xA;.social-link:hover {&#xA;    color: var(--color-primary);&#xA;}&#xA;&#xA;.social-link svg {&#xA;    width: 24px;&#xA;    height: 24px;&#xA;}&#xA;&lt;/style&gt;&#xA;&#xA;&lt;p&gt;Epistemic Technology was founded in 2025 by Mike Thicke. Mike is a software developer and philosopher of science. He lives in Kingston, New York with his wife and three school-age children.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contact Us</title>
      <link>https://epistemic.technology/contact/</link>
      <pubDate>Tue, 04 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://epistemic.technology/contact/</guid>
      <description>&lt;p&gt;We&amp;rsquo;d love to discuss how we might work together! Please submit a request and we should get back to you within the next business day.&lt;/p&gt;&#xA;&lt;p&gt;Note: We will &lt;em&gt;never&lt;/em&gt; use your email address for marketing purposes or share it with other parties. It will only be used for correspondence relating to your specific request.&lt;/p&gt;&#xA;&lt;form id=&#34;contact-form&#34; onsubmit=&#34;handleSubmit(event)&#34; method=&#34;POST&#34; data-endpoint=&#34;https://contact.epistemic.technology&#34;&gt;&#xA;    &lt;div class=&#34;form-group&#34;&gt;&#xA;        &lt;label for=&#34;name&#34;&gt;Name:&lt;/label&gt;&#xA;        &lt;input type=&#34;text&#34; id=&#34;name&#34; name=&#34;name&#34; required&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;form-group&#34;&gt;&#xA;        &lt;label for=&#34;email&#34;&gt;Email:&lt;/label&gt;&#xA;        &lt;input type=&#34;email&#34; id=&#34;email&#34; name=&#34;email&#34; required&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;form-group&#34;&gt;&#xA;        &lt;label for=&#34;subject&#34;&gt;Subject:&lt;/label&gt;&#xA;        &lt;select id=&#34;subject&#34; name=&#34;subject&#34; required&gt;&#xA;            &lt;option value=&#34;general&#34;&gt;General Inquiries&lt;/option&gt;&#xA;            &lt;option value=&#34;education&#34;&gt;Education &amp; Workshops&lt;/option&gt;&#xA;            &lt;option value=&#34;consulting&#34;&gt;Consulting&lt;/option&gt;&#xA;            &lt;option value=&#34;development&#34;&gt;Development&lt;/option&gt;&#xA;        &lt;/select&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;form-group&#34;&gt;&#xA;        &lt;label for=&#34;message&#34;&gt;Message:&lt;/label&gt;&#xA;        &lt;textarea id=&#34;message&#34; name=&#34;message&#34; rows=&#34;5&#34; required&gt;&lt;/textarea&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;button type=&#34;submit&#34;&gt;Send Message&lt;/button&gt;&#xA;&lt;/form&gt;&#xA;&#xA;&#xA;&lt;div id=&#34;form-result&#34; class=&#34;form-result hidden&#34;&gt;&lt;/div&gt;&#xA;&#xA;&lt;script&gt;&#xA;    async function handleSubmit(event) {&#xA;        event.preventDefault(); &#xA;        &#xA;        const resultDiv = document.getElementById(&#39;form-result&#39;);&#xA;        resultDiv.classList.remove(&#39;hidden&#39;, &#39;success&#39;, &#39;error&#39;);&#xA;        resultDiv.textContent = &#39;Sending message...&#39;;&#xA;        &#xA;        try {&#xA;            const formData = {&#xA;                name: document.getElementById(&#39;name&#39;).value,&#xA;                email: document.getElementById(&#39;email&#39;).value,&#xA;                subject: document.getElementById(&#39;subject&#39;).value,&#xA;                message: document.getElementById(&#39;message&#39;).value&#xA;            };&#xA;            &#xA;            const formElement = document.getElementById(&#39;contact-form&#39;);&#xA;            const endpoint = formElement.dataset.endpoint;&#xA;            &#xA;            const response = await fetch(endpoint, {&#xA;                method: &#39;POST&#39;,&#xA;                headers: {&#xA;                    &#39;Content-Type&#39;: &#39;application/json&#39;,&#xA;                },&#xA;                body: JSON.stringify(formData),&#xA;            });&#xA;            &#xA;            const data = await response.json();&#xA;            if (data.success) {&#xA;                resultDiv.textContent = &#39;Message sent successfully!&#39;;&#xA;                resultDiv.classList.add(&#39;success&#39;);&#xA;                event.target.reset(); &#xA;            } else {&#xA;                resultDiv.textContent = &#39;Error: &#39; + data.message;&#xA;                resultDiv.classList.add(&#39;error&#39;);&#xA;            }&#xA;        } catch (error) {&#xA;            resultDiv.textContent = &#39;Error submitting form. Please try again later.&#39;;&#xA;            resultDiv.classList.add(&#39;error&#39;);&#xA;            console.error(&#39;Error submitting form:&#39;, error);&#xA;        }&#xA;    }&#xA;&lt;/script&gt;&#xA;&#xA;&lt;style&gt;&#xA;    .form-result {&#xA;        margin-top: 1rem;&#xA;        padding: 1rem;&#xA;        border-radius: 4px;&#xA;    }&#xA;&#xA;    .form-result.hidden {&#xA;        display: none;&#xA;    }&#xA;&#xA;    .form-result.success {&#xA;        background-color: #d4edda;&#xA;        color: #155724;&#xA;        border: 1px solid #c3e6cb;&#xA;    }&#xA;&#xA;    .form-result.error {&#xA;        background-color: #f8d7da;&#xA;        color: #721c24;&#xA;        border: 1px solid #f5c6cb;&#xA;    }&#xA;&lt;/style&gt;</description>
    </item>
    <item>
      <title>Philosophy</title>
      <link>https://epistemic.technology/philosophy/</link>
      <pubDate>Tue, 04 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://epistemic.technology/philosophy/</guid>
      <description>&lt;p&gt;Epistemic Technology builds knowledge-oriented software for the era of AI.&lt;/p&gt;&#xA;&lt;p&gt;Knowledge-oriented software is aimed at empowering the production, sharing, and use of knowledge. This encompasses educational technology and research tools, but also personal knowledge management, discovery, curation, and collaboration.&lt;/p&gt;&#xA;&lt;p&gt;Never before has humanity&amp;rsquo;s relationship with knowledge evolved so rapidly. The printing press took centuries for its full effects to be realized. The internet, decades. Chatbots powered by Large Language Models changed how we work, think, and learn almost overnight, and just two years after the release of ChatGPT to the world, everything from how we write code to how we search the web to how we research and learn has changed dramatically.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Services</title>
      <link>https://epistemic.technology/services/</link>
      <pubDate>Tue, 04 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://epistemic.technology/services/</guid>
      <description>&lt;h2 id=&#34;development&#34;&gt;Development&lt;/h2&gt;&#xA;&lt;p&gt;We can help small-to-medium engineering teams plan and implement AI-enabled features. We have experience with:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;TypeScript&lt;/li&gt;&#xA;&lt;li&gt;React&lt;/li&gt;&#xA;&lt;li&gt;SolidJS&lt;/li&gt;&#xA;&lt;li&gt;Go&lt;/li&gt;&#xA;&lt;li&gt;Python&lt;/li&gt;&#xA;&lt;li&gt;PHP (WordPress / Laravel)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In addition to standard web and application development processes and technologies including Docker, AWS, git, and ci/cd.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://epistemic.technology/contact/&#34; class=&#34;read-more&#34;&gt;Contact us to discuss how we can help you build&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;consulting&#34;&gt;Consulting&lt;/h2&gt;&#xA;&lt;p&gt;We have experience helping organizatins and teams think about how to adapt to or work with AI technologies. We have:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Post 3</title>
      <link>https://epistemic.technology/posts/post-3/</link>
      <pubDate>Wed, 15 Mar 2023 11:00:00 -0700</pubDate>
      <guid>https://epistemic.technology/posts/post-3/</guid>
      <description>&lt;p&gt;Occaecat aliqua consequat laborum ut ex aute aliqua culpa quis irure esse magna dolore quis. Proident fugiat labore eu laboris officia Lorem enim. Ipsum occaecat cillum ut tempor id sint aliqua incididunt nisi incididunt reprehenderit. Voluptate ad minim sint est aute aliquip esse occaecat tempor officia qui sunt. Aute ex ipsum id ut in est velit est laborum incididunt. Aliqua qui id do esse sunt eiusmod id deserunt eu nostrud aute sit ipsum. Deserunt esse cillum Lorem non magna adipisicing mollit amet consequat.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Post 2</title>
      <link>https://epistemic.technology/posts/post-2/</link>
      <pubDate>Wed, 15 Feb 2023 10:00:00 -0700</pubDate>
      <guid>https://epistemic.technology/posts/post-2/</guid>
      <description>&lt;p&gt;Anim eiusmod irure incididunt sint cupidatat. Incididunt irure irure irure nisi ipsum do ut quis fugiat consectetur proident cupidatat incididunt cillum. Dolore voluptate occaecat qui mollit laborum ullamco et. Ipsum laboris officia anim laboris culpa eiusmod ex magna ex cupidatat anim ipsum aute. Mollit aliquip occaecat qui sunt velit ut cupidatat reprehenderit enim sunt laborum. Velit veniam in officia nulla adipisicing ut duis officia.&lt;/p&gt;&#xA;&lt;p&gt;Exercitation voluptate irure in irure tempor mollit Lorem nostrud ad officia. Velit id fugiat occaecat do tempor. Sit officia Lorem aliquip eu deserunt consectetur. Aute proident deserunt in nulla aliquip dolore ipsum Lorem ut cupidatat consectetur sit sint laborum. Esse cupidatat sit sint sunt tempor exercitation deserunt. Labore dolor duis laborum est do nisi ut veniam dolor et nostrud nostrud.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Post 1</title>
      <link>https://epistemic.technology/posts/post-1/</link>
      <pubDate>Sun, 15 Jan 2023 09:00:00 -0700</pubDate>
      <guid>https://epistemic.technology/posts/post-1/</guid>
      <description>&lt;p&gt;Tempor proident minim aliquip reprehenderit dolor et ad anim Lorem duis sint eiusmod. Labore ut ea duis dolor. Incididunt consectetur proident qui occaecat incididunt do nisi Lorem. Tempor do laborum elit laboris excepteur eiusmod do. Eiusmod nisi excepteur ut amet pariatur adipisicing Lorem.&lt;/p&gt;&#xA;&lt;p&gt;Occaecat nulla excepteur dolore excepteur duis eiusmod ullamco officia anim in voluptate ea occaecat officia. Cillum sint esse velit ea officia minim fugiat. Elit ea esse id aliquip pariatur cupidatat id duis minim incididunt ea ea. Anim ut duis sunt nisi. Culpa cillum sit voluptate voluptate eiusmod dolor. Enim nisi Lorem ipsum irure est excepteur voluptate eu in enim nisi. Nostrud ipsum Lorem anim sint labore consequat do.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Confirm your subscription</title>
      <link>https://epistemic.technology/confirm/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://epistemic.technology/confirm/</guid>
      <description>&lt;p&gt;Confirming your subscription to the Epistemic Technology blog.&lt;/p&gt;&#xA;&lt;div id=&#34;confirmation-container&#34; class=&#34;narrow&#34;&gt;&#xA;    &lt;div id=&#34;confirming-state&#34; class=&#34;confirmation-state&#34;&gt;&#xA;        &lt;div class=&#34;spinner&#34;&gt;&lt;/div&gt;&#xA;        &lt;h2&gt;Confirming subscription...&lt;/h2&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div id=&#34;success-state&#34; class=&#34;confirmation-state&#34; style=&#34;display: none;&#34;&gt;&#xA;        &lt;h2&gt;Subscription confirmed!&lt;/h2&gt;&#xA;        &lt;p&gt;Thank you for subscribing to Epistemic Technology.&lt;/p&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div id=&#34;error-state&#34; class=&#34;confirmation-state&#34; style=&#34;display: none;&#34;&gt;&#xA;        &lt;h2&gt;Subscription Error&lt;/h2&gt;&#xA;        &lt;p&gt;We encountered an error while confirming your subscription. Please contact &lt;a href=&#34;mailto:support@epistemic.technology&#34;&gt;support@epistemic.technology&lt;/a&gt; for assistance.&lt;/p&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;style&gt;&#xA;.confirmation-state {&#xA;    text-align: center;&#xA;    padding: 2rem;&#xA;    margin: 2rem auto;&#xA;    border: 2px solid var(--color-border);&#xA;    border-radius: 0.75rem;&#xA;    background-color: var(--color-bg);&#xA;}&#xA;&#xA;.confirmation-state h2 {&#xA;    font-family: &#39;MartainMono&#39;, monospace;&#xA;    color: var(--color-text);&#xA;    margin-bottom: 1rem;&#xA;}&#xA;&#xA;.confirmation-state p {&#xA;    color: var(--color-text-muted);&#xA;    line-height: 1.5;&#xA;}&#xA;&#xA;.confirmation-state a {&#xA;    color: var(--color-primary);&#xA;    text-decoration: underline;&#xA;}&#xA;&#xA;.spinner {&#xA;    width: 40px;&#xA;    height: 40px;&#xA;    margin: 0 auto 1rem;&#xA;    border: 3px solid var(--color-text-muted);&#xA;    border-radius: 50%;&#xA;    border-top-color: var(--color-primary);&#xA;    animation: spin 1s linear infinite;&#xA;}&#xA;&#xA;@keyframes spin {&#xA;    to { transform: rotate(360deg); }&#xA;}&#xA;&#xA;@media (prefers-reduced-motion: reduce) {&#xA;    .spinner {&#xA;        animation: none;&#xA;        border: 3px solid var(--color-primary);&#xA;    }&#xA;}&#xA;&lt;/style&gt;&#xA;&#xA;&lt;script&gt;&#xA;document.addEventListener(&#39;DOMContentLoaded&#39;, function() {&#xA;    const urlParams = new URLSearchParams(window.location.search);&#xA;    const token = urlParams.get(&#39;token&#39;);&#xA;    const email = urlParams.get(&#39;email&#39;);&#xA;&#xA;    if (!token || !email) {&#xA;        showError();&#xA;        return;&#xA;    }&#xA;&#xA;    confirmSubscription(token, email);&#xA;});&#xA;&#xA;async function confirmSubscription(token, email) {&#xA;    try {&#xA;        const response = await fetch(&#39;https:\/\/subscription.epistemic.technology\/confirm&#39;, {&#xA;            method: &#39;POST&#39;,&#xA;            headers: {&#xA;                &#39;Content-Type&#39;: &#39;application/json&#39;,&#xA;            },&#xA;            body: JSON.stringify({ token, email })&#xA;        });&#xA;&#xA;        if (response.ok) {&#xA;            showSuccess();&#xA;        } else {&#xA;            showError();&#xA;        }&#xA;    } catch (error) {&#xA;        console.error(&#39;Confirmation error:&#39;, error);&#xA;        showError();&#xA;    }&#xA;}&#xA;&#xA;function showSuccess() {&#xA;    document.getElementById(&#39;confirming-state&#39;).style.display = &#39;none&#39;;&#xA;    document.getElementById(&#39;success-state&#39;).style.display = &#39;block&#39;;&#xA;    document.getElementById(&#39;error-state&#39;).style.display = &#39;none&#39;;&#xA;}&#xA;&#xA;function showError() {&#xA;    document.getElementById(&#39;confirming-state&#39;).style.display = &#39;none&#39;;&#xA;    document.getElementById(&#39;success-state&#39;).style.display = &#39;none&#39;;&#xA;    document.getElementById(&#39;error-state&#39;).style.display = &#39;block&#39;;&#xA;}&#xA;&lt;/script&gt;</description>
    </item>
  </channel>
</rss>
