Notizen und Links zu Obstsorten — Verzeichnis der Obstsorten, verknüpft mit treedoc- und OSM-Bäumen jeder Sorte.
  • Go 95.1%
  • PLpgSQL 4.3%
  • Shell 0.6%
Find a file
2026-07-29 09:59:21 +02:00
cmd fix(obstdoc): Genussreife endet nie vor der Ernte; rückwärts laufende Ernte ist ein Fehler 2026-07-28 10:42:24 +02:00
docs feat: Subnav oben, Karte-Link aus Koordinaten, Bild-Embeds raus, tywb-API-Doc 2026-07-20 12:22:27 +02:00
internal feat(sources): eva & adam ins Quellenregister 2026-07-29 08:15:21 +02:00
schema feat(obstdoc): Bestand-Feld entfernt; generierte Beschreibung geschärft 2026-07-25 13:17:44 +02:00
scripts Initial commit: obstdoc — Obstsorten-Verzeichnis 2026-07-20 11:10:23 +02:00
web feat(obstdoc): 'Meine Bäume' — Übersicht der eigenen Bongerts + ihrer Bäume 2026-07-28 00:34:29 +02:00
.gitignore docs(treedoc): Arbeitsanweisung Gattung für Birnenbäume 2026-07-29 09:59:02 +02:00
CHANGELOG.md release: v1.8.0 2026-07-29 09:59:21 +02:00
config.yaml.example feat: statische Sorte-Seiten + JSON + JSONSchema (obstdoc-render) 2026-07-20 16:48:30 +02:00
go.mod feat(obstdoc): LLM-Tooling (notegen, suggest) + generierte Beschreibung getrennt vom Vault 2026-07-25 09:07:33 +02:00
go.sum feat(obstdoc): LLM-Tooling (notegen, suggest) + generierte Beschreibung getrennt vom Vault 2026-07-25 09:07:33 +02:00
README.md Initial commit: obstdoc — Obstsorten-Verzeichnis 2026-07-20 11:10:23 +02:00
treedoc-birnen-anweisung.md docs(treedoc): Arbeitsanweisung Gattung für Birnenbäume 2026-07-29 09:59:02 +02:00

obstdoc

Ein Verzeichnis der Obstsorten — Apfel, Birne, Quitte, Speierling und die anderen Fruchtarten aus dem L&F-Vault. Während treedoc den einzelnen Baum dokumentiert, dokumentiert obstdoc die Sorte und zeigt zu jeder Sorte die dokumentierten (treedoc) und die in OpenStreetMap kartierten Bäume dieser Sorte.

Das Go-Modul heißt forge.23.nu/md/obstdoc. Es ist wie treework aufgebaut: eigener Postgres-Store, Bäume read-only über die öffentliche treedoc-HTTP-API, optionales OSM-OAuth nur für Identität.

Datenfluss

  L&F-Vault (Obstsorten/*.md)          treedoc-API        OSM / Overpass
        │  obstdoc-import --vault           │  --trees          │  --trees
        ▼                                   ▼                   ▼
  ┌──────────────────────────────────────────────────────────────────┐
  │  PostgreSQL  (DB: obstdoc, eigene DB — NICHT das replizierte      │
  │  treestore).  sorten + fruchtarten + sorten_namen + baeume-Cache  │
  │  Der Sorte↔Baum-Link ist die VIEW sorten_baeume (abgeleitet).     │
  └───────────────────────────────┬──────────────────────────────────┘
                                  ▼
                          ┌───────────────┐
                          │   obstdoc     │  Anzeige-Server (read-only)
                          └───────────────┘

Der Kernpunkt: Namen sind uneinheitlich (Vault ist NFD, treedoc/OSM sind NFC; Bäume tragen Klammer-Synonyme wie „Peter Broich (Kaiser Willhelm)"). Alle Namensauflösung läuft über die SQL-Funktion obst_key() und die Tabelle sorten_namen. Der Sorte↔Baum-Link ist bewusst nicht gespeichert, sondern die View sorten_baeume — eine neue Alias-Zeile verknüpft alle betroffenen Bäume auf einmal, nichts wird stale.

Komponenten

Pfad Zweck
cmd/obstdoc HTTP-Anzeige-Server
cmd/obstdoc-import Lokales Tool: Vault-Import + Baum-Cache-Refresh
internal/vault Parser für die Obstsorten-Notizen (Frontmatter, Ernte-Codes, …)
internal/store Postgres-Store + Schema (schema.sql)
internal/treedoc Read-only-Client der treedoc-API
internal/osm Overpass-Client (OSM-Bäume mit Cultivar-Tag)
internal/sync Baum-Cache aus treedoc + OSM aktualisieren
internal/auth OSM-OAuth (identisch zu treework)

Einrichten & Starten

# 1. Datenbank einmalig anlegen (Superuser):
#    CREATE DATABASE obstdoc; \c obstdoc; CREATE EXTENSION IF NOT EXISTS postgis;

cp config.yaml.example config.yaml   # db_dsn + vault_obstsorten setzen

# 2. Sorten importieren + Baum-Cache füllen (lokal, liest Vault + treedoc + OSM):
go run ./cmd/obstdoc-import            # == --all

# 3. Server starten:
go run ./cmd/obstdoc                   # http://localhost:8768

obstdoc-import ist idempotent: Notizen werden per Dateiname erfasst und bei unverändertem Inhalt übersprungen; der Baum-Cache wird bei jedem Lauf komplett neu aufgebaut. Nach einer Parser- oder Schema-Änderung ist ein erneuter Lauf der vorgesehene Reparaturweg.

Konfiguration (Env-Overrides)

Variable Zweck
OBSTDOC_DB_DSN Postgres-DSN der obstdoc-DB
OBSTDOC_VAULT Pfad zum Obstsorten/-Ordner
TREEDOC_BASE_URL treedoc-API-Basis
OVERPASS_ENDPOINT / OVERPASS_RADIUS_KM OSM-Sync
OBSTDOC_OSM_CLIENT_ID / _SECRET / OBSTDOC_SESSION_SECRET OSM-OAuth