derekc 0cdb2c2c2d Seed new accounts with 3 starter varieties
Cherry Tomato, Sweet Basil, and French Marigold are added to every
new user's seed library on registration.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 00:12:11 -07:00
2026-03-09 00:09:17 -07:00

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

  • Multi-user — each user has their own account with fully isolated data
  • 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 — per-user daily summary push notifications to your phone, configurable time, topic, and authentication
  • 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
Auth JWT (python-jose + bcrypt)
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   # set a strong SECRET_KEY and DB credentials
docker compose up --build -d

Access the app at http://localhost:8053 — create an account to get started.

First Steps

  1. Register an account on the login screen
  2. Go to Settings and enter your last frost date — this anchors all planting schedule calculations
  3. Optionally configure an ntfy topic for push notifications
  4. Add varieties to your Seed Library and start logging batches in My Garden

Environment Variables

Copy .env.example to .env and fill in all values:

MYSQL_ROOT_PASSWORD=sproutly_root_secret
MYSQL_USER=sproutly
MYSQL_PASSWORD=sproutly_secret
SECRET_KEY=your-secret-key-change-this

SECRET_KEY is used to sign JWT tokens. Generate a secure value with:

python3 -c "import secrets; print(secrets.token_hex(32))"

Project Structure

sproutly/
├── docker-compose.yml
├── .env
├── mysql/
│   └── init.sql          # Schema (multi-user)
├── backend/              # FastAPI application
│   ├── main.py
│   ├── auth.py           # JWT + bcrypt utilities
│   ├── models.py
│   ├── schemas.py
│   ├── database.py
│   └── routers/
│       ├── auth.py       # /auth/register, /auth/login, /auth/me
│       ├── 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

All endpoints except /auth/register and /auth/login require a Authorization: Bearer <token> header.

Key endpoints:

  • POST /api/auth/register — create account
  • POST /api/auth/login — get JWT token
  • GET /api/auth/me — current user info
  • 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
  • GET /api/notifications/log — recent notification history

Ntfy Authentication

For private ntfy servers or access-controlled topics, the Settings page supports three auth modes:

Mode When to use
None Public ntfy.sh topics
Username & Password ntfy server with basic auth enabled
API Key / Token ntfy account access token (generate in ntfy account settings)

Status

Core infrastructure is functional. UI design and feature set are evolving based on user feedback.

Description
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.
Readme 177 KiB
Languages
JavaScript 37.9%
Python 34.4%
CSS 16.3%
HTML 11.2%
Dockerfile 0.2%