<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>infrastructure, branch HEAD</title>
<subtitle>Unnamed repository; edit this file &#39;description&#39; to name the repository.
</subtitle>
<entry>
<id>e7fa037ea3b8fded2f8386be6cdeca0627ea66a1</id>
<published>2026-07-19T18:47:25Z</published>
<updated>2026-07-19T18:47:25Z</updated>
<title type="text">bump nixpkgs</title>
<link rel="alternate" type="text/html" href="commit/e7fa037ea3b8fded2f8386be6cdeca0627ea66a1.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit e7fa037ea3b8fded2f8386be6cdeca0627ea66a1
parent 91b67fcfba2a425a4476860b980b730af0af6515
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun, 19 Jul 2026 20:47:25 +0200

bump nixpkgs

</content>
</entry>
<entry>
<id>91b67fcfba2a425a4476860b980b730af0af6515</id>
<published>2026-07-19T07:45:11Z</published>
<updated>2026-07-19T07:45:11Z</updated>
<title type="text">gaia: fix emacs init.el for orgmode</title>
<link rel="alternate" type="text/html" href="commit/91b67fcfba2a425a4476860b980b730af0af6515.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 91b67fcfba2a425a4476860b980b730af0af6515
parent 0f879d1dd889454aa7a19ad513eeb616062505d9
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun, 19 Jul 2026 09:45:11 +0200

gaia: fix emacs init.el for orgmode

</content>
</entry>
<entry>
<id>0f879d1dd889454aa7a19ad513eeb616062505d9</id>
<published>2026-07-11T16:41:22Z</published>
<updated>2026-07-11T16:41:22Z</updated>
<title type="text">gaia: import pdf tools in emacs</title>
<link rel="alternate" type="text/html" href="commit/0f879d1dd889454aa7a19ad513eeb616062505d9.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 0f879d1dd889454aa7a19ad513eeb616062505d9
parent 92c1b40adbafe6e8ee9d1d7a6152ba566f0a82f0
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 11 Jul 2026 18:41:22 +0200

gaia: import pdf tools in emacs

</content>
</entry>
<entry>
<id>92c1b40adbafe6e8ee9d1d7a6152ba566f0a82f0</id>
<published>2026-07-11T16:41:08Z</published>
<updated>2026-07-11T16:41:08Z</updated>
<title type="text">gaia: add work macbook to syncthing test folder</title>
<link rel="alternate" type="text/html" href="commit/92c1b40adbafe6e8ee9d1d7a6152ba566f0a82f0.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 92c1b40adbafe6e8ee9d1d7a6152ba566f0a82f0
parent 7120b332c9e74490d9842d8c920353caf4588da0
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 11 Jul 2026 18:41:08 +0200

gaia: add work macbook to syncthing test folder

</content>
</entry>
<entry>
<id>7120b332c9e74490d9842d8c920353caf4588da0</id>
<published>2026-07-10T20:34:23Z</published>
<updated>2026-07-10T20:34:23Z</updated>
<title type="text">gaia: add gmail to notmuch</title>
<link rel="alternate" type="text/html" href="commit/7120b332c9e74490d9842d8c920353caf4588da0.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 7120b332c9e74490d9842d8c920353caf4588da0
parent 6ff14382a8e331b211c5d06d733d638e63932e12
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 10 Jul 2026 22:34:23 +0200

gaia: add gmail to notmuch

</content>
</entry>
<entry>
<id>6ff14382a8e331b211c5d06d733d638e63932e12</id>
<published>2026-07-10T19:36:42Z</published>
<updated>2026-07-10T19:36:42Z</updated>
<title type="text">mail-server: add mbsync schedule</title>
<link rel="alternate" type="text/html" href="commit/6ff14382a8e331b211c5d06d733d638e63932e12.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 6ff14382a8e331b211c5d06d733d638e63932e12
parent 952a024bc2f02833c96ff30648e01651d0fcee74
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 10 Jul 2026 21:36:42 +0200

mail-server: add mbsync schedule

</content>
</entry>
<entry>
<id>952a024bc2f02833c96ff30648e01651d0fcee74</id>
<published>2026-07-10T19:12:16Z</published>
<updated>2026-07-10T19:12:16Z</updated>
<title type="text">feat: add mbsync periodic sync</title>
<link rel="alternate" type="text/html" href="commit/952a024bc2f02833c96ff30648e01651d0fcee74.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 952a024bc2f02833c96ff30648e01651d0fcee74
parent b134593dad3b349ea9e599ab99f99bad7699f4bb
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 10 Jul 2026 21:12:16 +0200

feat: add mbsync periodic sync

</content>
</entry>
<entry>
<id>b134593dad3b349ea9e599ab99f99bad7699f4bb</id>
<published>2026-07-05T16:14:15Z</published>
<updated>2026-07-05T16:14:15Z</updated>
<title type="text">refactor: query-logs as pure DuckDB macros</title>
<link rel="alternate" type="text/html" href="commit/b134593dad3b349ea9e599ab99f99bad7699f4bb.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit b134593dad3b349ea9e599ab99f99bad7699f4bb
parent d5884b7daeb4652b94ad48989b09a740bcddfe71
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  5 Jul 2026 18:14:15 +0200

refactor: query-logs as pure DuckDB macros

