A modern, minimalist, resource-efficient Next.js web application to manage your houseplants.
- Responsive Dashboard: Beautiful grid, sorted automatically by "needs care first".
- Care Tracking: Track watering, fertilizing, anti-bug, and anti-fungus intervals.
- Dockerized Base: Multi-stage Docker build resulting in a single container.
- SQLite Database: Entire database contained in a single file inside a Docker volume.
- Dark Mode: Smooth Dark/Light mode toggle.
- External Display API: Send local JSON requests to
/api/plants/statusfor home automation tools like MagicMirror or HomeAssistant.
The standard setup automatically maps volumes within Docker.
Optionally, provide your Open Plantbook API credentials via .env to enable automatic care instructions lookup.
- Register for a free account at open.plantbook.io.
- Once logged in, navigate to the API keys section in the Web UI.
- Generate a new set of credentials (you will get a Client ID and Client Secret).
- Copy
.env.exampleto.envand paste yourOPENPLANTBOOK_CLIENT_IDandOPENPLANTBOOK_CLIENT_SECRET.
This is the recommended way for users on NAS systems (Synology, Unraid, etc.) or home servers.
-
Create a
docker-compose.ymlfile on your server:version: '3.8' services: plantstack: image: ghcr.io/sm4sh-it/plantstack:latest container_name: plantstack restart: unless-stopped ports: - "9666:3000" volumes: - plantstack_data:/app/data environment: - NODE_ENV=production # Optional: Add Open Plantbook credentials here if you have them # - OPENPLANTBOOK_CLIENT_ID=your_client_id_here # - OPENPLANTBOOK_CLIENT_SECRET=your_client_secret_here volumes: plantstack_data:
-
Run the stack:
docker-compose up -d
-
The app will be accessible at http://localhost:9666. Your database and images will persist locally within the
plantstack_datavolume.
If you want to build the Docker image yourself:
- Clone this repository.
- In the project root, run:
docker-compose up -d --build
You will need Node.js (>= 18) installed.
- Run
npm install - Apply Prisma schema:
npx prisma db push - Generate client:
npx prisma generate - Run dev mode:
npm run dev
Send a GET request to /api/plants/status anywhere on your LAN to get a JSON output containing all overdue plants in your collection.