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

108 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.
- **Web:** [herbatrium.mana.how](https://herbatrium.mana.how) *(noch nicht deployed)*
- **API:** [herbatrium-api.mana.how](https://herbatrium-api.mana.how) *(noch nicht deployed)*
- **Plan:** [`mana/docs/playbooks/HERBATRIUM_GREENFIELD.md`](../mana/docs/playbooks/HERBATRIUM_GREENFIELD.md)
- **Status:** [`STATUS.md`](STATUS.md) — aktueller Phasen-Stand
## 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)
```bash
# 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:
```bash
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`](STATUS.md) und im
[Greenfield-Playbook](../mana/docs/playbooks/HERBATRIUM_GREENFIELD.md).
## 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
- **Verein:** [verein.mana.how](https://verein.mana.how)
- **E-Mail:** kontakt@mana.how
- **Issue-Tracker:** [git.mana.how/till/herbatrium](https://git.mana.how/till/herbatrium) *(folgt)*