Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,6 @@ blog/traffic-analytics-data/
karakeep/data/
karakeep/meilisearch-data/
karakeep/meilisearch-data-old-1.11.1/
healthlog/data/
healthlog/pgdata/
apprise/config/
uptime-kuma/data/
ntfy/data/
Expand Down
11 changes: 8 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ in front of the lot.
| Contact sync (this repo) | — (no URL; launchd job) | Mac (cross-provider address-book sync: Proton + Google + 2× Microsoft → one canonical store, git-versioned on Forgejo) |
| [ntfy](https://github.com/binwiederhier/ntfy) | `ntfy.mathewcsims.uk` | Pi (self-hosted push notifications — on trial alongside Discord; auth default-deny, fed by Apprise) |
| Trivy scan (this repo) | — (no URL; launchd job) | Mac (weekly vulnerability scan of every pinned image in the repo, notifies on new CVEs) |
| [HealthLog](https://github.com/MBombeck/HealthLog) | `healthlog.mathewcsims.uk` | Mac (self-hosted health tracking: vitals, sleep, mood questionnaires, Samsung Health sync — **medications moved off to [MedTimer](https://github.com/Futsch1/medTimer) 2026-08-04**, see SETUP.md; PolyForm Noncommercial licensed, passkey-only login, registration disabled after initial setup) |
| [chhoto-url](https://github.com/SinTan1729/chhoto-url) | `msims.link` | Pi (self-hosted URL shortener on its own short domain — bare root redirects to `mathewcsims.uk` rather than showing the shortener's own login screen) |
| [Wanderer](https://github.com/open-wanderer/wanderer) | `wanderer.mathewcsims.uk` | Mac (self-hosted GPS trail/cycle-ride log — GPX/FIT/TCX/KML import; Meilisearch + PocketBase sidecars; posts a Memo to Owl on every new ride via a PocketBase-realtime relay) |
| [Immich](https://immich.app) | `immich.mathewcsims.uk` | **slartibartfast** (self-hosted photo/video library with local CLIP semantic search + face recognition — first app on the third host; LAN/tailnet-only, local accounts, no public sharing) |
Expand All @@ -40,14 +39,19 @@ in front of the lot.

### Decommissioned

Four apps were torn down on **2026-08-04** for not earning their keep:
Five apps have been torn down for not earning their keep — four on
**2026-08-04**, and HealthLog on **2026-08-07**:

- **Marque** — a private, work-focused third Memos instance (2 memos, 1 user).
- **Nimbus** — `dashboard.mathewcsims.uk`, the Pi-resident homelab dashboard.
- **TimeTagger** — `time.mathewcsims.uk`, fronted by oauth2-proxy for
Infomaniak SSO (zero time records logged).
- **Speedtest Tracker** — `speedtest.mathewcsims.uk`, Pi-resident and
LAN-only, polling every 15 minutes (3,135 results kept).
- **HealthLog** — `healthlog.mathewcsims.uk`, self-hosted health tracking.
Medication tracking had already moved to [MedTimer](https://github.com/Futsch1/medTimer)
on 2026-08-04, and a better solution now covers the rest. 38,587
measurements and 116 workouts preserved in the final dump.

Containers, images, volumes, networks, Caddy site blocks, Uptime Kuma
monitors and DNS records are all gone; their compose projects live on only
Expand All @@ -59,7 +63,8 @@ on the relevant host — which is itself a Kopia source, so the archives ride
along with every future backup instead of ageing out of a dormant source's
retention. Every archive was restore-tested back out of Backblaze B2 and
matched its source by sha256. Each app's Proton Pass item (OIDC client
secrets, JWT secret, Nimbus's DB password, Speedtest's `APP_KEY`) was kept
secrets, JWT secret, Nimbus's DB password, Speedtest's `APP_KEY`,
HealthLog's database password) was kept
for the same reason. The rebuild instructions remain in
[SETUP.md](SETUP.md), retitled as decommissioned rather than deleted.

Expand Down
22 changes: 17 additions & 5 deletions SETUP.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,9 +117,6 @@ section below says which.
| `karakeep/compose.yaml` | **Mac** | Karakeep + Meilisearch; reads secrets from Proton Pass |
| `karakeep/data/` | **Mac** | **your bookmarks/assets/archives live here** |
| `karakeep/meilisearch-data/` | **Mac** | search index |
| `healthlog/compose.yaml` | **Mac** | HealthLog (medication reminders, vitals) + Postgres sidecar; personal health data — see its own section below; reads secrets from Proton Pass |
| `healthlog/data/` | **Mac** | **your health data, encrypted at rest, lives here** |
| `healthlog/pgdata/` | **Mac** | Postgres datadir |
| `bookstack/compose.yaml` | **Mac** | BookStack + MariaDB sidecar; LAN-only (`author.mathewcsims.uk`); reads secrets from Proton Pass |
| `bookstack/config/` | **Mac** | **your wiki pages/books/shelves live here** |
| `bookstack/db/` | **Mac** | **BookStack's MariaDB datadir** |
Expand Down Expand Up @@ -583,7 +580,7 @@ The Pi runs Tailscale, configured as both a subnet router (advertising the
LAN) and an exit node — meaning devices elsewhere can reach this network
through it, including while off any physical LAN entirely. Every LAN-gated
app in this repo (`mc37`, `apprise`, `vikunja-relay`, `backup`, `author`,
`paperless`, `fj`, `healthlog`, `docs`)
`paperless`, `fj`, `docs`)
needs **three** separate things to actually be reachable this way. Each is
necessary and none is sufficient, which is what makes this so awkward to
debug: with any one missing, every check you can run on the server comes
Expand Down Expand Up @@ -2285,7 +2282,22 @@ binaries actually run):

---

## HealthLog (https://healthlog.mathewcsims.uk)
## HealthLog (https://healthlog.mathewcsims.uk) — DECOMMISSIONED

> **DECOMMISSIONED 2026-08-07.** Torn down once a better solution covered
> what was left: medication tracking had already moved to MedTimer on
> 2026-08-04, and the remaining tracking was not being used. Containers,
> images, network, the Caddy site block, the Uptime Kuma monitor and the DNS
> records are all gone; `healthlog/` and
> `scripts/pass-create-healthlog-secrets.sh` were removed from this repo and
> survive only in git history. The section below is kept verbatim as the
> rebuild recipe. THE HEALTH DATA IS KEPT: a final `pg_dump` (133 tables,
> 38,587 measurements, 116 workouts) and a cold `tar.gz` of the whole app
> directory including the Postgres datadir live in
> `db-dumps/decommissioned/` on the Mac, both restore-tested out of
> Backblaze B2 and matched by sha256. The **HealthLog** Proton Pass item was
> deliberately retained.


[HealthLog](https://github.com/MBombeck/HealthLog) — self-hosted health
tracker: medication reminders (over ntfy/Web Push/Telegram/APNs), vitals
Expand Down
5 changes: 3 additions & 2 deletions docs/compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ services:
postgres:
# 17-alpine. Pinned by digest, not the tag alone — tags aren't immutable,
# so a bare version tag can still silently move. Same pattern as
# ../healthlog/compose.yaml, this repo's other Postgres app.
# ../paperless/compose.yaml and the wider repo convention.
image: postgres:17-alpine@sha256:742f40ea20b9ff2ff31db5458d127452988a2164df9e17441e191f3b72252193
container_name: docs-postgres
restart: unless-stopped
Expand Down Expand Up @@ -144,7 +144,8 @@ services:
# published port must be bound to the Mac's *actual* LAN IP —
# podman-machine cannot bind 0.0.0.0 to the real interface. The Pi's
# reverse proxy connects to this address. 3000 is HedgeDoc's own default
# but karakeep already holds it (the same reason healthlog took 3200),
# but karakeep already holds it (the same reason healthlog took 3200
# before it was decommissioned),
# so 3500. The router does NOT forward 3500, so this is never directly
# internet-facing even before the Caddy LAN-gate is considered.
- "10.0.1.14:3500:3000"
Expand Down
131 changes: 0 additions & 131 deletions healthlog/compose.yaml

This file was deleted.

6 changes: 3 additions & 3 deletions immich/compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
#
# Exposure: LAN/tailnet-gated behind Caddy (immich.mathewcsims.uk), never
# internet-reachable. Registration must be closed once the one real account
# exists — same first-registrant-becomes-admin race as HealthLog/Wanderer.
# exists — same first-registrant-becomes-admin race as Wanderer.
#
# v3.1.0's only breaking change is dropping iOS 14 support — irrelevant for
# a fresh install. Immich ships breaking changes regularly, so read the
Expand Down Expand Up @@ -83,7 +83,7 @@ services:
condition: service_healthy
environment:
# Reached by SERVICE name over the project's default network, same as
# HealthLog's postgres sidecar — not container name, not IP.
# a postgres sidecar — not container name, not IP.
DB_HOSTNAME: database
DB_USERNAME: immich
DB_DATABASE_NAME: immich
Expand Down Expand Up @@ -177,7 +177,7 @@ services:
database:
# Immich's OWN Postgres image, not stock postgres — it carries
# VectorChord + pgvecto.rs, the vector extensions smart search depends
# on. Deliberately NOT aligned with HealthLog's postgres:16-alpine;
# on. Deliberately NOT aligned with the repo's other postgres pins;
# substituting stock Postgres breaks Immich outright. Digest is
# upstream's own pin.
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
Expand Down
9 changes: 4 additions & 5 deletions kopia-mac/backup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,8 @@ echo $$ > "$LOCK_DIR/pid"
trap 'rm -rf "$LOCK_DIR"' EXIT INT TERM

# Dump every database to a consistent, restorable file BEFORE snapshotting
# anything. Without this, the datadir paths below (healthlog/pgdata,
# blog/db, bookstack/db, and every SQLite file) are copied while their
# anything. Without this, the datadir paths below (blog/db, bookstack/db,
# and every SQLite file) are copied while their
# services are running, which can capture torn pages or a .db and -wal that
# disagree — a backup that looks valid until you try to restore it. See
# scripts/dump-databases.sh for the per-engine reasoning.
Expand All @@ -144,7 +144,8 @@ fi
# it into copyparty/data or the NAS mount below and it would be swept up
# here with no change to this file. That was considered and declined:
# backup is Syncthing -> Proton Drive, off this repo's infrastructure
# entirely. Don't wire it in. See SETUP.md's HealthLog section for the
# entirely. Don't wire it in. See SETUP.md's (now decommissioned)
# HealthLog section for the
# full reasoning (incl. why the copyparty route would cost vague-403).
#
# Paperless is deliberately HALF a source. paperless/data (SQLite db, Tantivy
Expand Down Expand Up @@ -218,8 +219,6 @@ SOURCES="
$REPO_ROOT/db-dumps
$REPO_ROOT/karakeep/data
$REPO_ROOT/karakeep/meilisearch-data
$REPO_ROOT/healthlog/data
$REPO_ROOT/healthlog/pgdata
$REPO_ROOT/vikunja/db
$REPO_ROOT/vikunja/files
$REPO_ROOT/blog/db
Expand Down
3 changes: 2 additions & 1 deletion litellm/compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,8 @@ name: litellm

services:
db:
# Same pin as HealthLog's Postgres — one CVE review covers both, and its
# Was the same pin as HealthLog's Postgres (decommissioned 2026-08-07);
# kept for continuity, and its
# position is already documented (15 fixable HIGHs, all Go stdlib in a
# helper binary, no better alternative — see SETUP.md).
image: postgres:16.14-alpine@sha256:57c72fd2a128e416c7fcc499958864df5301e940bca0a56f58fddf30ffc07777
Expand Down
Loading