<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://likebutter.app/blog</id>
    <title>Butter | Life without internet made smoother. Blog</title>
    <updated>2026-04-23T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://likebutter.app/blog"/>
    <subtitle>Butter | Life without internet made smoother. Blog</subtitle>
    <icon>https://likebutter.app/img/butter-favicon-120.png</icon>
    <entry>
        <title type="html"><![CDATA[Butter Box Portal Improvements]]></title>
        <id>https://likebutter.app/blog/portal-improvements</id>
        <link href="https://likebutter.app/blog/portal-improvements"/>
        <updated>2026-04-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[As part of our latest development project with the Guardian Project team, we have re-engineered the Butter Box portal interface. This post describes the design choices and improvements within the new portal.]]></summary>
        <content type="html"><![CDATA[<p>As part of our latest development project with the Guardian Project team, we have re-engineered the Butter Box portal interface. This post describes the design choices and improvements within the new portal.</p>
<p>Previously, the interface was a static site built with Jekyll, which offered no customisation options and was ill-suited for the portal’s dynamic requirements. It has now been replaced with a Python Flask application, a lightweight framework that allows developers to include only the necessary libraries, such as for localisation, minimising the application’s footprint.</p>
<p><a href="https://www.sr2.uk/posts/2026-butter-box-portal/" target="_blank" rel="noopener noreferrer" class="">Read the full post on the SR2 blog</a></p>]]></content>
        <author>
            <name>Ana</name>
        </author>
        <category label="development" term="development"/>
        <category label="portal" term="portal"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[📦 Content Pack - Podcast Delivery Without Internet]]></title>
        <id>https://likebutter.app/blog/contentpack-podcast</id>
        <link href="https://likebutter.app/blog/contentpack-podcast"/>
        <updated>2026-04-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We have released a small, self-contained sample podcast content pack, built on a webpage and RSS feed from Guardian Project. This repository is intended as an example "content pack": a minimal, portable bundle of everything needed to host and distribute a podcast, including episode audio, show notes, a landing page, and a standards-compliant feed.]]></summary>
        <content type="html"><![CDATA[<p>We have released a <a href="https://guardianproject.dev/butter/contentpack-sample-podcast" target="_blank" rel="noopener noreferrer" class="">small, self-contained sample podcast content pack</a>, built on a webpage and RSS feed from <a href="https://guardianproject.info/podcast" target="_blank" rel="noopener noreferrer" class="">Guardian Project</a>. This repository is intended as an example "content pack": a minimal, portable bundle of everything needed to host and distribute a podcast, including episode audio, show notes, a landing page, and a standards-compliant feed.</p>
<p><a href="https://guardianproject.dev/butter/contentpack-sample-podcast/releases/tag/0.0.2" target="_blank" rel="noopener noreferrer" class=""><strong>DOWNLOAD SAMPLE PODCAST CONTENTPACK</strong></a></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-inside">What's inside<a href="https://likebutter.app/blog/contentpack-podcast#whats-inside" class="hash-link" aria-label="Direct link to What's inside" title="Direct link to What's inside" translate="no">​</a></h2>
<ul>
<li class=""><strong><code>index.html</code></strong> : A simple, styled landing page that lists each episode with inline audio playback.</li>
<li class=""><strong><code>podcast.xml</code></strong> : An RSS 2.0 feed with iTunes podcast extensions, suitable for submission to podcast directories and use in podcast players.</li>
<li class=""><strong><code>posts/*.md</code></strong> : Per-episode show notes in Markdown (YAML frontmatter holds the episode metadata).</li>
<li class=""><strong><code>posts/*.mp3</code></strong> : The episode audio files, colocated with their show notes.</li>
<li class=""><strong><code>build.sh</code></strong> : Regenerates <code>index.html</code> and <code>podcast.xml</code> from the contents of <code>posts/</code>.</li>
</ul>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="using-it">Using it<a href="https://likebutter.app/blog/contentpack-podcast#using-it" class="hash-link" aria-label="Direct link to Using it" title="Direct link to Using it" translate="no">​</a></h2>
<p>Because everything in <code>index.html</code> is relative-linked, you can serve this site from a folder on a USB drive plugged into a ButterBox device.</p>
<p>To subscribe in a podcast client, point it at the hosted URL of <code>podcast.xml</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="building-indexhtml-and-podcastxml">Building <code>index.html</code> and <code>podcast.xml</code><a href="https://likebutter.app/blog/contentpack-podcast#building-indexhtml-and-podcastxml" class="hash-link" aria-label="Direct link to building-indexhtml-and-podcastxml" title="Direct link to building-indexhtml-and-podcastxml" translate="no">​</a></h2>
<p>Both output files are generated from the markdown posts in <code>posts/</code> by <code>build.sh</code>. Run the script any time you add, remove, or edit a post:</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">./build.sh &lt;baseURL&gt;</span><br></div></code></pre></div></div>
<p>The single required argument is the <strong>absolute URL prefix where the mp3 files will be served</strong>. It is only used for the <code>&lt;enclosure url="..."&gt;</code> entries in <code>podcast.xml</code>, because RSS enclosures must be absolute URLs so podcast clients can download them without knowing where the feed lives. Everything else in the generated files (the RSS <code>&lt;link&gt;</code>, the <code>&lt;audio&gt;</code> players in <code>index.html</code>, and the link to the feed itself) stays relative, so you can still move the whole bundle around and serve it from any path.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="example">Example<a href="https://likebutter.app/blog/contentpack-podcast#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example" translate="no">​</a></h3>
<p>If the files will be served from a USB drive called <code>usb-butter</code> plugged into a ButterBox, inside a folder named <code>engardepodcast</code>, run:</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">./build.sh http://butterbox.local/serve_file/media/usb-butter/engardepodcast/</span><br></div></code></pre></div></div>
<p>Note that <code>butterbox.local</code> in the URL must match the configured hostname of your ButterBox. <code>butterbox.local</code> is the default, but if you have changed yours to, for example, <code>someotherbox.local</code>, use that hostname instead.</p>
<p>The script will produce <code>podcast.xml</code> with enclosures like:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">http://butterbox.local/serve_file/media/usb-butter/engardepodcast/posts/ProofModeCaravan-English-Feb2024.mp3</span><br></div></code></pre></div></div>
<p>and an <code>index.html</code> whose audio elements still use the relative <code>posts/&lt;file&gt;.mp3</code> path.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-it-works">How it works<a href="https://likebutter.app/blog/contentpack-podcast#how-it-works" class="hash-link" aria-label="Direct link to How it works" title="Direct link to How it works" translate="no">​</a></h3>
<p>For each <code>posts/*.md</code> file (sorted newest-first by filename date prefix), the script:</p>
<ol>
<li class="">Parses the YAML frontmatter (<code>title</code>, <code>date</code>, <code>description</code>, <code>file</code>, <code>voices</code>, <code>keywords</code>, <code>duration</code>/<code>length</code>, <code>explicit</code>).</li>
<li class="">Looks up the referenced mp3 in <code>posts/</code> and reads its real byte size with <code>stat</code> for the RSS <code>length</code> attribute.</li>
<li class="">Picks whichever of the <code>duration</code>/<code>length</code> frontmatter fields actually looks like <code>HH:MM[:SS]</code> for <code>&lt;itunes:duration&gt;</code> (the two fields are used inconsistently across the sample posts).</li>
<li class="">Normalizes the <code>date</code> field into an RFC 822 <code>&lt;pubDate&gt;</code>.</li>
<li class="">Emits one <code>&lt;item&gt;</code> block into <code>podcast.xml</code> and one <code>&lt;article class="episode"&gt;</code> block into <code>index.html</code>.</li>
</ol>
<p>Adding a new episode is just a matter of dropping a new <code>YYYY-MM-DD-slug.md</code> file and its <code>.mp3</code> into <code>posts/</code> and re-running <code>build.sh</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="license">License<a href="https://likebutter.app/blog/contentpack-podcast#license" class="hash-link" aria-label="Direct link to License" title="Direct link to License" translate="no">​</a></h2>
<p>All content in this repository (audio, show notes, webpage, and feed) is released under <a href="https://creativecommons.org/publicdomain/zero/1.0/" target="_blank" rel="noopener noreferrer" class="">Creative Commons Zero (CC0 1.0)</a>. You may copy, modify, distribute, and use the material for any purpose, including commercial, without asking permission.</p>]]></content>
        <author>
            <name>Nathan</name>
            <uri>https://nathan.freitas.net</uri>
        </author>
        <category label="contentpack" term="contentpack"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[📦 Content Pack - WebXDC Offline Apps]]></title>
        <id>https://likebutter.app/blog/contentpack-webxdc</id>
        <link href="https://likebutter.app/blog/contentpack-webxdc"/>
        <updated>2026-04-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[WebXDC apps are marketed as "Secure mini apps for chats". They are supported by a variety of secure messagings apps, but primarily Delta Chat. As we recently added support to ButterBox for offline communication via DeltaChat and built-in ChatMail server, we though it made sense to also have a content pack for distributing an excellent collection of offline ready apps you can run inside your groups chats.]]></summary>
        <content type="html"><![CDATA[<p><a href="https://webxdc.org/" target="_blank" rel="noopener noreferrer" class="">WebXDC apps</a> are marketed as "Secure mini apps for chats". They are supported by a variety of secure messagings apps, but primarily <a href="https://delta.chat/en/" target="_blank" rel="noopener noreferrer" class="">Delta Chat</a>. As we recently added support to ButterBox for offline communication via DeltaChat and built-in ChatMail server, we though it made sense to also have a content pack for distributing an excellent collection of offline ready apps you can run inside your groups chats.</p>
<p>The content in this pack comes from webxdc.org and apps.testrun.org. All rights and permissions to the content are as stated on those sites and in their respective source code repositories.</p>
<p><a href="https://guardianproject.dev/butter/contentpack-sample-webxdc" target="_blank" rel="noopener noreferrer" class=""><strong>DOWNLOAD WEBXDC CONTENTPACK</strong></a></p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-to-use">How to Use<a href="https://likebutter.app/blog/contentpack-webxdc#how-to-use" class="hash-link" aria-label="Direct link to How to Use" title="Direct link to How to Use" translate="no">​</a></h2>
<p>To use this content pack:</p>
<ul>
<li class="">Copy this folder onto a USB drive.</li>
<li class="">Plug the USB drive into any ButterBox device.</li>
<li class="">Access the content through the "Files" option on the ButterBox.</li>
<li class="">Download any .xdc app file you would like to try.</li>
<li class="">Share and run the downloaded app in any DeltaChat message.</li>
</ul>]]></content>
        <author>
            <name>Nathan</name>
            <uri>https://nathan.freitas.net</uri>
        </author>
        <category label="contentpack" term="contentpack"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Butter Box Connectivity]]></title>
        <id>https://likebutter.app/blog/butter-box-connectivity</id>
        <link href="https://likebutter.app/blog/butter-box-connectivity"/>
        <updated>2026-04-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We have just wrapped up a project with the Guardian Project team exploring options for connectivity to allow for updates to software and content on the Butter Box and for communications between users of multiple Butter Boxes. We have explored two technologies: LoRA and WiFi HaLow.]]></summary>
        <content type="html"><![CDATA[<p>We have just wrapped up a project with the Guardian Project team exploring options for connectivity to allow for updates to software and content on the Butter Box and for communications between users of multiple Butter Boxes. We have explored two technologies: LoRA and WiFi HaLow.</p>
<p><a href="https://www.sr2.uk/posts/2026-butter-box-connectivity" target="_blank" rel="noopener noreferrer" class="">Read the full post on the SR2 blog</a></p>]]></content>
        <author>
            <name>Iain</name>
        </author>
        <category label="radio" term="radio"/>
        <category label="research" term="research"/>
    </entry>
</feed>