Replace bash URL generation with DuckDB table macros. Bash just
launches DuckDB with an init file. All logic lives in SQL:

  query-logs
  D SELECT * FROM app(&#39;2026-04-19 15:00&#39;, &#39;2026-04-19 16:00&#39;) WHERE message ILIKE &#39;%error%&#39;;
  D SELECT status, count(*) FROM nginx(&#39;2026-07-05 16:00&#39;, &#39;2026-07-05 17:00&#39;) GROUP BY status;

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>d5884b7daeb4652b94ad48989b09a740bcddfe71</id>
<published>2026-07-05T16:08:49Z</published>
<updated>2026-07-05T16:08:49Z</updated>
<title type="text">refactor: simplify query-logs, keep SQL in DuckDB</title>
<link rel="alternate" type="text/html" href="commit/d5884b7daeb4652b94ad48989b09a740bcddfe71.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit d5884b7daeb4652b94ad48989b09a740bcddfe71
parent fe789ee72a77a5247e6e0019adfe9bb6ed125298
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  5 Jul 2026 18:08:49 +0200

refactor: simplify query-logs, keep SQL in DuckDB

Bash only generates the URL list (with HEAD checks to skip missing
files). All table definitions and SQL live in DuckDB init script.

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>fe789ee72a77a5247e6e0019adfe9bb6ed125298</id>
<published>2026-07-05T14:48:24Z</published>
<updated>2026-07-05T14:48:24Z</updated>
<title type="text">refactor: query-logs opens interactive DuckDB with app + nginx tables</title>
<link rel="alternate" type="text/html" href="commit/fe789ee72a77a5247e6e0019adfe9bb6ed125298.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit fe789ee72a77a5247e6e0019adfe9bb6ed125298
parent 4bda2254b937d00fb6d7c4c76cea7e55f66dda2c
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  5 Jul 2026 16:48:24 +0200

refactor: query-logs opens interactive DuckDB with app + nginx tables

Instead of taking a source and SQL as args, query-logs now opens
an interactive DuckDB session with pre-loaded `app` and `nginx`
tables for the given time range.

Usage:
  query-logs                              # last 24h
  query-logs 2026-07-05T16 2026-07-05T17  # specific range
  # then in DuckDB:
  SELECT * FROM app WHERE message ILIKE &#39;%error%&#39;;
  SELECT status, count(*) FROM nginx GROUP BY status;

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>4bda2254b937d00fb6d7c4c76cea7e55f66dda2c</id>
<published>2026-07-05T14:19:03Z</published>
<updated>2026-07-05T14:19:03Z</updated>
<title type="text">feat: add nginx log archival, multi-source query-logs</title>
<link rel="alternate" type="text/html" href="commit/4bda2254b937d00fb6d7c4c76cea7e55f66dda2c.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 4bda2254b937d00fb6d7c4c76cea7e55f66dda2c
parent c75ce2073ef9244e3287b02d12fe6cfe88458fab
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  5 Jul 2026 16:19:03 +0200

feat: add nginx log archival, multi-source query-logs

- Archive nginx access logs hourly alongside app logs
- Serve both under /mnt/volume-hel1-1/logs/{app,nginx}/
- query-logs now takes a source argument: app or nginx
- Remove manifest.csv generation

Usage:
  query-logs app
  query-logs nginx 2026-07-05T16 2026-07-05T17
  query-logs nginx 2026-07-05T16 2026-07-05T17 &quot;SELECT status, count(*) FROM logs GROUP BY status&quot;

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>c75ce2073ef9244e3287b02d12fe6cfe88458fab</id>
<published>2026-07-04T20:14:39Z</published>
<updated>2026-07-04T20:14:39Z</updated>
<title type="text">fix: skip missing log files in query-logs</title>
<link rel="alternate" type="text/html" href="commit/c75ce2073ef9244e3287b02d12fe6cfe88458fab.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit c75ce2073ef9244e3287b02d12fe6cfe88458fab
parent 521d4fa653e1a46518fb7470dd56c44d050e0c94
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat,  4 Jul 2026 22:14:39 +0200

fix: skip missing log files in query-logs

HEAD-check each URL before passing to DuckDB to avoid 404 errors
on hours with no archived logs.

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>521d4fa653e1a46518fb7470dd56c44d050e0c94</id>
<published>2026-07-04T20:12:13Z</published>
<updated>2026-07-04T20:12:13Z</updated>
<title type="text">feat: add manifest.csv for DuckDB httpfs log queries</title>
<link rel="alternate" type="text/html" href="commit/521d4fa653e1a46518fb7470dd56c44d050e0c94.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 521d4fa653e1a46518fb7470dd56c44d050e0c94
parent 3ea34c191980f9e27bbc529cddfc42029d324cf3
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat,  4 Jul 2026 22:12:13 +0200

feat: add manifest.csv for DuckDB httpfs log queries

Remove manifest.csv generation from log archival timer.
Add query-logs wrapper to dev shell for querying logs via DuckDB.

Usage: query-logs [since] [until] [sql]
  query-logs                              # last 24h, default query
  query-logs 2026-07-01T00 2026-07-02T00  # specific range
  query-logs 2026-07-01T00 2026-07-02T00 &quot;SELECT * FROM logs WHERE message ILIKE &#39;%error%&#39;&quot;

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>3ea34c191980f9e27bbc529cddfc42029d324cf3</id>
<published>2026-07-04T19:29:07Z</published>
<updated>2026-07-04T19:29:07Z</updated>
<title type="text">gaia: add pdf-tools</title>
<link rel="alternate" type="text/html" href="commit/3ea34c191980f9e27bbc529cddfc42029d324cf3.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 3ea34c191980f9e27bbc529cddfc42029d324cf3
parent dd682537d41d723a75ba64cb4dca864b5f68f877
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat,  4 Jul 2026 21:29:07 +0200

gaia: add pdf-tools

</content>
</entry>
<entry>
<id>dd682537d41d723a75ba64cb4dca864b5f68f877</id>
<published>2026-07-04T18:37:55Z</published>
<updated>2026-07-04T18:37:55Z</updated>
<title type="text">feat: add manifest.csv for DuckDB httpfs log queries</title>
<link rel="alternate" type="text/html" href="commit/dd682537d41d723a75ba64cb4dca864b5f68f877.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit dd682537d41d723a75ba64cb4dca864b5f68f877
parent c7d26917bf5b5f92ef4c9f7ac46aca2c57aeafa2
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat,  4 Jul 2026 20:37:55 +0200

feat: add manifest.csv for DuckDB httpfs log queries

The log archival script now generates a manifest.csv listing all
log files. DuckDB can read this over HTTP to query logs without
downloading them first.

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>c7d26917bf5b5f92ef4c9f7ac46aca2c57aeafa2</id>
<published>2026-07-04T12:07:20Z</published>
<updated>2026-07-04T12:07:20Z</updated>
<title type="text">revert: remove ClickHouse + Vector log pipeline</title>
<link rel="alternate" type="text/html" href="commit/c7d26917bf5b5f92ef4c9f7ac46aca2c57aeafa2.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit c7d26917bf5b5f92ef4c9f7ac46aca2c57aeafa2
parent 3cc676cc3c5b4a0735dd0988040ba2d14726052e
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat,  4 Jul 2026 14:07:20 +0200

revert: remove ClickHouse + Vector log pipeline

ClickHouse is overkill for this scale and too memory-hungry for
the 2GB helios server. Reverting to the existing gzipped journalctl
archival — query with DuckDB from gaia instead.

Swap is kept as it&#39;s useful regardless.

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>3cc676cc3c5b4a0735dd0988040ba2d14726052e</id>
<published>2026-07-04T12:03:17Z</published>
<updated>2026-07-04T12:03:17Z</updated>
<title type="text">fix: add swap to helios, reduce ClickHouse memory to 500MB</title>
<link rel="alternate" type="text/html" href="commit/3cc676cc3c5b4a0735dd0988040ba2d14726052e.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 3cc676cc3c5b4a0735dd0988040ba2d14726052e
parent c02cce60cba446954a11de3e48038fd0d27939e7
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat,  4 Jul 2026 14:03:17 +0200

fix: add swap to helios, reduce ClickHouse memory to 500MB

Helios only has 2GB RAM and no swap — ClickHouse was getting
OOM-killed under load. Add 2GB swapfile and cap ClickHouse at
500MB to coexist with other services.

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>c02cce60cba446954a11de3e48038fd0d27939e7</id>
<published>2026-07-03T22:02:04Z</published>
<updated>2026-07-04T11:32:05Z</updated>
<title type="text">feat: add ClickHouse + Vector log pipeline for simple-web-app</title>
<link rel="alternate" type="text/html" href="commit/c02cce60cba446954a11de3e48038fd0d27939e7.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit c02cce60cba446954a11de3e48038fd0d27939e7
parent b1f177e12fa25326d2122632f9e4ac33f15898b1
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat,  4 Jul 2026 00:02:04 +0200

feat: add ClickHouse + Vector log pipeline for simple-web-app

Vector ships journald logs from simple-web-app and nginx access
logs into ClickHouse in real-time. ClickHouse accessible over
VPN (wg0) only. 90-day retention with automatic TTL cleanup.

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>b1f177e12fa25326d2122632f9e4ac33f15898b1</id>
<published>2026-06-27T20:49:36Z</published>
<updated>2026-06-27T20:49:36Z</updated>
<title type="text">update simple-web-app: composite primary keys for vote/story_category</title>
<link rel="alternate" type="text/html" href="commit/b1f177e12fa25326d2122632f9e4ac33f15898b1.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit b1f177e12fa25326d2122632f9e4ac33f15898b1
parent f376b8516fc20a591e7457b29b0c24bd22f7f8fe
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 27 Jun 2026 22:49:36 +0200

update simple-web-app: composite primary keys for vote/story_category

</content>
</entry>
<entry>
<id>f376b8516fc20a591e7457b29b0c24bd22f7f8fe</id>
<published>2026-06-14T13:04:07Z</published>
<updated>2026-06-14T13:04:07Z</updated>
<title type="text">chore: update simple-web-app (RETURNING *)</title>
<link rel="alternate" type="text/html" href="commit/f376b8516fc20a591e7457b29b0c24bd22f7f8fe.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit f376b8516fc20a591e7457b29b0c24bd22f7f8fe
parent 6d672d822aa48f97b6177ce2af23cf4d735c2ce1
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun, 14 Jun 2026 15:04:07 +0200

chore: update simple-web-app (RETURNING *)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>6d672d822aa48f97b6177ce2af23cf4d735c2ce1</id>
<published>2026-06-14T12:50:21Z</published>
<updated>2026-06-14T12:50:21Z</updated>
<title type="text">chore: update simple-web-app (vote score update)</title>
<link rel="alternate" type="text/html" href="commit/6d672d822aa48f97b6177ce2af23cf4d735c2ce1.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 6d672d822aa48f97b6177ce2af23cf4d735c2ce1
parent f202b11201f7a9dd0bb9c784bb7b88a2391f5b19
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun, 14 Jun 2026 14:50:21 +0200

chore: update simple-web-app (vote score update)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>f202b11201f7a9dd0bb9c784bb7b88a2391f5b19</id>
<published>2026-06-14T12:38:15Z</published>
<updated>2026-06-14T12:38:15Z</updated>
<title type="text">chore: update simple-web-app (vote read-back optimization)</title>
<link rel="alternate" type="text/html" href="commit/f202b11201f7a9dd0bb9c784bb7b88a2391f5b19.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit f202b11201f7a9dd0bb9c784bb7b88a2391f5b19
parent fdd27fcaccafe73a88980568ac7435ee2a18f4ae
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun, 14 Jun 2026 14:38:15 +0200

chore: update simple-web-app (vote read-back optimization)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>fdd27fcaccafe73a88980568ac7435ee2a18f4ae</id>
<published>2026-06-14T11:54:28Z</published>
<updated>2026-06-14T11:54:28Z</updated>
<title type="text">chore: update simple-web-app (dedicated async DB pool)</title>
<link rel="alternate" type="text/html" href="commit/fdd27fcaccafe73a88980568ac7435ee2a18f4ae.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit fdd27fcaccafe73a88980568ac7435ee2a18f4ae
parent 74df92ab716ec2611656ed4c3de86c13ec3ddc53
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun, 14 Jun 2026 13:54:28 +0200

chore: update simple-web-app (dedicated async DB pool)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>74df92ab716ec2611656ed4c3de86c13ec3ddc53</id>
<published>2026-06-13T13:59:37Z</published>
<updated>2026-06-13T13:59:37Z</updated>
<title type="text">chore: update simple-web-app (fix created_at NOT NULL)</title>
<link rel="alternate" type="text/html" href="commit/74df92ab716ec2611656ed4c3de86c13ec3ddc53.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 74df92ab716ec2611656ed4c3de86c13ec3ddc53
parent 11aac98eb36389f5647515042c36df82d7767e55
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 13 Jun 2026 15:59:37 +0200

chore: update simple-web-app (fix created_at NOT NULL)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>11aac98eb36389f5647515042c36df82d7767e55</id>
<published>2026-06-13T13:53:42Z</published>
<updated>2026-06-13T13:53:42Z</updated>
<title type="text">chore: update simple-web-app (remove inline JS, epoch timestamps)</title>
<link rel="alternate" type="text/html" href="commit/11aac98eb36389f5647515042c36df82d7767e55.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 11aac98eb36389f5647515042c36df82d7767e55
parent 571d3bf7bcb65758715eee468f5ebe4f1db9e3e5
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 13 Jun 2026 15:53:42 +0200

chore: update simple-web-app (remove inline JS, epoch timestamps)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>571d3bf7bcb65758715eee468f5ebe4f1db9e3e5</id>
<published>2026-06-13T12:55:20Z</published>
<updated>2026-06-13T12:55:20Z</updated>
<title type="text">chore: update simple-web-app (opaque sessions, drop jsonwebtoken)</title>
<link rel="alternate" type="text/html" href="commit/571d3bf7bcb65758715eee468f5ebe4f1db9e3e5.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 571d3bf7bcb65758715eee468f5ebe4f1db9e3e5
parent 2e17a2ed4ac0758ede73c64492aa5cc6e8c328b4
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 13 Jun 2026 14:55:20 +0200

chore: update simple-web-app (opaque sessions, drop jsonwebtoken)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>2e17a2ed4ac0758ede73c64492aa5cc6e8c328b4</id>
<published>2026-06-13T12:26:37Z</published>
<updated>2026-06-13T12:26:37Z</updated>
<title type="text">fix: restore 0.0.0.0:9090 logs vhost with wg0 firewall rule</title>
<link rel="alternate" type="text/html" href="commit/2e17a2ed4ac0758ede73c64492aa5cc6e8c328b4.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 2e17a2ed4ac0758ede73c64492aa5cc6e8c328b4
parent ec975477199053f8e6047c236d39f67f45765e83
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 13 Jun 2026 14:26:37 +0200

fix: restore 0.0.0.0:9090 logs vhost with wg0 firewall rule

This was working all along — the debugging issues were caused by
using the wrong VPN IP (10.100.0.1 vs 10.100.0.7).

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>ec975477199053f8e6047c236d39f67f45765e83</id>
<published>2026-06-13T12:11:41Z</published>
<updated>2026-06-13T12:11:41Z</updated>
<title type="text">fix: bind logs vhost to 0.0.0.0:9090, firewall restricts to wg0</title>
<link rel="alternate" type="text/html" href="commit/ec975477199053f8e6047c236d39f67f45765e83.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit ec975477199053f8e6047c236d39f67f45765e83
parent c96c0c91ff8f28a69ce7f1369f323a1c23436595
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 13 Jun 2026 14:11:41 +0200

fix: bind logs vhost to 0.0.0.0:9090, firewall restricts to wg0

Nginx binds to all interfaces (no WireGuard dependency at startup).
Firewall only opens port 9090 on the wg0 interface, so it&#39;s only
reachable from the VPN.

Query: duckdb -c &quot;SELECT * FROM read_json(&#39;http://10.100.0.1:9090/2026/06/13/14.json.gz&#39;)&quot;

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>c96c0c91ff8f28a69ce7f1369f323a1c23436595</id>
<published>2026-06-13T12:09:27Z</published>
<updated>2026-06-13T12:09:27Z</updated>
<title type="text">feat: serve logs on localhost:9090</title>
<link rel="alternate" type="text/html" href="commit/c96c0c91ff8f28a69ce7f1369f323a1c23436595.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit c96c0c91ff8f28a69ce7f1369f323a1c23436595
parent 8a7e45babf89a551c6dd7feaadfbaeda8d634d5e
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 13 Jun 2026 14:09:27 +0200

feat: serve logs on localhost:9090

Access via SSH port forward:
  ssh -L 9090:localhost:9090 helios
  duckdb -c &quot;SELECT * FROM read_json(&#39;http://localhost:9090/2026/06/13/14.json.gz&#39;)&quot;

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>8a7e45babf89a551c6dd7feaadfbaeda8d634d5e</id>
<published>2026-06-13T12:08:26Z</published>
<updated>2026-06-13T12:08:26Z</updated>
<title type="text">fix: revert logs vhost again (WireGuard not up before nginx)</title>
<link rel="alternate" type="text/html" href="commit/8a7e45babf89a551c6dd7feaadfbaeda8d634d5e.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 8a7e45babf89a551c6dd7feaadfbaeda8d634d5e
parent 317baacb1f121e56c4838ddc80994a8c971b2d2a
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 13 Jun 2026 14:08:26 +0200

fix: revert logs vhost again (WireGuard not up before nginx)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>317baacb1f121e56c4838ddc80994a8c971b2d2a</id>
<published>2026-06-13T12:07:03Z</published>
<updated>2026-06-13T12:07:03Z</updated>
<title type="text">fix: use port 9090 for logs vhost (port 80 has global SSL redirect)</title>
<link rel="alternate" type="text/html" href="commit/317baacb1f121e56c4838ddc80994a8c971b2d2a.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 317baacb1f121e56c4838ddc80994a8c971b2d2a
parent 1555167a4bdf02f8350efcb36bd3358563c18f14
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 13 Jun 2026 14:07:03 +0200

fix: use port 9090 for logs vhost (port 80 has global SSL redirect)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>1555167a4bdf02f8350efcb36bd3358563c18f14</id>
<published>2026-06-13T12:04:07Z</published>
<updated>2026-06-13T12:04:07Z</updated>
<title type="text">fix: serve logs on VPN vhost with nginx after wireguard</title>
<link rel="alternate" type="text/html" href="commit/1555167a4bdf02f8350efcb36bd3358563c18f14.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 1555167a4bdf02f8350efcb36bd3358563c18f14
parent 81e1198fc85c257f8188563ba24c321589cac423
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 13 Jun 2026 14:04:07 +0200

fix: serve logs on VPN vhost with nginx after wireguard

The allow/deny approach didn&#39;t work because requests via the
public domain have the public IP as remote_addr, not the VPN IP.

Instead, bind a separate vhost to 10.100.0.1:80 (VPN only) and
ensure nginx starts after wireguard so the interface exists.

Query with: duckdb -c &quot;SELECT * FROM read_json(&#39;http://10.100.0.1/2026/06/13/14.json.gz&#39;)&quot;

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>81e1198fc85c257f8188563ba24c321589cac423</id>
<published>2026-06-13T11:56:50Z</published>
<updated>2026-06-13T11:56:50Z</updated>
<title type="text">feat: serve logs at /logs/ restricted to VPN IPs</title>
<link rel="alternate" type="text/html" href="commit/81e1198fc85c257f8188563ba24c321589cac423.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 81e1198fc85c257f8188563ba24c321589cac423
parent 74034ab5bee14bee679e70a336588b9318b19e92
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 13 Jun 2026 13:56:50 +0200

feat: serve logs at /logs/ restricted to VPN IPs

Uses allow/deny instead of binding to the VPN interface, so
nginx doesn&#39;t fail if WireGuard isn&#39;t up yet.

Queryable with duckdb:
  SELECT * FROM read_json(&#39;https://simple.fnarglebeast.com/logs/2026/06/13/12.json.gz&#39;)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>74034ab5bee14bee679e70a336588b9318b19e92</id>
<published>2026-06-13T11:54:58Z</published>
<updated>2026-06-13T11:54:58Z</updated>
<title type="text">fix: revert logs vhost (broke nginx bind on VPN addr)</title>
<link rel="alternate" type="text/html" href="commit/74034ab5bee14bee679e70a336588b9318b19e92.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 74034ab5bee14bee679e70a336588b9318b19e92
parent 830fd286eb55c31006b84ea45f0cfd1cda126a4a
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 13 Jun 2026 13:54:58 +0200

fix: revert logs vhost (broke nginx bind on VPN addr)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>830fd286eb55c31006b84ea45f0cfd1cda126a4a</id>
<published>2026-06-13T11:53:09Z</published>
<updated>2026-06-13T11:53:09Z</updated>
<title type="text">feat: serve logs via nginx on VPN (10.100.0.1:8080)</title>
<link rel="alternate" type="text/html" href="commit/830fd286eb55c31006b84ea45f0cfd1cda126a4a.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 830fd286eb55c31006b84ea45f0cfd1cda126a4a
parent e87b4629c80bb1338f35b24e21f05d0b89990038
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 13 Jun 2026 13:53:09 +0200

feat: serve logs via nginx on VPN (10.100.0.1:8080)

Logs accessible at http://10.100.0.1:8080/ from the WireGuard
network. Queryable with duckdb:

  SELECT * FROM read_json(&#39;http://10.100.0.1:8080/2026/06/**/*.json.gz&#39;)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>e87b4629c80bb1338f35b24e21f05d0b89990038</id>
<published>2026-06-13T11:44:28Z</published>
<updated>2026-06-13T11:44:28Z</updated>
<title type="text">chore: update simple-web-app (ADDR/SMTP_ADDR env vars)</title>
<link rel="alternate" type="text/html" href="commit/e87b4629c80bb1338f35b24e21f05d0b89990038.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit e87b4629c80bb1338f35b24e21f05d0b89990038
parent ac366a589f6c23ff262aaaa27ab04bcd794544a2
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 13 Jun 2026 13:44:28 +0200

chore: update simple-web-app (ADDR/SMTP_ADDR env vars)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>ac366a589f6c23ff262aaaa27ab04bcd794544a2</id>
<published>2026-06-13T11:37:09Z</published>
<updated>2026-06-13T11:37:09Z</updated>
<title type="text">simple-web-app: bump</title>
<link rel="alternate" type="text/html" href="commit/ac366a589f6c23ff262aaaa27ab04bcd794544a2.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit ac366a589f6c23ff262aaaa27ab04bcd794544a2
parent 1b7a083c29f56a9d15487c11c24395d5445c591f
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 13 Jun 2026 13:37:09 +0200

simple-web-app: bump

</content>
</entry>
<entry>
<id>1b7a083c29f56a9d15487c11c24395d5445c591f</id>
<published>2026-06-13T11:04:24Z</published>
<updated>2026-06-13T11:04:24Z</updated>
<title type="text">chore: update simple-web-app (STRICT tables)</title>
<link rel="alternate" type="text/html" href="commit/1b7a083c29f56a9d15487c11c24395d5445c591f.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 1b7a083c29f56a9d15487c11c24395d5445c591f
parent 87711c24e182cf9eced4d25c0b871c6581160a6f
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 13 Jun 2026 13:04:24 +0200

chore: update simple-web-app (STRICT tables)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>87711c24e182cf9eced4d25c0b871c6581160a6f</id>
<published>2026-06-13T10:43:18Z</published>
<updated>2026-06-13T10:43:18Z</updated>
<title type="text">chore: update simple-web-app (random JWT, remove sops secret)</title>
<link rel="alternate" type="text/html" href="commit/87711c24e182cf9eced4d25c0b871c6581160a6f.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 87711c24e182cf9eced4d25c0b871c6581160a6f
parent 9f38ef1496296af75ce8a311684ab0e8d3fcf061
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 13 Jun 2026 12:43:18 +0200

chore: update simple-web-app (random JWT, remove sops secret)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>9f38ef1496296af75ce8a311684ab0e8d3fcf061</id>
<published>2026-06-13T10:05:10Z</published>
<updated>2026-06-13T10:05:10Z</updated>
<title type="text">chore: update simple-web-app (prepare_cached + HashMap)</title>
<link rel="alternate" type="text/html" href="commit/9f38ef1496296af75ce8a311684ab0e8d3fcf061.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 9f38ef1496296af75ce8a311684ab0e8d3fcf061
parent 29b4394ce2b2ed2de04affa8825a040f86a08ae6
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 13 Jun 2026 12:05:10 +0200

chore: update simple-web-app (prepare_cached + HashMap)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>29b4394ce2b2ed2de04affa8825a040f86a08ae6</id>
<published>2026-06-13T10:00:15Z</published>
<updated>2026-06-13T10:00:15Z</updated>
<title type="text">chore: update simple-web-app (thread-local connections)</title>
<link rel="alternate" type="text/html" href="commit/29b4394ce2b2ed2de04affa8825a040f86a08ae6.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 29b4394ce2b2ed2de04affa8825a040f86a08ae6
parent 271cd301cd9a0713c23ffc8bfd26770656007d1d
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sat, 13 Jun 2026 12:00:15 +0200

chore: update simple-web-app (thread-local connections)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>271cd301cd9a0713c23ffc8bfd26770656007d1d</id>
<published>2026-06-12T21:28:42Z</published>
<updated>2026-06-12T21:28:42Z</updated>
<title type="text">chore: update simple-web-app (reader/writer split)</title>
<link rel="alternate" type="text/html" href="commit/271cd301cd9a0713c23ffc8bfd26770656007d1d.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 271cd301cd9a0713c23ffc8bfd26770656007d1d
parent b7bbc5d4cd29814bc44a5af3528ef6f0572e88a5
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 12 Jun 2026 23:28:42 +0200

chore: update simple-web-app (reader/writer split)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>b7bbc5d4cd29814bc44a5af3528ef6f0572e88a5</id>
<published>2026-06-12T21:20:46Z</published>
<updated>2026-06-12T21:20:46Z</updated>
<title type="text">chore: update simple-web-app (SQLite perf tuning)</title>
<link rel="alternate" type="text/html" href="commit/b7bbc5d4cd29814bc44a5af3528ef6f0572e88a5.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit b7bbc5d4cd29814bc44a5af3528ef6f0572e88a5
parent efab62241cd58b01043f2b21bf800c82b1ba88bd
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 12 Jun 2026 23:20:46 +0200

chore: update simple-web-app (SQLite perf tuning)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>efab62241cd58b01043f2b21bf800c82b1ba88bd</id>
<published>2026-06-12T21:13:51Z</published>
<updated>2026-06-12T21:13:51Z</updated>
<title type="text">fix: revert StateDirectory to simple-web-app (app creates data/ subdir)</title>
<link rel="alternate" type="text/html" href="commit/efab62241cd58b01043f2b21bf800c82b1ba88bd.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit efab62241cd58b01043f2b21bf800c82b1ba88bd
parent 43fc7b0297304a552c65203816458a2064fe5c39
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 12 Jun 2026 23:13:51 +0200

fix: revert StateDirectory to simple-web-app (app creates data/ subdir)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>43fc7b0297304a552c65203816458a2064fe5c39</id>
<published>2026-06-12T21:12:05Z</published>
<updated>2026-06-12T21:12:05Z</updated>
<title type="text">fix: drop volume bind mount, use StateDirectory for DB</title>
<link rel="alternate" type="text/html" href="commit/43fc7b0297304a552c65203816458a2064fe5c39.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 43fc7b0297304a552c65203816458a2064fe5c39
parent 20ddc9462d5f49de0a2cb059205be78d4efe799a
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 12 Jun 2026 23:12:05 +0200

fix: drop volume bind mount, use StateDirectory for DB

BindPaths + DynamicUser + symlinks was a losing battle.
Use StateDirectory=&#39;simple-web-app/data&#39; which systemd creates
and owns correctly. Volume mount can be revisited later with a
static user if needed.

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>20ddc9462d5f49de0a2cb059205be78d4efe799a</id>
<published>2026-06-12T21:10:34Z</published>
<updated>2026-06-12T21:10:34Z</updated>
<title type="text">fix: use real path for bind mount (symlink not supported)</title>
<link rel="alternate" type="text/html" href="commit/20ddc9462d5f49de0a2cb059205be78d4efe799a.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 20ddc9462d5f49de0a2cb059205be78d4efe799a
parent a8edb5b2b19d29cdb7eb929412661ebed50cef95
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 12 Jun 2026 23:10:34 +0200

fix: use real path for bind mount (symlink not supported)

/var/lib/simple-web-app is a symlink to private/simple-web-app
with DynamicUser. BindPaths needs the real path.

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>a8edb5b2b19d29cdb7eb929412661ebed50cef95</id>
<published>2026-06-12T21:09:17Z</published>
<updated>2026-06-12T21:09:17Z</updated>
<title type="text">fix: create bind mount target dir for DynamicUser</title>
<link rel="alternate" type="text/html" href="commit/a8edb5b2b19d29cdb7eb929412661ebed50cef95.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit a8edb5b2b19d29cdb7eb929412661ebed50cef95
parent 5bd11077589347501d98cf84bcdeb3b116a6e887
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 12 Jun 2026 23:09:17 +0200

fix: create bind mount target dir for DynamicUser

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>5bd11077589347501d98cf84bcdeb3b116a6e887</id>
<published>2026-06-12T21:03:54Z</published>
<updated>2026-06-12T21:03:54Z</updated>
<title type="text">chore: update simple-web-app (drop lettre, hand-rolled SMTP)</title>
<link rel="alternate" type="text/html" href="commit/5bd11077589347501d98cf84bcdeb3b116a6e887.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 5bd11077589347501d98cf84bcdeb3b116a6e887
parent 60e9e2184534a98b6c909d78c170bea55a1ff2c6
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 12 Jun 2026 23:03:54 +0200

chore: update simple-web-app (drop lettre, hand-rolled SMTP)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>60e9e2184534a98b6c909d78c170bea55a1ff2c6</id>
<published>2026-06-12T20:49:53Z</published>
<updated>2026-06-12T20:49:53Z</updated>
<title type="text">fix: bind-mount volume into state dir for DynamicUser access</title>
<link rel="alternate" type="text/html" href="commit/60e9e2184534a98b6c909d78c170bea55a1ff2c6.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 60e9e2184534a98b6c909d78c170bea55a1ff2c6
parent 9d7ac558513bb424f6f7aab916c68bfa0ed8213b
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 12 Jun 2026 22:49:53 +0200

fix: bind-mount volume into state dir for DynamicUser access

DynamicUser can&#39;t write to volume paths directly. Bind-mount
/mnt/volume-hel1-1/simple-web-app/data into /var/lib/simple-web-app/data
so the dynamic user has write access via StateDirectory while data
lives on the Hetzner volume.

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>9d7ac558513bb424f6f7aab916c68bfa0ed8213b</id>
<published>2026-06-12T20:24:32Z</published>
<updated>2026-06-12T20:24:32Z</updated>
<title type="text">chore: update simple-web-app (drop r2d2)</title>
<link rel="alternate" type="text/html" href="commit/9d7ac558513bb424f6f7aab916c68bfa0ed8213b.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 9d7ac558513bb424f6f7aab916c68bfa0ed8213b
parent 39296700268531bae4dcce15f946fc85ed45dbf0
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 12 Jun 2026 22:24:32 +0200

chore: update simple-web-app (drop r2d2)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>39296700268531bae4dcce15f946fc85ed45dbf0</id>
<published>2026-06-12T20:00:32Z</published>
<updated>2026-06-12T20:00:32Z</updated>
<title type="text">chore: update simple-web-app (nginx gzip, remove manual gz)</title>
<link rel="alternate" type="text/html" href="commit/39296700268531bae4dcce15f946fc85ed45dbf0.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 39296700268531bae4dcce15f946fc85ed45dbf0
parent 41f91a3f2f9d003db6815745571eb8017d62747e
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 12 Jun 2026 22:00:32 +0200

chore: update simple-web-app (nginx gzip, remove manual gz)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>41f91a3f2f9d003db6815745571eb8017d62747e</id>
<published>2026-06-12T19:52:34Z</published>
<updated>2026-06-12T19:52:34Z</updated>
<title type="text">chore: update simple-web-app (system SQLite)</title>
<link rel="alternate" type="text/html" href="commit/41f91a3f2f9d003db6815745571eb8017d62747e.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 41f91a3f2f9d003db6815745571eb8017d62747e
parent 7ea6f8236137c4088d18850a6491cb158090f750
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 12 Jun 2026 21:52:34 +0200

chore: update simple-web-app (system SQLite)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>7ea6f8236137c4088d18850a6491cb158090f750</id>
<published>2026-06-12T19:49:13Z</published>
<updated>2026-06-12T19:49:13Z</updated>
<title type="text">chore: update simple-web-app (SQL migration files, README)</title>
<link rel="alternate" type="text/html" href="commit/7ea6f8236137c4088d18850a6491cb158090f750.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 7ea6f8236137c4088d18850a6491cb158090f750
parent 8e5abd11968e3af0cf258d1aeb39982212a407be
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 12 Jun 2026 21:49:13 +0200

chore: update simple-web-app (SQL migration files, README)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>8e5abd11968e3af0cf258d1aeb39982212a407be</id>
<published>2026-06-12T19:19:26Z</published>
<updated>2026-06-12T19:19:26Z</updated>
<title type="text">feat: move simple-web-app DB to Hetzner volume for durability</title>
<link rel="alternate" type="text/html" href="commit/8e5abd11968e3af0cf258d1aeb39982212a407be.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 8e5abd11968e3af0cf258d1aeb39982212a407be
parent 0959fb05c703735262acbbedc7077bf863575818
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 12 Jun 2026 21:19:26 +0200

feat: move simple-web-app DB to Hetzner volume for durability

DB now at /mnt/volume-hel1-1/simple-web-app/data/app.db instead
of the root disk. Volume survives OS reinstalls.

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>0959fb05c703735262acbbedc7077bf863575818</id>
<published>2026-06-12T18:51:30Z</published>
<updated>2026-06-12T18:51:30Z</updated>
<title type="text">feat: add SMTP config for email verification, update simple-web-app</title>
<link rel="alternate" type="text/html" href="commit/0959fb05c703735262acbbedc7077bf863575818.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 0959fb05c703735262acbbedc7077bf863575818
parent 8c2aabd98be19b26b01c81c931c752fc200315c1
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 12 Jun 2026 20:51:30 +0200

feat: add SMTP config for email verification, update simple-web-app

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>8c2aabd98be19b26b01c81c931c752fc200315c1</id>
<published>2026-06-12T18:22:15Z</published>
<updated>2026-06-12T18:22:15Z</updated>
<title type="text">chore: update simple-web-app (direct SQLite)</title>
<link rel="alternate" type="text/html" href="commit/8c2aabd98be19b26b01c81c931c752fc200315c1.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 8c2aabd98be19b26b01c81c931c752fc200315c1
parent 0774de53fd6b6f8944204f42bba2dd0d31a0bfcd
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 12 Jun 2026 20:22:15 +0200

chore: update simple-web-app (direct SQLite)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>0774de53fd6b6f8944204f42bba2dd0d31a0bfcd</id>
<published>2026-06-12T18:22:13Z</published>
<updated>2026-06-12T18:22:13Z</updated>
<title type="text">feat: remove TrailBase from simple-web-app deployment</title>
<link rel="alternate" type="text/html" href="commit/0774de53fd6b6f8944204f42bba2dd0d31a0bfcd.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 0774de53fd6b6f8944204f42bba2dd0d31a0bfcd
parent 843901c8de98e511c76045bbe86b03c7ab0d87b3
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 12 Jun 2026 20:22:13 +0200

feat: remove TrailBase from simple-web-app deployment

App now uses direct SQLite access, no separate database service
needed. Removed TrailBase service, /api/ nginx proxy, and
traildepot references.

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>843901c8de98e511c76045bbe86b03c7ab0d87b3</id>
<published>2026-06-12T17:49:30Z</published>
<updated>2026-06-12T17:49:30Z</updated>
<title type="text">chore: update simple-web-app (shared connection pool)</title>
<link rel="alternate" type="text/html" href="commit/843901c8de98e511c76045bbe86b03c7ab0d87b3.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 843901c8de98e511c76045bbe86b03c7ab0d87b3
parent b55f7a8e42b8455aa25d671e31befc5356a7a9da
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Fri, 12 Jun 2026 19:49:30 +0200

chore: update simple-web-app (shared connection pool)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>b55f7a8e42b8455aa25d671e31befc5356a7a9da</id>
<published>2026-06-11T17:43:44Z</published>
<updated>2026-06-11T17:43:44Z</updated>
<title type="text">chore: update simple-web-app (add profiling instrumentation)</title>
<link rel="alternate" type="text/html" href="commit/b55f7a8e42b8455aa25d671e31befc5356a7a9da.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit b55f7a8e42b8455aa25d671e31befc5356a7a9da
parent 65bb75ed0b7c312d7c2f4ec4941da3a4c9724af8
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Thu, 11 Jun 2026 19:43:44 +0200

chore: update simple-web-app (add profiling instrumentation)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>65bb75ed0b7c312d7c2f4ec4941da3a4c9724af8</id>
<published>2026-06-11T13:24:41Z</published>
<updated>2026-06-11T13:24:41Z</updated>
<title type="text">chore: update simple-web-app (fix data-init for SSE)</title>
<link rel="alternate" type="text/html" href="commit/65bb75ed0b7c312d7c2f4ec4941da3a4c9724af8.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 65bb75ed0b7c312d7c2f4ec4941da3a4c9724af8
parent da220f18e02ca0121c69e370b28df813c619c048
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Thu, 11 Jun 2026 15:24:41 +0200

chore: update simple-web-app (fix data-init for SSE)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>da220f18e02ca0121c69e370b28df813c619c048</id>
<published>2026-06-11T12:55:13Z</published>
<updated>2026-06-11T12:55:13Z</updated>
<title type="text">chore: update simple-web-app (fix nginx SSE buffering)</title>
<link rel="alternate" type="text/html" href="commit/da220f18e02ca0121c69e370b28df813c619c048.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit da220f18e02ca0121c69e370b28df813c619c048
parent 64146b7feec4d3f001a692a31090ba3f00281aca
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Thu, 11 Jun 2026 14:55:13 +0200

chore: update simple-web-app (fix nginx SSE buffering)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>64146b7feec4d3f001a692a31090ba3f00281aca</id>
<published>2026-06-11T12:43:16Z</published>
<updated>2026-06-11T12:43:16Z</updated>
<title type="text">chore: update simple-web-app (comment SSE bridge v2)</title>
<link rel="alternate" type="text/html" href="commit/64146b7feec4d3f001a692a31090ba3f00281aca.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 64146b7feec4d3f001a692a31090ba3f00281aca
parent 9d290b72eb0c9746114dc5e0ef3c095106d8cec8
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Thu, 11 Jun 2026 14:43:16 +0200

chore: update simple-web-app (comment SSE bridge v2)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>9d290b72eb0c9746114dc5e0ef3c095106d8cec8</id>
<published>2026-06-11T11:43:49Z</published>
<updated>2026-06-11T11:43:49Z</updated>
<title type="text">chore: update simple-web-app (fix comment SSE workflow)</title>
<link rel="alternate" type="text/html" href="commit/9d290b72eb0c9746114dc5e0ef3c095106d8cec8.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 9d290b72eb0c9746114dc5e0ef3c095106d8cec8
parent 46ec0b7be84d4ff5770c0bb9af06c018c2c1f821
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Thu, 11 Jun 2026 13:43:49 +0200

chore: update simple-web-app (fix comment SSE workflow)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>46ec0b7be84d4ff5770c0bb9af06c018c2c1f821</id>
<published>2026-06-11T10:49:34Z</published>
<updated>2026-06-11T10:49:34Z</updated>
<title type="text">chore: update simple-web-app to use Datastar-compliant SSE responses</title>
<link rel="alternate" type="text/html" href="commit/46ec0b7be84d4ff5770c0bb9af06c018c2c1f821.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 46ec0b7be84d4ff5770c0bb9af06c018c2c1f821
parent 7c57a3faf92e2f1a8f83ba2612dbbb1a6bc4e6bb
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Thu, 11 Jun 2026 12:49:34 +0200

chore: update simple-web-app to use Datastar-compliant SSE responses

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>7c57a3faf92e2f1a8f83ba2612dbbb1a6bc4e6bb</id>
<published>2026-06-10T20:57:07Z</published>
<updated>2026-06-10T20:57:07Z</updated>
<title type="text">chore: update simple-web-app to b29468f</title>
<link rel="alternate" type="text/html" href="commit/7c57a3faf92e2f1a8f83ba2612dbbb1a6bc4e6bb.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 7c57a3faf92e2f1a8f83ba2612dbbb1a6bc4e6bb
parent 64e905a3cfa1dfab2ad2b5101a2f9beae47d6d71
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Wed, 10 Jun 2026 22:57:07 +0200

chore: update simple-web-app to b29468f

Consolidate comments fragment endpoint, add validation-enhancer web component.

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>64e905a3cfa1dfab2ad2b5101a2f9beae47d6d71</id>
<published>2026-06-09T20:34:15Z</published>
<updated>2026-06-09T20:34:15Z</updated>
<title type="text">simple-web-app: bump</title>
<link rel="alternate" type="text/html" href="commit/64e905a3cfa1dfab2ad2b5101a2f9beae47d6d71.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 64e905a3cfa1dfab2ad2b5101a2f9beae47d6d71
parent 813c5567e2f2c4b8c5466a52556f98d01cad7777
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Tue,  9 Jun 2026 22:34:15 +0200

simple-web-app: bump

</content>
</entry>
<entry>
<id>813c5567e2f2c4b8c5466a52556f98d01cad7777</id>
<published>2026-06-08T20:37:03Z</published>
<updated>2026-06-08T20:37:03Z</updated>
<title type="text">chore: bump simple-web-app flake input</title>
<link rel="alternate" type="text/html" href="commit/813c5567e2f2c4b8c5466a52556f98d01cad7777.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 813c5567e2f2c4b8c5466a52556f98d01cad7777
parent e5055aebabe13fe2ce5d02942bded765bde72011
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Mon,  8 Jun 2026 22:37:03 +0200

chore: bump simple-web-app flake input

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>e5055aebabe13fe2ce5d02942bded765bde72011</id>
<published>2026-06-08T20:34:01Z</published>
<updated>2026-06-08T20:34:01Z</updated>
<title type="text">chore: bump simple-web-app flake input</title>
<link rel="alternate" type="text/html" href="commit/e5055aebabe13fe2ce5d02942bded765bde72011.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit e5055aebabe13fe2ce5d02942bded765bde72011
parent 2460e1717c37f4a5d9416bc9fb836a2557d8a653
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Mon,  8 Jun 2026 22:34:01 +0200

chore: bump simple-web-app flake input

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>2460e1717c37f4a5d9416bc9fb836a2557d8a653</id>
<published>2026-06-08T20:27:48Z</published>
<updated>2026-06-08T20:27:48Z</updated>
<title type="text">chore: bump simple-web-app flake input</title>
<link rel="alternate" type="text/html" href="commit/2460e1717c37f4a5d9416bc9fb836a2557d8a653.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 2460e1717c37f4a5d9416bc9fb836a2557d8a653
parent de42617e5b16e73df09351854a9af83b449648d2
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Mon,  8 Jun 2026 22:27:48 +0200

chore: bump simple-web-app flake input

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>de42617e5b16e73df09351854a9af83b449648d2</id>
<published>2026-06-08T16:42:26Z</published>
<updated>2026-06-08T16:42:26Z</updated>
<title type="text">chore: bump simple-web-app flake input</title>
<link rel="alternate" type="text/html" href="commit/de42617e5b16e73df09351854a9af83b449648d2.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit de42617e5b16e73df09351854a9af83b449648d2
parent 4401eaec0fe44ca0c33c4a12100b5f2cc449d007
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Mon,  8 Jun 2026 18:42:26 +0200

chore: bump simple-web-app flake input

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>4401eaec0fe44ca0c33c4a12100b5f2cc449d007</id>
<published>2026-06-08T16:38:52Z</published>
<updated>2026-06-08T16:38:52Z</updated>
<title type="text">chore: bump simple-web-app flake input</title>
<link rel="alternate" type="text/html" href="commit/4401eaec0fe44ca0c33c4a12100b5f2cc449d007.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 4401eaec0fe44ca0c33c4a12100b5f2cc449d007
parent b2bdc91cc99b13f1199844f0de71f36922ba38d3
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Mon,  8 Jun 2026 18:38:52 +0200

chore: bump simple-web-app flake input

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>b2bdc91cc99b13f1199844f0de71f36922ba38d3</id>
<published>2026-06-08T15:54:08Z</published>
<updated>2026-06-08T15:54:08Z</updated>
<title type="text">feat: SSE support for realtime comments, nginx proxy_buffering off</title>
<link rel="alternate" type="text/html" href="commit/b2bdc91cc99b13f1199844f0de71f36922ba38d3.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit b2bdc91cc99b13f1199844f0de71f36922ba38d3
parent 092ac282120f0f188c333c26a6c75803542ae11e
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Mon,  8 Jun 2026 17:54:08 +0200

feat: SSE support for realtime comments, nginx proxy_buffering off

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>092ac282120f0f188c333c26a6c75803542ae11e</id>
<published>2026-06-07T21:11:23Z</published>
<updated>2026-06-07T21:11:23Z</updated>
<title type="text">chore: bump simple-web-app flake input</title>
<link rel="alternate" type="text/html" href="commit/092ac282120f0f188c333c26a6c75803542ae11e.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 092ac282120f0f188c333c26a6c75803542ae11e
parent 4feb53eb1e1ab54e4cbf758fa18b26143688b62f
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  7 Jun 2026 23:11:23 +0200

chore: bump simple-web-app flake input

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>4feb53eb1e1ab54e4cbf758fa18b26143688b62f</id>
<published>2026-06-07T21:04:53Z</published>
<updated>2026-06-07T21:04:53Z</updated>
<title type="text">chore: bump simple-web-app flake input</title>
<link rel="alternate" type="text/html" href="commit/4feb53eb1e1ab54e4cbf758fa18b26143688b62f.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 4feb53eb1e1ab54e4cbf758fa18b26143688b62f
parent ff9ec747f237d747c4c7aaa16ffc046118ef5beb
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  7 Jun 2026 23:04:53 +0200

chore: bump simple-web-app flake input

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>ff9ec747f237d747c4c7aaa16ffc046118ef5beb</id>
<published>2026-06-07T20:30:07Z</published>
<updated>2026-06-07T20:30:07Z</updated>
<title type="text">chore: bump simple-web-app flake input</title>
<link rel="alternate" type="text/html" href="commit/ff9ec747f237d747c4c7aaa16ffc046118ef5beb.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit ff9ec747f237d747c4c7aaa16ffc046118ef5beb
parent aa8b9338ef57ec6bb6c0b500a18770ab95ede16c
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  7 Jun 2026 22:30:07 +0200

chore: bump simple-web-app flake input

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>aa8b9338ef57ec6bb6c0b500a18770ab95ede16c</id>
<published>2026-06-07T19:55:41Z</published>
<updated>2026-06-07T19:55:41Z</updated>
<title type="text">chore: bump simple-web-app flake input</title>
<link rel="alternate" type="text/html" href="commit/aa8b9338ef57ec6bb6c0b500a18770ab95ede16c.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit aa8b9338ef57ec6bb6c0b500a18770ab95ede16c
parent 2135781be9ff4d472f340b5ef018cc10b0a00305
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  7 Jun 2026 21:55:41 +0200

chore: bump simple-web-app flake input

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>2135781be9ff4d472f340b5ef018cc10b0a00305</id>
<published>2026-06-07T19:49:27Z</published>
<updated>2026-06-07T19:49:27Z</updated>
<title type="text">chore: bump simple-web-app flake input</title>
<link rel="alternate" type="text/html" href="commit/2135781be9ff4d472f340b5ef018cc10b0a00305.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 2135781be9ff4d472f340b5ef018cc10b0a00305
parent e6c4bbbfcaa8a038fbdc45ca2e7672d80b1a4386
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  7 Jun 2026 21:49:27 +0200

chore: bump simple-web-app flake input

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>e6c4bbbfcaa8a038fbdc45ca2e7672d80b1a4386</id>
<published>2026-06-07T19:45:32Z</published>
<updated>2026-06-07T19:45:32Z</updated>
<title type="text">feat: use WASM guest for FTS5 search, remove rusqlite</title>
<link rel="alternate" type="text/html" href="commit/e6c4bbbfcaa8a038fbdc45ca2e7672d80b1a4386.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit e6c4bbbfcaa8a038fbdc45ca2e7672d80b1a4386
parent 1fe1ed45e7d5a2d31ae07bcd3a5522e8aa3e6c2a
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  7 Jun 2026 21:45:32 +0200

feat: use WASM guest for FTS5 search, remove rusqlite

Load search_guest.wasm into trailbase, remove DB_PATH and
BindReadOnlyPaths. Add CacheDirectory for wasmtime cache.

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>1fe1ed45e7d5a2d31ae07bcd3a5522e8aa3e6c2a</id>
<published>2026-06-07T19:31:13Z</published>
<updated>2026-06-07T19:31:13Z</updated>
<title type="text">chore: bump simple-web-app flake input</title>
<link rel="alternate" type="text/html" href="commit/1fe1ed45e7d5a2d31ae07bcd3a5522e8aa3e6c2a.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 1fe1ed45e7d5a2d31ae07bcd3a5522e8aa3e6c2a
parent e7c546656be9a2165afbed634419fcb11d8a9b9d
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  7 Jun 2026 21:31:13 +0200

chore: bump simple-web-app flake input

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>e7c546656be9a2165afbed634419fcb11d8a9b9d</id>
<published>2026-06-07T19:21:05Z</published>
<updated>2026-06-07T19:21:05Z</updated>
<title type="text">chore: bump simple-web-app flake input</title>
<link rel="alternate" type="text/html" href="commit/e7c546656be9a2165afbed634419fcb11d8a9b9d.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit e7c546656be9a2165afbed634419fcb11d8a9b9d
parent 4a81cf7c82f1476115dbf278745503344832acec
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  7 Jun 2026 21:21:05 +0200

chore: bump simple-web-app flake input

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>4a81cf7c82f1476115dbf278745503344832acec</id>
<published>2026-06-07T19:02:17Z</published>
<updated>2026-06-07T19:02:17Z</updated>
<title type="text">chore: bump simple-web-app flake input</title>
<link rel="alternate" type="text/html" href="commit/4a81cf7c82f1476115dbf278745503344832acec.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 4a81cf7c82f1476115dbf278745503344832acec
parent 7a88bae0a6dbf1dcb642044e9275f4149938913f
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  7 Jun 2026 21:02:17 +0200

chore: bump simple-web-app flake input

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>7a88bae0a6dbf1dcb642044e9275f4149938913f</id>
<published>2026-06-07T17:34:27Z</published>
<updated>2026-06-07T17:34:27Z</updated>
<title type="text">chore: bump simple-web-app flake input (trailbase v0.28.3)</title>
<link rel="alternate" type="text/html" href="commit/7a88bae0a6dbf1dcb642044e9275f4149938913f.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 7a88bae0a6dbf1dcb642044e9275f4149938913f
parent cf79e0fae8af15a04f0e361d0faf1924fe85c223
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  7 Jun 2026 19:34:27 +0200

chore: bump simple-web-app flake input (trailbase v0.28.3)

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>cf79e0fae8af15a04f0e361d0faf1924fe85c223</id>
<published>2026-06-07T17:17:30Z</published>
<updated>2026-06-07T17:17:30Z</updated>
<title type="text">feat: add FTS5 search via direct SQLite access</title>
<link rel="alternate" type="text/html" href="commit/cf79e0fae8af15a04f0e361d0faf1924fe85c223.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit cf79e0fae8af15a04f0e361d0faf1924fe85c223
parent fe61951ca417a9c899411848c535011eed775463
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  7 Jun 2026 19:17:30 +0200

feat: add FTS5 search via direct SQLite access

Pass DB_PATH to simple-web-app and bind-mount the trailbase data
directory read-only so the app can query the story_fts table directly.

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>fe61951ca417a9c899411848c535011eed775463</id>
<published>2026-06-07T16:41:04Z</published>
<updated>2026-06-07T16:41:04Z</updated>
<title type="text">chore: bump simple-web-app flake input</title>
<link rel="alternate" type="text/html" href="commit/fe61951ca417a9c899411848c535011eed775463.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit fe61951ca417a9c899411848c535011eed775463
parent bfac0ac7292c7319acf92451f01957d2ba018101
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  7 Jun 2026 18:41:04 +0200

chore: bump simple-web-app flake input

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>bfac0ac7292c7319acf92451f01957d2ba018101</id>
<published>2026-06-07T15:59:23Z</published>
<updated>2026-06-07T15:59:23Z</updated>
<title type="text">chore: bump simple-web-app flake input</title>
<link rel="alternate" type="text/html" href="commit/bfac0ac7292c7319acf92451f01957d2ba018101.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit bfac0ac7292c7319acf92451f01957d2ba018101
parent 19e07ba3cea02e87648af12003dd49575a860c5e
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  7 Jun 2026 17:59:23 +0200

chore: bump simple-web-app flake input

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>19e07ba3cea02e87648af12003dd49575a860c5e</id>
<published>2026-06-07T13:51:59Z</published>
<updated>2026-06-07T13:51:59Z</updated>
<title type="text">chore: bump simple-web-app flake input</title>
<link rel="alternate" type="text/html" href="commit/19e07ba3cea02e87648af12003dd49575a860c5e.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 19e07ba3cea02e87648af12003dd49575a860c5e
parent 105bc0b1889640d72f8d3fe7523633c7ed595724
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  7 Jun 2026 15:51:59 +0200

chore: bump simple-web-app flake input

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>105bc0b1889640d72f8d3fe7523633c7ed595724</id>
<published>2026-06-07T13:03:59Z</published>
<updated>2026-06-07T13:03:59Z</updated>
<title type="text">chore: bump simple-web-app flake input</title>
<link rel="alternate" type="text/html" href="commit/105bc0b1889640d72f8d3fe7523633c7ed595724.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 105bc0b1889640d72f8d3fe7523633c7ed595724
parent 412ef17159b556b051b5a538d7c11166882c12fe
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  7 Jun 2026 15:03:59 +0200

chore: bump simple-web-app flake input

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>412ef17159b556b051b5a538d7c11166882c12fe</id>
<published>2026-06-07T11:53:53Z</published>
<updated>2026-06-07T11:53:53Z</updated>
<title type="text">feat: add email verification for trailbase simple-web-app</title>
<link rel="alternate" type="text/html" href="commit/412ef17159b556b051b5a538d7c11166882c12fe.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 412ef17159b556b051b5a538d7c11166882c12fe
parent e7f28b599104bff875e060bd610bd3cf801f391c
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  7 Jun 2026 13:53:53 +0200

feat: add email verification for trailbase simple-web-app

Configure SMTP via localhost:25 (local mailserver) and set
--public-url for correct verification email links.

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>e7f28b599104bff875e060bd610bd3cf801f391c</id>
<published>2026-06-07T11:46:28Z</published>
<updated>2026-06-07T11:46:28Z</updated>
<title type="text">feat: restore simple-web-app and disable daily-tracker</title>
<link rel="alternate" type="text/html" href="commit/e7f28b599104bff875e060bd610bd3cf801f391c.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit e7f28b599104bff875e060bd610bd3cf801f391c
parent e13d8021cc4670c4f9dc60daad5106646d792e7c
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun,  7 Jun 2026 13:46:28 +0200

feat: restore simple-web-app and disable daily-tracker

Switch simple.fnarglebeast.com back to the simple-web-app service
and disable the daily-tracker.

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>e13d8021cc4670c4f9dc60daad5106646d792e7c</id>
<published>2026-06-02T17:13:03Z</published>
<updated>2026-06-02T17:13:03Z</updated>
<title type="text">feat: idk</title>
<link rel="alternate" type="text/html" href="commit/e13d8021cc4670c4f9dc60daad5106646d792e7c.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit e13d8021cc4670c4f9dc60daad5106646d792e7c
parent 27ea1c005b272ecde9b159401116ee310ada90b2
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Tue,  2 Jun 2026 19:13:03 +0200

feat: idk

</content>
</entry>
<entry>
<id>27ea1c005b272ecde9b159401116ee310ada90b2</id>
<published>2026-06-02T17:11:13Z</published>
<updated>2026-06-02T17:11:26Z</updated>
<title type="text">fix</title>
<link rel="alternate" type="text/html" href="commit/27ea1c005b272ecde9b159401116ee310ada90b2.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 27ea1c005b272ecde9b159401116ee310ada90b2
parent c70b1614576b86f4d477911e807ccae483496384
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Tue,  2 Jun 2026 19:11:13 +0200

fix

</content>
</entry>
<entry>
<id>c70b1614576b86f4d477911e807ccae483496384</id>
<published>2026-06-01T19:15:45Z</published>
<updated>2026-06-01T19:15:45Z</updated>
<title type="text">chore: bump daily-tracker (#1)</title>
<link rel="alternate" type="text/html" href="commit/c70b1614576b86f4d477911e807ccae483496384.html" />
<author>
<name>silas</name>
<email>silas@noreply.git.fnarglebeast.com</email>
</author>
<content type="text">commit c70b1614576b86f4d477911e807ccae483496384
parent fd8cffca951f7c6ab6c682d272037b67686e05bb
Author: silas &lt;silas@noreply.git.fnarglebeast.com&gt;
Date:   Mon,  1 Jun 2026 22:15:45 +0300

chore: bump daily-tracker (#1)

Co-authored-by: Forgejo Actions &lt;actions@git.fnarglebeast.com&gt;
Reviewed-on: https://git.fnarglebeast.com/silas/infrastructure/pulls/1

</content>
</entry>
<entry>
<id>fd8cffca951f7c6ab6c682d272037b67686e05bb</id>
<published>2026-06-01T18:26:44Z</published>
<updated>2026-06-01T18:26:44Z</updated>
<title type="text">feat: use Forgejo remote for daily-tracker &amp; fix gitea-runner SSH</title>
<link rel="alternate" type="text/html" href="commit/fd8cffca951f7c6ab6c682d272037b67686e05bb.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit fd8cffca951f7c6ab6c682d272037b67686e05bb
parent e1a589dbd2fe987374c4b1330c3656a38ebc7cb5
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Mon,  1 Jun 2026 20:26:44 +0200

feat: use Forgejo remote for daily-tracker &amp; fix gitea-runner SSH

- Switch daily-tracker flake input from path: to git+ssh:// on Forgejo
- Add git.fnarglebeast.com to runner known_hosts
- Fix known_hosts appending on every restart

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>e1a589dbd2fe987374c4b1330c3656a38ebc7cb5</id>
<published>2026-05-31T20:22:22Z</published>
<updated>2026-05-31T20:22:22Z</updated>
<title type="text">feat: implement daily tracker</title>
<link rel="alternate" type="text/html" href="commit/e1a589dbd2fe987374c4b1330c3656a38ebc7cb5.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit e1a589dbd2fe987374c4b1330c3656a38ebc7cb5
parent 47fdc6b188dbbc055c2dba7b9ea055458db9e85b
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun, 31 May 2026 22:22:22 +0200

feat: implement daily tracker

</content>
</entry>
<entry>
<id>47fdc6b188dbbc055c2dba7b9ea055458db9e85b</id>
<published>2026-05-31T19:33:20Z</published>
<updated>2026-05-31T19:33:20Z</updated>
<title type="text">feat: implement mailserver &amp; others</title>
<link rel="alternate" type="text/html" href="commit/47fdc6b188dbbc055c2dba7b9ea055458db9e85b.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 47fdc6b188dbbc055c2dba7b9ea055458db9e85b
parent 0842b6f6a2644ec2a4a1c23c01c6323bf49141a2
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Sun, 31 May 2026 21:33:20 +0200

feat: implement mailserver &amp; others

</content>
</entry>
<entry>
<id>0842b6f6a2644ec2a4a1c23c01c6323bf49141a2</id>
<published>2026-05-26T16:27:46Z</published>
<updated>2026-05-26T16:27:46Z</updated>
<title type="text">feat: use wezterm instead of foot</title>
<link rel="alternate" type="text/html" href="commit/0842b6f6a2644ec2a4a1c23c01c6323bf49141a2.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 0842b6f6a2644ec2a4a1c23c01c6323bf49141a2
parent 460b37cee9b0cfc4b4bdb6fb4e1e9b4295ef8c62
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Tue, 26 May 2026 18:27:46 +0200

feat: use wezterm instead of foot

</content>
</entry>
<entry>
<id>460b37cee9b0cfc4b4bdb6fb4e1e9b4295ef8c62</id>
<published>2026-05-25T18:47:02Z</published>
<updated>2026-05-25T18:47:02Z</updated>
<title type="text">fix: vimium youtube config</title>
<link rel="alternate" type="text/html" href="commit/460b37cee9b0cfc4b4bdb6fb4e1e9b4295ef8c62.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 460b37cee9b0cfc4b4bdb6fb4e1e9b4295ef8c62
parent b2b27986aa19a1895c88f4352af72108c72b6a14
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Mon, 25 May 2026 20:47:02 +0200

fix: vimium youtube config

</content>
</entry>
<entry>
<id>b2b27986aa19a1895c88f4352af72108c72b6a14</id>
<published>2026-05-25T18:46:26Z</published>
<updated>2026-05-25T18:46:26Z</updated>
<title type="text">feat: remove isis</title>
<link rel="alternate" type="text/html" href="commit/b2b27986aa19a1895c88f4352af72108c72b6a14.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit b2b27986aa19a1895c88f4352af72108c72b6a14
parent b3f31dad01e2d03357714ab10b0eefed56dae0ec
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Mon, 25 May 2026 20:46:26 +0200

feat: remove isis

</content>
</entry>
<entry>
<id>b3f31dad01e2d03357714ab10b0eefed56dae0ec</id>
<published>2026-05-25T18:46:14Z</published>
<updated>2026-05-25T18:46:14Z</updated>
<title type="text">feat: just use KDE Plasma</title>
<link rel="alternate" type="text/html" href="commit/b3f31dad01e2d03357714ab10b0eefed56dae0ec.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit b3f31dad01e2d03357714ab10b0eefed56dae0ec
parent 4d7e1792fef7dee42aeda7ffd663f3649bb51b71
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Mon, 25 May 2026 20:46:14 +0200

feat: just use KDE Plasma

</content>
</entry>
<entry>
<id>4d7e1792fef7dee42aeda7ffd663f3649bb51b71</id>
<published>2026-05-25T16:30:33Z</published>
<updated>2026-05-25T16:30:33Z</updated>
<title type="text">feat: use KeePassXC for passwords</title>
<link rel="alternate" type="text/html" href="commit/4d7e1792fef7dee42aeda7ffd663f3649bb51b71.html" />
<author>
<name>Silas Brack</name>
<email>silasbrack@gmail.com</email>
</author>
<content type="text">commit 4d7e1792fef7dee42aeda7ffd663f3649bb51b71
parent 06c4331318d38e936051d45bd6f9f4e2cef18ccf
Author: Silas Brack &lt;silasbrack@gmail.com&gt;
Date:   Mon, 25 May 2026 18:30:33 +0200

feat: use KeePassXC for passwords

</content>
</entry>
</feed>
