正在加载完整 README。 以下为已保存的摘录。
Kamerplanter is a self-hosted plant lifecycle management system for indoor and outdoor growing — covering everything from seed to harvest.查看完整 README ↗Kamerplanter is a self-hosted plant lifecycle management system for indoor and outdoor growing — covering everything from seed to harvest.
Whether you're a home grower managing a grow tent, a houseplant owner trying to keep your plants alive, a hobby gardener planning raised beds and crop rotations, or running a community garden with shared responsibilities — Kamerplanter adapts to your experience level and scale. It supports vegetables, herbs, houseplants, and ornamentals with nutrient planning, growth phase tracking, adaptive care reminders, photo-based plant identification, a knowledge assistant, and Home Assistant integration.
| Layer | Technology |
|---|---|
| Backend | Python 3.14+, FastAPI, Celery, Authlib |
| Frontend | React 19, TypeScript 6, MUI 9, Redux Toolkit, Vite 8 |
| Knowledge Service | FastAPI, pgvector, ONNX embeddings, cross-encoder reranking |
| Plant Recognition | Pl@ntNet API, self-hosted DINOv2 image matching |
| Primary DB | ArangoDB 3.11+ (documents + graph) |
| Vector DB | PostgreSQL 18 + pgvector |
| Time-Series DB | TimescaleDB 2.13+ |
| Cache / Queue | Redis 7.2+ (Valkey) |
| Smart Home | Home Assistant custom integration |
| Orchestration | Kubernetes, Helm, Skaffold |
| Testing | pytest, vitest, Selenium E2E |
Kamerplanter is composed of the following services. Core services start by default; optional services are enabled via Docker Compose profiles (vectordb, ollama, timescaledb) or their dedicated Skaffold modules.
| Container | Image / Base | Role | Default |
|---|---|---|---|
backend | kamerplanter-backend (FastAPI) | REST API and business logic (5-layer architecture) | ✅ Core |
celery-worker | kamerplanter-backend | Asynchronous background tasks (enrichment, care reminders, imports) | ✅ Core |
celery-beat | kamerplanter-backend | Scheduler for periodic tasks (retention, watering, reminders) | ✅ Core |
frontend | kamerplanter-frontend (React + nginx) | Web UI served as static assets via nginx | ✅ Core |
arangodb | arangodb:3.12 | Primary database — documents + graph (species, lineage, companion planting) | ✅ Core |
valkey | valkey/valkey:9 | Redis-compatible cache and Celery broker/result backend | ✅ Core |
vectordb | kamerplanter-vectordb (PostgreSQL 18 + pgvector) | Vector store for RAG embeddings and image-match vectors | ⚙️ vectordb |
knowledge-service | kamerplanter-knowledge-service (FastAPI) | RAG-based plant knowledge assistant with pluggable LLM backends | ⚙️ AI |
embedding-service | kamerplanter-embedding-service (ONNX Runtime) | Text embedding generation for RAG (no PyTorch at runtime) | ⚙️ AI |
reranker-service | kamerplanter-reranker-service (ONNX Runtime) | Cross-encoder reranking to improve RAG retrieval quality | ⚙️ vectordb |
inference-service | kamerplanter-inference-service (ONNX Runtime) | Self-hosted DINOv2 image matching for plant & pest recognition | ⚙️ AI |
ollama | ollama/ollama | Local LLM inference backend for the knowledge assistant | ⚙️ |
cp .env.example .env # configure passwords
docker compose up --build # start all core services
Open http://localhost:8080 and log in with [email protected] / demo-passwort-2024.
Optional services (AI assistant, time-series) can be enabled via Docker Compose profiles. For Kubernetes-based development with hot-reload, see the Skaffold setup below.
Prerequisites: Docker, Skaffold, a local Kubernetes cluster (Kind/k3s/minikube), Task (optional), Node.js 25+, Python 3.14+.
task setup # create Kind cluster
skaffold dev --trigger=manual --port-forward # full stack dev loop
Common tasks via Taskfile:
task test:backend # pytest (821+ tests)
task test:frontend # vitest (198+ tests)
task test:e2e # Selenium E2E
task lint:backend # ruff
task lint:frontend # ESLint
task ha:deploy # deploy HA integration to pod
task docs:serve # MkDocs local preview
task claude # Claude Code + nolte portfolio plugins loaded
task claude starts Claude Code with the nolte-shared + nolte-engineering
portfolio plugins loaded from a local claude-shared checkout (override its path
with NOLTE_CLAUDE_SHARED). See CLAUDE.md §"Claude Code plugin adoption".
Full documentation (architecture, API reference, guides) is available at nolte.github.io/kamerplanter.
Kamerplanter is complemented by companion projects, each with its own focus:
Feature branches from develop, PRs against develop. Prefixes: feature/, fix/, chore/, docs/.
This project is a vibe coding experiment — built almost entirely through conversational AI prompting with Claude Code. The specifications, architecture, domain models, backend, frontend, Helm charts, E2E tests, and documentation were all developed this way.
MIT License. See LICENSE for details.
ollamatimescaledb | timescale/timescaledb:2.28 | Time-series store for sensor data with automatic downsampling | ⚙️ timescaledb |
knowledge | kamerplanter-knowledge (busybox) | Init container — copies knowledge-base YAMLs into a shared volume | ⚙️ Init |