Files
sproutly/README.md
2026-03-08 23:29:37 -07:00

3.7 KiB

Sproutly 🌱

A self-hosted plant growth tracking web app designed to help home gardeners manage their seed starting schedules, growing cycles, and garden transitions — all anchored to their local last frost date.

Overview

Sproutly takes the guesswork out of seed starting. Enter your plant varieties once with their frost-relative timing (e.g. "start 8 weeks before last frost"), set your last frost date, and Sproutly calculates exactly when to start seeds, move to the greenhouse, and transplant to the garden. A daily push notification via ntfy keeps you on track without having to check the app.

Features

  • Dashboard — at-a-glance view of overdue, today's, and upcoming tasks with a full year planting timeline
  • Seed Library — manage plant varieties with frost-relative timing, germination days, sun/water requirements
  • Garden Tracker — log growing batches and track status from plannedgerminatingseedlingpotted uphardening offgardenharvested
  • Year Timeline — visual calendar showing when each variety's stages fall across the year
  • Ntfy Notifications — daily summary push notifications to your phone, configurable time and topic
  • Settings — set your last frost date, fall frost date, location, timezone, and notification preferences

Stack

Layer Technology
Frontend Nginx (static HTML/CSS/JS SPA)
Backend FastAPI (Python)
Database MySQL 8.0
Notifications Ntfy
Runtime Docker Compose

Getting Started

Prerequisites

  • Docker and Docker Compose

Run

git clone https://git.chns.tech/CooperandGoodman/sproutly.git
cd sproutly
cp .env.example .env   # edit credentials if desired
docker compose up --build -d

Access the app at http://localhost:8053

First Steps

  1. Go to Settings and enter your last frost date — this anchors all planting schedule calculations
  2. Optionally configure an ntfy topic for push notifications
  3. Browse the pre-loaded Seed Library (12 common vegetables, herbs, and flowers included)
  4. Start logging batches in My Garden as you sow seeds

Environment Variables

Copy .env and adjust as needed:

MYSQL_ROOT_PASSWORD=sproutly_root_secret
MYSQL_USER=sproutly
MYSQL_PASSWORD=sproutly_secret

Project Structure

sproutly/
├── docker-compose.yml
├── .env
├── mysql/
│   └── init.sql          # Schema + sample seed varieties
├── backend/              # FastAPI application
│   ├── main.py
│   ├── models.py
│   ├── schemas.py
│   ├── database.py
│   └── routers/
│       ├── varieties.py
│       ├── batches.py
│       ├── dashboard.py
│       ├── settings.py
│       └── notifications.py
└── nginx/
    ├── nginx.conf
    └── html/             # Static frontend SPA
        ├── index.html
        ├── css/style.css
        └── js/app.js

API

The FastAPI backend is available at /api/ and includes automatic docs at http://localhost:8053/api/docs

Key endpoints:

  • GET /api/dashboard/ — dashboard data, tasks, and timeline
  • GET/POST/PUT/DELETE /api/varieties/ — seed variety management
  • GET/POST/PUT/DELETE /api/batches/ — growing batch management
  • GET/PUT /api/settings/ — app settings
  • POST /api/notifications/test — send test ntfy notification
  • POST /api/notifications/daily — trigger daily summary

Status

This project is in early development. Core infrastructure and UI prototype are functional. UI design and feature set are evolving based on user feedback.