herbatrium/README.md
Till JS 214b852f99
Some checks are pending
CI / validate (push) Waiting to run
η-0: Repo-Skelett
Citizen-Science-App für botanische Beobachtungen — föderierte App
des mana e.V.-Ökosystems. Erste Vereins-App mit 3-Schicht-Datenmodell
(Species/Specimen/Observation), 3-Stufen-GPS (exact/rounded_100m/
region_only) und fail-closed Sensitivity-Schutz für FFH-Anhang-IV-
Arten.

Stand η-0 (Plan v0.2 + Detail-Pass, Architect+Compliance-Audit 2026-05-17):
- Workspace: pnpm/turbo/tsconfig/prettier
- apps/api: Hono+Bun mit /healthz, /readyz, /healthz/details,
  /.well-known/mana-app.json. Smoke alle vier Endpoints grün.
- apps/web: SvelteKit 2 + Svelte 5 + Tailwind v4, Herbarium-Theme,
  Landing-Page mit Phasen-Plan. svelte-check 0 errors / 0 warnings.
- docker-compose: postgis/postgis:16-3.4 auf 5449, init-postgis.sql
- app-manifest.json: validiert gegen @mana/shared-share-protocol@0.4.0
  (2 shares, 2 accepts, 3 tools)
- Doku: CLAUDE.md, README.md, STATUS.md

Cross-Repo: @mana/shared-share-protocol@0.4.0 published mit 4 neuen
Share-Types (mana/photo, mana/geo-point, mana/plant-observation,
mana/plant-specimen). Plan: mana/docs/playbooks/HERBATRIUM_GREENFIELD.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 18:10:20 +02:00

4.1 KiB
Raw Permalink Blame History

Herbatrium

Citizen-Science-App für botanische Beobachtungen in freier Natur. Foto, GPS, KI-Klassifikation, kollaborative Specimen-Historie. Datensouverän und Open-Source.

Föderierte App des Vereins mana e.V. — neben Cardecky, Memoro, Werdrobe, Seepuls und weiteren Peer-Apps im selben Ökosystem.

Was es macht

User:innen laden Pflanzen-Fotos hoch. Das System klassifiziert die Art (mana-llm + Pl@ntNet als Verifier), legt einen GPS-verankerten Specimen-Datensatz an, und ermöglicht es mehreren Beobachter:innen, denselben physischen Pflanzen-Standort über Zeit zu dokumentieren — Wachstum, Blüte, Schädigung, Verschwinden.

Spätere Ausbaustufe: 3D-Rekonstruktion aus Mehr-Foto-Beobachtungen.

Eigenschaften

  • 3-Schicht-Datenmodell: Species → Specimen → Observation
  • Public-First mit explizitem Lizenz-Picker (CC-BY-SA-4.0 / CC-BY-NC / ARR)
  • 3-Stufen-GPS-Sichtbarkeit: exact (Owner), rounded_100m (Public-Feed), region_only (geschützte Arten, ~3050 km Region)
  • Fail-closed Sensitivity: automatische Schutzart-Liste (GBIF-IUCN + FFH-Anhang-IV), Default is_sensitive=true bis Lookup das Gegenteil belegt
  • PostGIS-basiertes Specimen-Matching binnen species-spezifischem Radius (Bäume 5 m / Stauden 30 m / Default 20 m)
  • 3-Layer-Foto-Storage: original verlustfrei (Owner-only, signed URL, Access-Log), display 2048px WebP EXIF-stripped, thumb 512px

Quick-Start (Entwicklung)

# Voraussetzung: Verdaccio-Token in ~/.npmrc (siehe unten),
#                Docker laufend, pnpm 9.15.x

pnpm install                       # gegen pkg.mana.how
docker compose up -d               # PostGIS :5449
pnpm --filter ./apps/api dev       # Hono+Bun :3101
pnpm --filter ./apps/web dev       # SvelteKit :3102

# Smoke-Test:
curl http://localhost:3101/healthz
curl http://localhost:3101/.well-known/mana-app.json
open http://localhost:3102

Verdaccio-Token

Das Repo zieht @mana/*-Pakete aus dem privaten Vereins-Verdaccio (pkg.mana.how). Token einmalig holen:

npm login --registry=https://pkg.mana.how --scope=@mana
# oder: existierenden Token aus ~/.npmrc kopieren

In CI: MANA_NPM_TOKEN als GitHub-Secret hinterlegen.

Stack

  • Web: SvelteKit 2 + Svelte 5 (runes only) + Tailwind v4
  • API: Hono + Bun + Drizzle ORM
  • DB: PostgreSQL 16 + PostGIS 3.4
  • Klassifikation: mana-llm (Gemini Pro Vision, primär) + Pl@ntNet (AGPV, sekundär als Verifier)
  • Auth: mana-auth (Better-Auth + EdDSA-JWT via JWKS-Cache)
  • Storage: mana-media (MinIO/S3)
  • Geo: PostGIS + mana-geocoding
  • Map: MapLibre + Cloudflare-Pull-through-Cache (OSM)

Ports: API 3101, Web 3102, Postgres 5449.

Phasen-Roadmap

Phase Inhalt
η-0 Repo-Skelett — aktuell (2026-05-17)
η-1 Solo-Upload + 3-Layer-Photo-Pipeline + Drizzle-Schema
η-2 Klassifikation (mana-llm primär, Pl@ntNet Verifier) + GBIF/FFH-Sensitivity
η-3 Specimen-Matching mit PostGIS + Capture-Map
η-4 Public-Feed + Lizenz-Picker + 3-Stufen-GPS (Hard-Gate)
η-5 Föderations-Endpoints (Share/Tools/DSGVO)
η-6 3D-Pipeline-Vorbereitung auf mana-gpu
η-7 Polish + Take-Down-UI + AGB-Seite + Live (Hard-Gate)
η-8+ Native iOS, Local-First, 3D-Viewer (opportunistisch)

Details in STATUS.md und im Greenfield-Playbook.

Lizenz

Code: zur Klärung beim Live-Gang. Inhalte (Public-Observations): expliziter Lizenz-Picker, CC-BY-SA-4.0 empfohlen für GBIF-Re-Sync-Kompatibilität.

Kontakt