No description
  • Go 56.7%
  • TypeScript 37.5%
  • CSS 3.2%
  • HTML 1.1%
  • Python 0.8%
  • Other 0.6%
Find a file
2026-09-14 13:41:30 +02:00
cmd feat(bongert): Gebrauchszeiten-Grafik je Bongert 2026-09-14 13:41:08 +02:00
config feat(vision): maschinelle Bildanalyse, Stufe 0 2026-08-10 14:55:39 +02:00
docs feat(imports): TreePhoto-Commit schreibt ins audit_log 2026-08-10 10:53:50 +02:00
internal feat(bongert): Gebrauchszeiten-Grafik je Bongert 2026-09-14 13:41:08 +02:00
schema fix(imports): dauerhaft fehlende Submissions verwerfen statt ewig erneut zu holen 2026-09-11 21:34:41 +02:00
scripts fix: release.sh prints jj-aware push instructions 2026-06-15 12:57:20 +02:00
vision revert(vision): Freistellung abgeschaltet — sie funktioniert nicht 2026-08-10 22:53:44 +02:00
.gitignore security: config.sandbox.yaml aus dem Tracking nehmen (Sandbox-Key + DB-Passwort) 2026-07-26 11:21:08 +02:00
.golangci.yml chore(lint): make lint ist grün — 20 Altlasten weg 2026-08-25 08:01:36 +02:00
CHANGELOG.md release: v1.189.0 2026-09-14 13:41:30 +02:00
CLAUDE.md fix(blur): ersetzte Fotos sichtbar machen — Cache-Control und Versionsmarke 2026-09-12 10:41:33 +02:00
config.sandbox.yaml.example security: config.sandbox.yaml aus dem Tracking nehmen (Sandbox-Key + DB-Passwort) 2026-07-26 11:21:08 +02:00
config.yaml.example feat(vision): maschinelle Bildanalyse, Stufe 0 2026-08-10 14:55:39 +02:00
DEPLOY.md refactor: Review-Stage-Pipeline entfernt (treephoto-import, cluster, track) 2026-07-26 10:02:28 +02:00
go.mod URL in OSM etc 2026-06-18 07:46:32 +02:00
go.sum URL in OSM etc 2026-06-18 07:46:32 +02:00
INSTALL.md chore(domain): treedoc.schnittsyndikat.de ist der primäre Name 2026-08-06 08:14:02 +02:00
Makefile feat(cli): Hilfetext für alle Kommandozeilenprogramme 2026-08-13 23:29:31 +02:00
README.md refactor(meta): oEmbed entfernen, Vorschaukarten allein über Open Graph 2026-08-13 14:00:54 +02:00

treedoc / treelink

Werkzeuge zum Erfassen, Verwalten und Publizieren von Fotos und Stammdaten von Obstbäumen. Das Go-Modul heißt forge.23.nu/md/treedoc.

Bäume werden mit treephoto.app (iPhone) fotografiert, in treedoc redaktionell bearbeitet und als statisches Archiv nach S3 ausgespielt. Zusätzliche Quelle ist der L&F-Obsidian-Vault.

Schnellstart

# Systemabhängigkeiten (Debian/Ubuntu)
apt install libimage-exiftool-perl imagemagick

make build          # React-UI + alle cmd/-Binaries nach bin/
./bin/treedoc       # → http://localhost:8767

Konfiguration: config.yaml (Vorlage: config.yaml.example; enthält Secrets und ist gitignored). Die DB-DSN kommt aus db_dsn bzw. TREEDOC_DB_DSN.

make check                                      # fmt, vet, lint, typecheck, tests
make sandbox-seed N=10 && make sandbox-treedoc  # Spielwiese auf :8768

Architektur, Paketstruktur und Datenflüsse: CLAUDE.md. Installation und Betrieb: INSTALL.md, DEPLOY.md. Änderungen: CHANGELOG.md.

Statische Archiv-Seite (store/{id}/index.html)

Pro Baum wird bei jedem Speichern eine statische, dependency-freie HTML-Seite nach S3 geschrieben (Langzeit-Archiv). Die Vorlage ist:

internal/treestore/tree-static.html.tmpl

Das ist eine Go-html/template-Datei und wird per //go:embed fest ins Binary gebacken. Zum Ändern des Aussehens diese Datei bearbeiten und neu bauen (make build bzw. go build ./...). Die Seite muss ohne JavaScript und ohne externe Abhängigkeiten auskommen.

Vorschaukarten (Mastodon & Co.) kommen ausschließlich aus den Open-Graph-Marken im Seitenkopf. Einen oEmbed-Beipackzettel gibt es bewusst nicht: Mastodon fragt oEmbed zuerst und liest Open Graph nur, wenn das nichts ergibt — die schmalere Auskunft gewinnt sonst gegen die reichere.

Alternativ lässt sich zur Laufzeit eine andere Vorlage per Flag übergeben (treedoc --template pfad/zur/vorlage.tmpl, ebenso cmd/render --template …); ist der Pfad leer oder unlesbar, greift die eingebettete Vorlage.

Bestehende Seiten neu rendern (z. B. nach einer Template-Änderung):

go run ./cmd/render --base https://treedoc.foxel.org --prefix store   # alle Bäume
go run ./cmd/rerender --base https://treedoc.foxel.org abc123 def456  # nur diese IDs