diff --git a/Adding Flatpak Support to Patchwork.md b/Adding Flatpak Support to Patchwork.md
deleted file mode 100644
index cc586cd..0000000
--- a/Adding Flatpak Support to Patchwork.md
+++ /dev/null
@@ -1,858 +0,0 @@
-# Adding Flatpak Support to Patchwork
-
-*Created: 12/08/2026, 22:15:24*
-
----
-
-**You**
-
-how hard is it to add flatpak support to
-
-https://github.com/soapdog/patchwork
-
----
-
-**Assistant**
-
-It’s **moderately easy** to add Flatpak support, but there are a few gotchas because this is an Electron app with native SSB modules and a non-standard packaging setup.
-
-## What I found about the project
-
-- It’s an Electron 41 app built with `electron-builder` 26.
-- Linux builds already exist: `deb`, `tar.gz`, and `AppImage` for `x64` and `arm64`.
-- ASAR is **disabled** because the app relies on Node.js code execution and the maintainer couldn’t get a packaged ASAR to work.
-- It already has `.desktop` and AppData files under `assets/`, plus a 512×512 icon.
-- It uses many native-ish SSB modules (`ssb-db`, `ssb-blobs`, `secret-stack`, etc.) and GitHub dependency overrides.
-
-## How hard is Flatpak?
-
-| Factor | Impact |
-|--------|--------|
-| Electron base app exists (`org.electronjs.Electron2.BaseApp`) | Easy |
-| Native modules / LevelDB / sodium / libsodium | Medium — may need to compile inside the Flatpak or bundle prebuilt binaries |
-| ASAR disabled | Medium — Flatpak expects a normal app tree, so this is actually fine, but the app bundle is larger |
-| Existing `.desktop` + AppData + icon | Easy |
-| Already builds AppImage/tar.gz | Easy — you can reuse the unpackaged build |
-| SSB networking (LAN, DHT, pub invites) | Medium — needs `--share=network`, `--device=all` maybe, and careful portal permissions |
-
-## Two practical approaches
-
-### 1. Wrap the existing Linux build (easiest)
-Build the `tar.gz` or AppImage, then create a Flatpak manifest that extracts it and runs the Electron binary. This avoids rebuilding native modules in the Flatpak SDK.
-
-```yaml
-# nz.scuttlebutt.Patchwork.yaml
-app-id: nz.scuttlebutt.Patchwork
-runtime: org.freedesktop.Platform
-runtime-version: '24.08'
-sdk: org.freedesktop.Sdk
-base: org.electronjs.Electron2.BaseApp
-base-version: '24.08'
-command: patchwork
-finish-args:
- - --share=ipc
- - --socket=x11
- - --socket=wayland
- - --socket=pulseaudio
- - --share=network
- - --device=all
- - --filesystem=xdg-download
- - --talk-name=org.freedesktop.Notifications
-modules:
- - name: patchwork
- buildsystem: simple
- sources:
- - type: archive
- url: https://github.com/soapdog/patchwork/releases/download/v5.4.0/Patchwork-5.4.0-linux-x64.tar.gz
- sha256: ...
- build-commands:
- - cp -r . /app/Patchwork
- - install -Dm644 assets/nz.scuttlebutt.Patchwork.desktop /app/share/applications/$FLATPAK_ID.desktop
- - install -Dm644 assets/nz.scuttlebutt.Patchwork.appdata.xml /app/share/metainfo/$FLATPAK_ID.metainfo.xml
- - install -Dm644 build/512x512.png /app/share/icons/hicolor/512x512/apps/$FLATPAK_ID.png
- - install -Dm755 patchwork.sh /app/bin/patchwork
-```
-
-### 2. Build from source inside Flatpak (cleaner, harder)
-Use the Node SDK extension and run `npm install` + `npm run dist:linux` inside the Flatpak builder. This is harder because:
-
-- Native modules may need `node-gyp` and Python headers.
-- GitHub tarballs as dependencies sometimes break offline builds.
-- The build is slow and may need architecture-specific tweaks.
-
-## Main challenges
-
-1. **Native modules** — `ssb-db` and friends likely use LevelDB, `sodium-native`, or `libsodium`. Prebuilt binaries may not match the Flatpak runtime. You may need to ship them or build them.
-2. **Sandboxed networking** — SSB uses multicast LAN discovery, DHT, and direct TCP/UDP. `--share=network` covers most, but LAN discovery can be tricky inside Flatpak.
-3. **Data directory** — SSB stores its identity and logs in `~/.ssb`. In Flatpak, `HOME` is sandboxed to `~/.var/app/nz.scuttlebutt.Patchwork`. This is usually fine, but users migrating from a non-Flatpak install may need to copy data.
-4. **ASAR disabled** — not a blocker, but the Flatpak bundle will be large.
-
-## Verdict
-
-If you wrap the existing `tar.gz` release, **a basic Flatpak can be done in a few hours**. Making it Flathub-ready and fully sandboxed with proper portals may take a day or two, mostly around testing native modules and network permissions. Building from source inside Flatpak is more involved and could take several days if native dependencies misbehave.
-
-If you want, I can write a complete `flatpak-builder` manifest and a build script for the release-wrapper approach.
-
----
-
-**You**
-
-do it
-
----
-
-**Assistant**
-
-Thinking
-
-The user wants a complete Flatpak manifest and build script. I have enough info now:
-
-- Product name is "ponchowonky" in package.json, but the app-id is nz.scuttlebutt.Patchwork
-- Version 5.4.0
-- Linux assets are AppImage only (no tar.gz)
-- Desktop and AppData files exist
-- Icon is assets/icon.png or assets/512x512.png
-
-Since only AppImage is available, I need to extract the AppImage. AppImages are ISO 9660 images with a squashfs or iso9660 payload. The standard way to extract an AppImage is:
-- `./Patchwork.AppImage --appimage-extract` (but this requires FUSE which may not work in Flatpak builder)
-- Or use `appimagetool` / `unsquashfs`
-
-Actually, the easiest way in a Flatpak manifest is to use the `type: file` or `type: archive` and extract with `unsquashfs` or use the AppImage's own extraction.
-
-Wait, AppImages can be extracted by running them with `--appimage-extract` but they need to be executable and may need libfuse. In Flatpak builder, we can use `unsquashfs` if the AppImage uses squashfs.
-
-Modern AppImages (type 2) use squashfs. We can extract with:
-```
-chmod +x *.AppImage
-./ponchowonky-5.4.0-linux-x86_64.AppImage --appimage-extract
-```
-
-But this might fail without FUSE. However, `--appimage-extract` doesn't use FUSE, it extracts directly.
-
-Alternatively, we can mount it or use `unsquashfs`.
-
-Let me create a robust manifest that:
-1. Downloads the AppImage
-2. Extracts it
-3. Installs the desktop, appdata, and icon
-4. Creates a wrapper script
-
-I should also provide a build script and instructions.
-
-Let me also check the desktop file content. The librarian had a parsing error on the desktop file. Let me try to get it via text_editor or just assume it has the standard fields. Actually, I can use the raw URL directly.
-
-Wait, I have the appdata content. It uses `nz.scuttlebutt.Patchwork.desktop` and `assets/icon.png`. The desktop file likely has `Exec=ponchowonky` or similar.
-
-Since I can't read the desktop file easily, I'll create a Flatpak manifest that renames the installed desktop file to match the app-id, and I'll create a wrapper script.
-
-Actually, the AppImage itself contains the desktop file and icon. When we extract the AppImage, we get a `squashfs-root` directory with the app. The electron-builder AppImage typically contains:
-- `usr/bin/ponchowonky` (the actual binary)
-- `usr/share/applications/ponchowonky.desktop`
-- `usr/share/icons/...`
-- `AppRun`
-
-But it's easier to just run the extracted AppImage's AppRun or the electron binary directly.
-
-For Flatpak, the best approach is:
-1. Extract AppImage
-2. Copy contents to /app
-3. Create launcher script
-
-Let me write this. I'll create:
-- `nz.scuttlebutt.Patchwork.yaml` - the manifest
-- `build.sh` - helper script
-- `README.md` - instructions
-
-I need to handle both x86_64 and arm64. Flatpak manifests can use `only-arches` for sources.
-
-For the AppImage extraction, I'll use the `--appimage-extract` method. This is reliable in the build environment.
-
-Let me draft the manifest:
-
-```yaml
-app-id: nz.scuttlebutt.Patchwork
-runtime: org.freedesktop.Platform
-runtime-version: '24.08'
-sdk: org.freedesktop.Sdk
-base: org.electronjs.Electron2.BaseApp
-base-version: '24.08'
-command: patchwork
-finish-args:
- - --share=ipc
- - --socket=x11
- - --socket=wayland
- - --socket=pulseaudio
- - --share=network
- - --device=all
- - --filesystem=xdg-download
- - --talk-name=org.freedesktop.Notifications
- - --own-name=org.kde.* # for tray? Maybe not needed
-modules:
- - name: patchwork
- buildsystem: simple
- build-commands:
- - chmod +x ponchowonky-*.AppImage
- - ./ponchowonky-5.4.0-linux-x86_64.AppImage --appimage-extract || ./ponchowonky-5.4.0-linux-arm64.AppImage --appimage-extract
- - mv squashfs-root /app/Patchwork
- - install -Dm755 patchwork.sh /app/bin/patchwork
- - install -Dm644 /app/Patchwork/usr/share/applications/ponchowonky.desktop /app/share/applications/nz.scuttlebutt.Patchwork.desktop
- - desktop-file-edit --set-key=Exec --set-value=patchwork /app/share/applications/nz.scuttlebutt.Patchwork.desktop
- - install -Dm644 assets/nz.scuttlebutt.Patchwork.appdata.xml /app/share/metainfo/nz.scuttlebutt.Patchwork.metainfo.xml
- - install -Dm644 /app/Patchwork/usr/share/icons/hicolor/512x512/apps/ponchowonky.png /app/share/icons/hicolor/512x512/apps/nz.scuttlebutt.Patchwork.png
- sources:
- - type: file
- url: https://github.com/soapdog/patchwork/releases/download/v5.4.0/ponchowonky-5.4.0-linux-x86_64.AppImage
- sha256: TBD
- only-arches: [x86_64]
- - type: file
- url: https://github.com/soapdog/patchwork/releases/download/v5.4.0/ponchowonky-5.4.0-linux-arm64.AppImage
- sha256: TBD
- only-arches: [aarch64]
- - type: file
- path: patchwork.sh
- - type: file
- path: assets/nz.scuttlebutt.Patchwork.appdata.xml
-```
-
-Wait, the appdata file from the repo references old URLs and may need updating for Flathub. But for local builds it's fine.
-
-The wrapper script:
-```bash
-#!/bin/sh
-exec /app/Patchwork/AppRun "$@"
-```
-
-Or better, run the electron binary directly:
-```bash
-#!/bin/sh
-exec /app/Patchwork/ponchowonky "$@"
-```
-
-Actually, AppRun sets up environment variables. It's better to use AppRun.
-
-But AppRun might try to do AppImage-specific things. Let me check what electron-builder AppImage AppRun does. It typically sets up the environment and execs the electron binary. It should work fine.
-
-Actually, a safer approach is to run the electron binary directly:
-```bash
-#!/bin/sh
-exec /app/Patchwork/ponchowonky --no-sandbox "$@"
-```
-
-But `--no-sandbox` is needed because Flatpak's sandbox doesn't allow Chromium's setuid sandbox. However, Electron in Flatpak usually uses the zypak helper from the BaseApp to handle the sandbox. The BaseApp provides `zypak` which rewrites the sandbox.
-
-With `org.electronjs.Electron2.BaseApp`, we should use `zypak` to launch the app. The standard wrapper is:
-
-```bash
-#!/bin/sh
-exec zypak-wrapper /app/Patchwork/ponchowonky "$@"
-```
-
-But wait, the extracted AppImage might have its own Chromium sandbox binary. The BaseApp's `zypak-wrapper` handles this.
-
-Actually, the modern approach for Electron Flatpak is to use `zypak-wrapper` from the BaseApp. Let me use that.
-
-Hmm, but the AppImage already contains a bundled Electron. The `zypak-wrapper` will intercept the sandbox launch.
-
-Let me also consider that the extracted AppImage binary might be called `ponchowonky` (matching productName). The path would be `/app/Patchwork/ponchowonky` or `/app/Patchwork/usr/bin/ponchowonky`.
-
-In electron-builder AppImages, the main binary is at the root of squashfs-root, named after the productName. There's also a `usr/bin/` structure.
-
-Let me write the manifest to be robust.
-
-Actually, I should note that I don't have the exact sha256 hashes or the desktop file contents. I'll put `TBD` or `REPLACE_ME` placeholders and instruct the user to compute them.
-
-Also, I should update the AppData file to be Flathub-compliant. The existing one has some issues:
-- It uses old screenshot URLs from ssbc/patchwork
-- It might lack release info
-- It might have content rating issues
-
-For Flathub, the appdata should:
-- Have proper `` section
-- Use `` instead of `` (newer spec)
-- Have OARS content rating
-- Have valid screenshots
-
-But the user just asked for Flatpak support, not necessarily Flathub. I'll provide a manifest that works locally and can be adapted for Flathub.
-
-Let me also check if the project has a 512x512 icon. The appdata mentions `assets/icon.png`. The repo tree mentioned `assets/512x512.png`. I'll use the icon from the extracted AppImage.
-
-Let me create the files now. I'll provide them in a code block as a complete deliverable.
-
-Actually, I should also create a `flathub.json` if needed. For Flathub, Electron apps often need:
-```json
-{
- "only-arches": ["x86_64", "aarch64"]
-}
-```
-
-But that's optional.
-
-Let me also think about permissions. SSB needs:
-- Network (obviously)
-- Maybe raw sockets? No, just TCP/UDP
-- LAN discovery uses multicast UDP. This works with `--share=network`.
-- File system access for downloads and maybe importing media. `xdg-download` is enough for downloads. For importing, users might need more, but we can use portals.
-
-I think `--share=network`, `--device=all` (for webcam? not sure if Patchwork uses it), `--socket=x11`, `--socket=wayland`, `--socket=pulseaudio`, `--filesystem=xdg-download` are sufficient.
-
-Actually, `--device=all` might be needed for camera if Patchwork supports image capture. But it's probably not needed. I'll include it as optional comment.
-
-Also, SSB stores data in `~/.ssb`. In Flatpak, this becomes `~/.var/app/nz.scuttlebutt.Patchwork/.ssb` automatically because HOME is set to that directory. No extra permission needed.
-
-Let me write the complete deliverable now.
-
-One more thing: the AppImage extraction. The `--appimage-extract` flag is built into the AppImage runtime. It extracts to `squashfs-root/`. This works without FUSE.
-
-But there's a catch: AppImages have a magic bytes offset. The first few bytes are the ELF runtime. The `--appimage-extract` option is parsed by the runtime. So running `./AppImage --appimage-extract` should work.
-
-However, in some build environments, the AppImage might not be executable or might need specific libraries. But since it's a self-contained runtime, it usually works.
-
-Alternative: use `unsquashfs` directly. But finding the offset is tricky. `--appimage-extract` is easier.
-
-I'll write the build commands to extract the AppImage for the current architecture.
-
-Wait, with `only-arches`, only one AppImage file will be downloaded. So I can do:
-```bash
-./ponchowonky-5.4.0-linux-$(uname -m).AppImage --appimage-extract
-```
-
-But `uname -m` returns `x86_64` or `aarch64`. The AppImage names use `x86_64` and `arm64`. So I need to map:
-- x86_64 -> x86_64
-- aarch64 -> arm64
-
-I can do:
-```bash
-case "$(uname -m)" in
- x86_64) ARCH=x86_64 ;;
- aarch64) ARCH=arm64 ;;
-esac
-./ponchowonky-5.4.0-linux-${ARCH}.AppImage --appimage-extract
-```
-
-This is robust.
-
-Now, the extracted directory is `squashfs-root`. Inside, there should be:
-- `AppRun` - the launcher script
-- `ponchowonky` - the main binary (symlink or actual)
-- `.DirIcon` - icon
-- `usr/share/` - desktop and icons
-
-I'll copy the whole thing to `/app/Patchwork`.
-
-Then create the launcher:
-```bash
-#!/bin/sh
-exec zypak-wrapper /app/Patchwork/AppRun "$@"
-```
-
-Wait, AppRun might do things that conflict with Flatpak. Let me think. AppRun from electron-builder typically:
-1. Sets `APPIMAGE`, `APPDIR`, `OWD` environment variables
-2. Sets `LD_LIBRARY_PATH` to include bundled libs
-3. Execs the main binary
-
-In Flatpak, we don't want `LD_LIBRARY_PATH` to override system libs. But the bundled libs are needed for the app. The AppRun script is specific to the AppImage. It might work, but could cause issues.
-
-Better approach: bypass AppRun and run the electron binary directly with zypak-wrapper.
-
-The electron binary in the extracted AppImage is typically at:
-- `squashfs-root/ponchowonky` (which is a shell script wrapper that sets up and runs the actual electron)
-- or `squashfs-root/usr/bin/ponchowonky`
-
-Actually, electron-builder creates a wrapper script at the root named after the product. This script sets up the environment and runs the electron binary from `usr/lib/ponchowonky/`.
-
-Let me just use the root `ponchowonky` script with `zypak-wrapper`. But the script might set `ELECTRON_DISABLE_SANDBOX` or other things.
-
-Actually, the safest for Flatpak is:
-```bash
-#!/bin/sh
-exec zypak-wrapper /app/Patchwork/ponchowonky "$@"
-```
-
-But we need to make sure the script is executable and works in the Flatpak environment.
-
-Alternatively, some Electron Flatpak manifests just run:
-```bash
-#!/bin/sh
-exec /app/Patchwork/ponchowonky --no-sandbox "$@"
-```
-
-But `--no-sandbox` disables Chromium sandbox entirely, which is less secure. Using `zypak-wrapper` is better.
-
-I'll provide the `zypak-wrapper` approach and mention `--no-sandbox` as a fallback.
-
-Now, the desktop file. The extracted AppImage has `usr/share/applications/ponchowonky.desktop`. I need to rename it to `nz.scuttlebutt.Patchwork.desktop` and update the Exec line. The `desktop-file-edit` tool is available in the SDK.
-
-The icon in the desktop file should also be updated to `nz.scuttlebutt.Patchwork`.
-
-For the icon, I'll copy from the extracted AppImage's icon directory.
-
-Let me also think about the AppData. The existing one references `nz.scuttlebutt.Patchwork.desktop` and old URLs. I should create an updated version for the Flatpak. But I can also just use the existing one and patch it.
-
-Actually, I'll provide a patched `nz.scuttlebutt.Patchwork.metainfo.xml` file that is Flathub-ready. This is more useful.
-
-Let me write the complete set of files.
-
-Files to provide:
-1. `nz.scuttlebutt.Patchwork.yaml` - manifest
-2. `patchwork.sh` - launcher wrapper
-3. `nz.scuttlebutt.Patchwork.metainfo.xml` - updated appdata
-4. `build.sh` - build helper
-5. `README.md` - instructions
-
-I'll put them all in one code block with file paths, or separate blocks. The user said "Provide code in one block whenever possible" but with multiple files, I think separate blocks with file paths are clearer. Or I can use a single markdown block with file separators.
-
-Actually, I'll provide them as separate code blocks with file names, which is standard.
-
-Let me also include the sha256 computation command in the README.
-
-One issue: the AppImage download URLs. I have them from the API:
-- x86_64: https://github.com/soapdog/patchwork/releases/download/v5.4.0/ponchowonky-5.4.0-linux-x86_64.AppImage
-- arm64: https://github.com/soapdog/patchwork/releases/download/v5.4.0/ponchowonky-5.4.0-linux-arm64.AppImage
-
-I'll use these.
-
-For the icon, I'll use the one from the AppImage. But I don't know the exact path. electron-builder typically installs icons at:
-- `usr/share/icons/hicolor/512x512/apps/ponchowonky.png`
-- or `usr/share/icons/hicolor/0x0/apps/ponchowonky.png`
-
-I'll use a wildcard or check both. Actually, I can use:
-```bash
-find /app/Patchwork/usr/share/icons -name "*.png" -exec install -Dm644 {} /app/share/icons/hicolor/512x512/apps/nz.scuttlebutt.Patchwork.png \;
-```
-
-But this might not preserve the hicolor structure. Better:
-```bash
-cp -r /app/Patchwork/usr/share/icons/hicolor/* /app/share/icons/hicolor/
-```
-
-Then rename the icon file. But the icon names are `ponchowonky.png`. I need to rename to `nz.scuttlebutt.Patchwork.png`.
-
-Actually, the desktop file's Icon key should match the installed icon name. So I'll:
-1. Copy all hicolor icons to `/app/share/icons/hicolor/`
-2. Rename the 512x512 one to `nz.scuttlebutt.Patchwork.png`
-3. Set the desktop file Icon to `nz.scuttlebutt.Patchwork`
-
-But what if the AppImage only has a 0x0 icon? electron-builder sometimes puts the icon in `0x0` directory. Let me handle that:
-```bash
-for size in 0x0 16x16 32x32 48x48 128x128 256x256 512x512; do
- if [ -f "/app/Patchwork/usr/share/icons/hicolor/${size}/apps/ponchowonky.png" ]; then
- install -Dm644 "/app/Patchwork/usr/share/icons/hicolor/${size}/apps/ponchowonky.png" \
- "/app/share/icons/hicolor/${size}/apps/nz.scuttlebutt.Patchwork.png"
- fi
-done
-```
-
-This is robust.
-
-For the desktop file, I need to find it:
-```bash
-install -Dm644 /app/Patchwork/usr/share/applications/ponchowonky.desktop /app/share/applications/nz.scuttlebutt.Patchwork.desktop
-desktop-file-edit --set-key=Exec --set-value=patchwork /app/share/applications/nz.scuttlebutt.Patchwork.desktop
-desktop-file-edit --set-key=Icon --set-value=nz.scuttlebutt.Patchwork /app/share/applications/nz.scuttlebutt.Patchwork.desktop
-desktop-file-edit --set-key=StartupWMClass --set-value=Ponchowonky /app/share/applications/nz.scuttlebutt.Patchwork.desktop
-```
-
-Wait, the WMClass might be `Ponchowonky` (productName capitalized). I should set it correctly. Actually, the desktop file from the AppImage already has the correct WMClass. I should only change Exec and Icon, and maybe Name. But the app-id is different from the product name.
-
-Actually, for Flatpak, the desktop file name must match the app-id. The Name can stay "Patchwork" or "Ponchowonky". The user might want it to be "Patchwork". I'll leave the original Name but update Exec and Icon.
-
-Now, the metainfo file. I'll create a Flathub-compliant one.
-
-Let me think about the content rating. Patchwork is a social network. It might have:
-- Social: intense (user-generated content)
-- No violence, etc.
-
-I'll use the OARS 1.1 content rating.
-
-For releases, I'll add the current version.
-
-Screenshots: I'll use the existing screenshot URL from the repo, but note it might be broken. Actually, for Flathub, screenshots must be hosted on a reliable CDN. The existing one uses raw.githubusercontent.com which is not ideal. But for local builds, it's fine.
-
-I'll provide a metainfo file and note that screenshots should be updated for Flathub.
-
-Now, let me write the actual files.
-
-Wait, I should also consider that the app-id `nz.scuttlebutt.Patchwork` needs to be controlled by the project. If soapdog doesn't own `scuttlebutt.nz`, this might be a problem for Flathub. But the existing appdata already uses this ID, so I'll keep it.
-
-Let me also think about the build environment. The user will run:
-```bash
-flatpak-builder --repo=repo build-dir nz.scuttlebutt.Patchwork.yaml
-```
-
-They need to install the runtime and base app first:
-```bash
-flatpak install flathub org.freedesktop.Platform//24.08 org.freedesktop.Sdk//24.08 org.electronjs.Electron2.BaseApp//24.08
-```
-
-I'll include this in the README.
-
-Now, let me also consider if we should build from source instead. The user asked "do it" after I said wrapping the release is easiest. So I'll provide the release-wrapper approach.
-
-But I should also mention that building from source is an alternative if they want a fully open-source Flatpak.
-
-OK, let me write the deliverable.
-
-One more thing: the AppImage extraction might fail in the Flatpak builder if the AppImage runtime needs specific libraries. To make it more robust, I can use `unsquashfs` from the SDK. The SDK includes `squashfs-tools`.
-
-Let me use `unsquashfs` approach. But I need to find the squashfs offset. The AppImage type 2 has the offset at a specific location. There's a tool `appimage-extract` or I can parse the ELF header.
-
-Actually, the simplest is still `--appimage-extract`. If that fails, we can fall back.
-
-Let me check: AppImage type 2 uses a static runtime that doesn't need external libs. It should work in any Linux environment. So `--appimage-extract` is fine.
-
-I'll use:
-```bash
-chmod +x ponchowonky-*.AppImage
-./ponchowonky-5.4.0-linux-${ARCH}.AppImage --appimage-extract
-```
-
-This extracts to `squashfs-root/`.
-
-OK, let me write the files now.
-
-Actually, I realize I should verify the exact binary name inside the AppImage. Since I don't have access to the AppImage contents, I'll make the wrapper script flexible. It can try multiple paths:
-
-```bash
-#!/bin/sh
-set -e
-
-if [ -x /app/Patchwork/ponchowonky ]; then
- BIN=/app/Patchwork/ponchowonky
-elif [ -x /app/Patchwork/usr/bin/ponchowonky ]; then
- BIN=/app/Patchwork/usr/bin/ponchowonky
-else
- echo "Patchwork binary not found" >&2
- exit 1
-fi
-
-exec zypak-wrapper "$BIN" "$@"
-```
-
-This is robust.
-
-Now, the manifest. I'll write it carefully.
-
-For the metainfo, I need to make sure it's valid. Let me draft:
-
-```xml
-
-
- nz.scuttlebutt.Patchwork
- nz.scuttlebutt.Patchwork.desktop
- CC0-1.0
- AGPL-3.0
- Patchwork
- A decentralized messaging and sharing app
-
-
Patchwork is a decentralized messaging and sharing app built on top of Secure Scuttlebutt (SSB).
-
-
-
-
Network chat feed
- https://raw.githubusercontent.com/soapdog/patchwork/master/screenshot.jpg
-
-
- https://www.scuttlebutt.nz/
- https://github.com/soapdog/patchwork/issues
-
- Secure Scuttlebutt Consortium
-
-
- intense
- intense
- intense
-
-
-
-
-
-```
-
-Wait, the current date is 2026-08-12. The release date might not be today. I should use a placeholder or the actual release date. Since I don't know the exact release date of v5.4.0, I'll use a placeholder `YYYY-MM-DD` and tell the user to update it.
-
-Actually, I can look it up but I've reached max research iterations. I'll use a placeholder.
-
-For the README, I'll include:
-1. Prerequisites
-2. How to compute sha256
-3. Build command
-4. Install command
-5. Testing
-6. Notes on permissions and data migration
-7. Flathub submission notes
-
-Let me also create a `build.sh` that computes sha256 and runs flatpak-builder. But computing sha256 requires downloading the files first. The user can do:
-
-```bash
-wget https://github.com/soapdog/patchwork/releases/download/v5.4.0/ponchowonky-5.4.0-linux-x86_64.AppImage
-sha256sum ponchowonky-5.4.0-linux-x86_64.AppImage
-```
-
-I'll provide this in the README.
-
-Actually, flatpak-builder can download and verify. The user just needs to put the correct sha256 in the manifest.
-
-OK, I think I have everything. Let me write the final response.
-
-I should also note that this is a release-wrapper Flatpak, not built from source. And it uses the AppImage because that's what the releases provide.
-
-Let me write the response with minimal explanation as requested.
-
-One more consideration: the product name in package.json is "ponchowonky" but the app is known as Patchwork. The AppImage is named `ponchowonky-...`. The desktop file and icons will use `ponchowonky`. I need to handle this naming mismatch in the manifest.
-
-OK, writing now.
-
-
-
-Here is a complete release-wrapper Flatpak setup. It extracts the upstream AppImage because that is what the project currently ships.
-
-## Files
-
-```yaml
-# nz.scuttlebutt.Patchwork.yaml
-app-id: nz.scuttlebutt.Patchwork
-runtime: org.freedesktop.Platform
-runtime-version: '24.08'
-sdk: org.freedesktop.Sdk
-base: org.electronjs.Electron2.BaseApp
-base-version: '24.08'
-command: patchwork
-
-finish-args:
- - --share=ipc
- - --socket=x11
- - --socket=wayland
- - --socket=pulseaudio
- - --share=network
- - --device=all
- - --filesystem=xdg-download
- - --talk-name=org.freedesktop.Notifications
-
-modules:
- - name: patchwork
- buildsystem: simple
- build-commands:
- - |
- case "$(uname -m)" in
- x86_64) ARCH=x86_64 ;;
- aarch64) ARCH=arm64 ;;
- *) echo "Unsupported architecture: $(uname -m)" >&2; exit 1 ;;
- esac
- chmod +x "ponchowonky-5.4.0-linux-${ARCH}.AppImage"
- "./ponchowonky-5.4.0-linux-${ARCH}.AppImage" --appimage-extract
- - mv squashfs-root /app/Patchwork
- - install -Dm755 patchwork.sh /app/bin/patchwork
- - |
- install -Dm644 /app/Patchwork/usr/share/applications/ponchowonky.desktop \
- /app/share/applications/nz.scuttlebutt.Patchwork.desktop
- desktop-file-edit --set-key=Exec --set-value=patchwork \
- /app/share/applications/nz.scuttlebutt.Patchwork.desktop
- desktop-file-edit --set-key=Icon --set-value=nz.scuttlebutt.Patchwork \
- /app/share/applications/nz.scuttlebutt.Patchwork.desktop
- - |
- for size in 0x0 16x16 24x24 32x32 48x48 64x64 128x128 256x256 512x512; do
- src="/app/Patchwork/usr/share/icons/hicolor/${size}/apps/ponchowonky.png"
- if [ -f "$src" ]; then
- install -Dm644 "$src" \
- "/app/share/icons/hicolor/${size}/apps/nz.scuttlebutt.Patchwork.png"
- fi
- done
- - install -Dm644 nz.scuttlebutt.Patchwork.metainfo.xml \
- /app/share/metainfo/nz.scuttlebutt.Patchwork.metainfo.xml
- sources:
- - type: file
- url: https://github.com/soapdog/patchwork/releases/download/v5.4.0/ponchowonky-5.4.0-linux-x86_64.AppImage
- sha256: REPLACE_WITH_SHA256_X86_64
- only-arches: [x86_64]
- - type: file
- url: https://github.com/soapdog/patchwork/releases/download/v5.4.0/ponchowonky-5.4.0-linux-arm64.AppImage
- sha256: REPLACE_WITH_SHA256_ARM64
- only-arches: [aarch64]
- - type: file
- path: patchwork.sh
- - type: file
- path: nz.scuttlebutt.Patchwork.metainfo.xml
-```
-
-```bash
-#!/bin/sh
-# patchwork.sh
-set -e
-
-if [ -x /app/Patchwork/ponchowonky ]; then
- BIN=/app/Patchwork/ponchowonky
-elif [ -x /app/Patchwork/usr/bin/ponchowonky ]; then
- BIN=/app/Patchwork/usr/bin/ponchowonky
-else
- echo "Patchwork binary not found" >&2
- exit 1
-fi
-
-exec zypak-wrapper "$BIN" "$@"
-```
-
-```xml
-
-
-
- nz.scuttlebutt.Patchwork
- nz.scuttlebutt.Patchwork.desktop
- CC0-1.0
- AGPL-3.0
- Patchwork
- A decentralized messaging and sharing app
-
-
Patchwork is a decentralized messaging and sharing app built on top of Secure Scuttlebutt (SSB).
-
-
-
-
Network chat feed
- https://raw.githubusercontent.com/soapdog/patchwork/master/screenshot.jpg
-
-
- https://www.scuttlebutt.nz/
- https://github.com/soapdog/patchwork/issues
-
- Secure Scuttlebutt Consortium
-
-
- intense
- intense
- intense
-
-
-
-
-
-```
-
-```bash
-#!/bin/bash
-# build.sh
-set -e
-
-# 1. Install dependencies
-flatpak install -y flathub \
- org.freedesktop.Platform//24.08 \
- org.freedesktop.Sdk//24.08 \
- org.electronjs.Electron2.BaseApp//24.08
-
-# 2. Compute SHA256 for the AppImages and update the manifest
-for arch in x86_64 arm64; do
- url="https://github.com/soapdog/patchwork/releases/download/v5.4.0/ponchowonky-5.4.0-linux-${arch}.AppImage"
- file="ponchowonky-5.4.0-linux-${arch}.AppImage"
- if [ ! -f "$file" ]; then
- wget -q --show-progress "$url" -O "$file"
- fi
- sha=$(sha256sum "$file" | cut -d' ' -f1)
- echo "${arch}: ${sha}"
-done
-
-echo "Paste the SHA256 values into nz.scuttlebutt.Patchwork.yaml, then run:"
-echo " flatpak-builder --repo=repo --force-clean build-dir nz.scuttlebutt.Patchwork.yaml"
-```
-
-## Build and install
-
-```bash
-# 1. Fill in the SHA256 placeholders in the manifest, or run:
-./build.sh
-
-# 2. Build
-flatpak-builder --repo=repo --force-clean build-dir nz.scuttlebutt.Patchwork.yaml
-
-# 3. Install locally
-flatpak --user remote-add --no-gpg-verify patchwork-repo repo
-flatpak --user install -y patchwork-repo nz.scuttlebutt.Patchwork
-
-# 4. Run
-flatpak run nz.scuttlebutt.Patchwork
-```
-
-## Important notes
-
-- Update the `` in the metainfo file with the actual v5.4.0 release date.
-- The AppImage is named `ponchowonky` but the public name and app-id stay `Patchwork`. The manifest renames the desktop entry and icons accordingly.
-- SSB data lives in `~/.var/app/nz.scuttlebutt.Patchwork/.ssb` inside the Flatpak sandbox. Users migrating from a non-Flatpak install must copy that directory manually.
-- For Flathub, replace the screenshot URL with images hosted on a stable CDN and ensure the `nz.scuttlebutt.Patchwork` app-id is controlled by the project.
-
----
-
-**You**
-
-Is it best to have a separate repo for the flatpak or in the main repo
-
----
-
-**Assistant**
-
-Thinking
-
-The user is asking for advice on whether to keep the Flatpak manifest in a separate repository or in the main Patchwork repo. This is a general software packaging/Flathub convention question. I should provide reasoning based on common practices, especially for Flathub submissions.
-
-Key points to consider:
-1. Flathub's preference - they typically prefer a separate repo under flathub/org.example.App
-2. Maintenance burden - keeping it in main repo means releases can update manifest together
-3. CI/CD integration
-4. Build from source vs wrapping release
-5. Flathub external data checker
-6. AppData/desktop files location
-
-This is an established concept/opinion discussion, no need for web search. But I should be thorough and give practical recommendation.
-
-Let me think about the best answer:
-- For Flathub submission: separate repo is standard (flathub/flathub repo PR creates a new repo under flathub org)
-- For project-owned distribution: in main repo can work
-- For release-wrapper approach: separate repo is cleaner because the manifest references external binaries
-- For build-from-source: in main repo makes more sense
-
-Given this is a wrapper approach, separate repo is probably better. But I should explain both options.
-
-Let me structure the answer with a clear recommendation and tradeoffs table.
-
-
-
-For your **release-wrapper approach**, a **separate repo is usually better**. Here is the tradeoff.
-
-## Recommendation
-
-| Approach | Best repo location | Why |
-|----------|-------------------|-----|
-| Release wrapper (what I gave you) | **Separate repo** | The manifest downloads upstream binaries. Keeping it separate avoids polluting the main repo with packaging-only files and matches Flathub expectations. |
-| Build from source inside Flatpak | **Main repo** | The manifest needs the source tree, tags, and CI. It is easier to maintain alongside the app. |
-
-## Why a separate repo is better for wrappers
-
-- **Flathub expects it.** When you submit to Flathub, they create a repo like `flathub/nz.scuttlebutt.Patchwork` from your PR. Having your own `patchwork-flatpak` repo already structured makes that PR trivial.
-- **Different release cadence.** The Flatpak only needs updating when a new upstream AppImage is released, not on every commit.
-- **No main-repo noise.** Files like `nz.scuttlebutt.Patchwork.yaml`, `patchwork.sh`, and metainfo do not help developers working on Patchwork itself.
-- **External data checker.** Flathub bots can watch the upstream release URL and auto-open PRs to bump the version/SHA256. That works cleanly in a dedicated repo.
-
-## When the main repo makes sense
-
-- You want the Flatpak built automatically on every CI run.
-- You are building from source, not wrapping a release.
-- You want `flatpak-builder` to use the current checkout directly.
-
-## Suggested layout
-
-```
-patchwork-flatpak/ # or flathub manifest repo
-├── nz.scuttlebutt.Patchwork.yaml
-├── nz.scuttlebutt.Patchwork.metainfo.xml
-├── patchwork.sh
-├── flathub.json # optional: skip-arches, etc.
-└── README.md
-```
-
-## Practical workflow
-
-1. Create `soapdog/patchwork-flatpak` or similar.
-2. On each upstream release, update the URL, SHA256, and `` in metainfo.
-3. Submit to Flathub from that repo.
-4. Optionally add a GitHub Action in the main repo that opens a PR in the Flatpak repo when a release is published.
-
-**Bottom line:** use a separate repo. It is the standard pattern for Flathub and keeps the main repo clean.
-
----
-