Botanium
Garden, game, and a whole botanical atlas in your pocket
It tells you when each job is due on your plants, lets you collect species like a game, and is heading towards spotting pests with models of my own.
- Node 24
- node:http
- node:sqlite
- node:crypto
- JavaScript (ES modules)
- PWA / Service Worker
- Web Push (VAPID ES256, aes128gcm)
- SQLite
- Docker
420,528species in the atlas, searchable offline
— enlarge imageThe demo in 30 seconds
What it is
Botanium is a phone app — installable, and it carries everything with it, so it works with no connection — for looking after your plants and your vegetable patch. It does two things at once. The first is telling you when each job is due — sowing, pruning, watering, harvesting — by crossing the lunar calendar with the plants you actually own: it does not say “water your plants”, it says the one in the living room has gone 18 days without water and tomorrow is a leaf day. The second is the game part: every species you log joins your collection, and the collection fills up.
Underneath sits a botanical atlas of 420,528 species you can search with no internet at all, synonyms included, so the outdated label from the garden centre still finds the plant. Every specimen keeps a diary with photos and notes, and if something looks wrong you can flag it as struggling: it then weighs the real cold and rainfall in your area against what its genus is documented to tolerate and tells you what to check.
Where it is going: identifying pests and diseases from a photo. Species identification currently leans on an outside service; the plan is to train my own neural networks, more capable with each pass, so the app answers that itself and depends on nobody.
Technical stack
Node 24 on the server and ES modules in the browser, with no build step and not a single npm package: whatever the standard library does not provide is written by hand, the lunar ephemerides and the Web Push cryptography included. The very file that decides on screen whether a plant is thirsty is imported by the server to write the notification, so the two cannot contradict each other. The data — your plants, the diary, the photos and the whole atlas — lives in a single SQLite file provided by the runtime, and the ephemerides are computed on the device without asking anyone. It is a PWA: it installs, and it keeps working with no signal.
And it runs on my own infrastructure, which is the part you do not see: a read-only, unprivileged container with egress locked down, on the home server; in front of it an encrypted tunnel to the one public machine, which terminates TLS and proxies through. The demo linked above is that same instance.