parent
2d84b9056a
commit
a1cca9205f
322 changed files with 1 additions and 30 deletions
10
blog/2026-04-13-connectivity.mdx
Normal file
10
blog/2026-04-13-connectivity.mdx
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
slug: butter-box-connectivity
|
||||
title: Butter Box Connectivity
|
||||
authors: [irl]
|
||||
tags: [radio,research]
|
||||
---
|
||||
|
||||
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.
|
||||
|
||||
[Read the full post on the SR2 blog](https://www.sr2.uk/posts/2026-butter-box-connectivity)
|
||||
72
blog/2026-04-22-contentpack-podcast.mdx
Normal file
72
blog/2026-04-22-contentpack-podcast.mdx
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
---
|
||||
slug: contentpack-podcast
|
||||
title: 📦 Content Pack - Podcast Delivery Without Internet
|
||||
authors: [nxf99]
|
||||
tags: [contentpack]
|
||||
---
|
||||
|
||||
We have released a [small, self-contained sample podcast content pack](https://guardianproject.dev/butter/contentpack-sample-podcast), built on a webpage and RSS feed from [Guardian Project](https://guardianproject.info/podcast). 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.
|
||||
|
||||
[**DOWNLOAD SAMPLE PODCAST CONTENTPACK**](https://guardianproject.dev/butter/contentpack-sample-podcast/releases/tag/0.0.2)
|
||||
|
||||
## What's inside
|
||||
|
||||
- **`index.html`** : A simple, styled landing page that lists each episode with inline audio playback.
|
||||
- **`podcast.xml`** : An RSS 2.0 feed with iTunes podcast extensions, suitable for submission to podcast directories and use in podcast players.
|
||||
- **`posts/*.md`** : Per-episode show notes in Markdown (YAML frontmatter holds the episode metadata).
|
||||
- **`posts/*.mp3`** : The episode audio files, colocated with their show notes.
|
||||
- **`build.sh`** : Regenerates `index.html` and `podcast.xml` from the contents of `posts/`.
|
||||
|
||||
{/* truncate */}
|
||||
|
||||
## Using it
|
||||
|
||||
Because everything in `index.html` is relative-linked, you can serve this site from a folder on a USB drive plugged into a ButterBox device.
|
||||
|
||||
To subscribe in a podcast client, point it at the hosted URL of `podcast.xml`.
|
||||
|
||||
## Building `index.html` and `podcast.xml`
|
||||
|
||||
Both output files are generated from the markdown posts in `posts/` by `build.sh`. Run the script any time you add, remove, or edit a post:
|
||||
|
||||
```sh
|
||||
./build.sh <baseURL>
|
||||
```
|
||||
|
||||
The single required argument is the **absolute URL prefix where the mp3 files will be served**. It is only used for the `<enclosure url="...">` entries in `podcast.xml`, 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 `<link>`, the `<audio>` players in `index.html`, and the link to the feed itself) stays relative, so you can still move the whole bundle around and serve it from any path.
|
||||
|
||||
### Example
|
||||
|
||||
If the files will be served from a USB drive called `usb-butter` plugged into a ButterBox, inside a folder named `engardepodcast`, run:
|
||||
|
||||
```sh
|
||||
./build.sh http://butterbox.local/serve_file/media/usb-butter/engardepodcast/
|
||||
```
|
||||
|
||||
Note that `butterbox.local` in the URL must match the configured hostname of your ButterBox. `butterbox.local` is the default, but if you have changed yours to, for example, `someotherbox.local`, use that hostname instead.
|
||||
|
||||
The script will produce `podcast.xml` with enclosures like:
|
||||
|
||||
```
|
||||
http://butterbox.local/serve_file/media/usb-butter/engardepodcast/posts/ProofModeCaravan-English-Feb2024.mp3
|
||||
```
|
||||
|
||||
and an `index.html` whose audio elements still use the relative `posts/<file>.mp3` path.
|
||||
|
||||
### How it works
|
||||
|
||||
For each `posts/*.md` file (sorted newest-first by filename date prefix), the script:
|
||||
|
||||
1. Parses the YAML frontmatter (`title`, `date`, `description`, `file`, `voices`, `keywords`, `duration`/`length`, `explicit`).
|
||||
2. Looks up the referenced mp3 in `posts/` and reads its real byte size with `stat` for the RSS `length` attribute.
|
||||
3. Picks whichever of the `duration`/`length` frontmatter fields actually looks like `HH:MM[:SS]` for `<itunes:duration>` (the two fields are used inconsistently across the sample posts).
|
||||
4. Normalizes the `date` field into an RFC 822 `<pubDate>`.
|
||||
5. Emits one `<item>` block into `podcast.xml` and one `<article class="episode">` block into `index.html`.
|
||||
|
||||
Adding a new episode is just a matter of dropping a new `YYYY-MM-DD-slug.md` file and its `.mp3` into `posts/` and re-running `build.sh`.
|
||||
|
||||
## License
|
||||
|
||||
All content in this repository (audio, show notes, webpage, and feed) is released under [Creative Commons Zero (CC0 1.0)](https://creativecommons.org/publicdomain/zero/1.0/). You may copy, modify, distribute, and use the material for any purpose, including commercial, without asking permission.
|
||||
|
||||
|
||||
25
blog/2026-04-22-contentpack-webxdc.mdx
Normal file
25
blog/2026-04-22-contentpack-webxdc.mdx
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
---
|
||||
slug: contentpack-webxdc
|
||||
title: 📦 Content Pack - WebXDC Offline Apps
|
||||
authors: [nxf99]
|
||||
tags: [contentpack]
|
||||
---
|
||||
|
||||
[WebXDC apps](https://webxdc.org/) are marketed as "Secure mini apps for chats". They are supported by a variety of secure messagings apps, but primarily [Delta Chat](https://delta.chat/en/). 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.
|
||||
|
||||
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.
|
||||
|
||||
[**DOWNLOAD WEBXDC CONTENTPACK**](https://guardianproject.dev/butter/contentpack-sample-webxdc)
|
||||
|
||||
{/* truncate */}
|
||||
|
||||
## How to Use
|
||||
|
||||
To use this content pack:
|
||||
|
||||
- Copy this folder onto a USB drive.
|
||||
- Plug the USB drive into any ButterBox device.
|
||||
- Access the content through the "Files" option on the ButterBox.
|
||||
- Download any .xdc app file you would like to try.
|
||||
- Share and run the downloaded app in any DeltaChat message.
|
||||
|
||||
12
blog/2026-04-23-portal-improvements.mdx
Normal file
12
blog/2026-04-23-portal-improvements.mdx
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
slug: portal-improvements
|
||||
title: Butter Box Portal Improvements
|
||||
authors: [ana]
|
||||
tags: [development,portal]
|
||||
---
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
[Read the full post on the SR2 blog](https://www.sr2.uk/posts/2026-butter-box-portal/)
|
||||
29
blog/authors.yml
Normal file
29
blog/authors.yml
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
nxf99:
|
||||
name: Nathan
|
||||
title: Director, Guardian Project
|
||||
url: https://nathan.freitas.net
|
||||
image_url: https://avatars.githubusercontent.com/u/30851?v=4
|
||||
page: true
|
||||
socials:
|
||||
github: n8fr8
|
||||
newsletter: https://nathan.freitas.net
|
||||
|
||||
fabby:
|
||||
name: Fabby
|
||||
title: Community Lead
|
||||
image_url: https://avatars.githubusercontent.com/u/30851?v=4
|
||||
|
||||
trob:
|
||||
name: Tiff
|
||||
title: Project Coordinator
|
||||
image_url: https://avatars.githubusercontent.com/u/30851?v=4
|
||||
|
||||
irl:
|
||||
name: Iain
|
||||
title: Radio Researcher
|
||||
image_url: https://www.sr2.uk/team/images/irl.jpg
|
||||
|
||||
ana:
|
||||
name: Ana
|
||||
title: Lead Developer
|
||||
image_url: https://www.sr2.uk/team/images/ana.jpg
|
||||
19
blog/tags.yml
Normal file
19
blog/tags.yml
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
facebook:
|
||||
label: Facebook
|
||||
permalink: /facebook
|
||||
description: Facebook tag description
|
||||
|
||||
hello:
|
||||
label: Hello
|
||||
permalink: /hello
|
||||
description: Hello tag description
|
||||
|
||||
docusaurus:
|
||||
label: Docusaurus
|
||||
permalink: /docusaurus
|
||||
description: Docusaurus tag description
|
||||
|
||||
hola:
|
||||
label: Hola
|
||||
permalink: /hola
|
||||
description: Hola tag description
|
||||
Loading…
Add table
Add a link
Reference in a new issue