- Settings table gets ntfy_username, ntfy_password, ntfy_api_key columns - Backend applies Basic or Bearer auth header when sending notifications - Settings page UI lets you toggle between no auth, basic, or token auth - Masked credential display on load to avoid exposing stored secrets - README updated with auth modes documentation Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
115 lines
4.2 KiB
Markdown
115 lines
4.2 KiB
Markdown
# 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](https://ntfy.sh) 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 `planned` → `germinating` → `seedling` → `potted up` → `hardening off` → `garden` → `harvested`
|
|
- **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, 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 |
|
|
| Notifications | Ntfy |
|
|
| Runtime | Docker Compose |
|
|
|
|
## Getting Started
|
|
|
|
### Prerequisites
|
|
|
|
- Docker and Docker Compose
|
|
|
|
### Run
|
|
|
|
```bash
|
|
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](https://ntfy.sh) topic for push notifications — supports no auth, username/password, or API key/token
|
|
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:
|
|
|
|
```env
|
|
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
|
|
- `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.
|