Skip to content

dwot/isley

Repository files navigation

🌱 Isley

Self-Hosted Cannabis Grow Journal

Track, trend, and elevate your grow β€” all in one place.

Docker Go License Issues

🌐 Official Site Β· πŸ› Report a Bug Β· πŸ’‘ Request a Feature


Isley Dashboard


Why Isley?

I built Isley because the tool I wanted didn't exist. Every existing option was either a phone app with a bad UX, a cloud service I didn't trust, or a spreadsheet held together with duct tape. I wanted one self-hosted solution to replace all three:

Before Isley With Isley
🌑️ Vendor apps for sensor graphs Unified environmental dashboard
πŸ“ Spreadsheets for seeds & harvests Structured grow journal with charts
πŸ—’οΈ Notepads for feeding & watering history Timestamped activity logs per plant

Isley doesn't try to revolutionize your grow β€” it centralizes your tools so you can focus on what matters.


πŸš€ Key Features

Feature Description
πŸ“’ Grow Logs Track plant growth, watering, and feeding with custom activity types
🌑️ Environmental Monitoring Real-time sensor data from AC Infinity and EcoWitt, plus custom HTTP ingest
πŸ“Έ Image Uploads Attach photos with captions; add text overlays and watermarks
πŸ“· Webcam Integration Capture periodic snapshots from camera streams via FFmpeg
🌱 Seed Inventory Manage strains, breeders, and seed stock with Indica/Sativa and autoflower tracking
πŸ“Š Harvest Tracking Record harvest dates, yields, and full cycle times
πŸ“ˆ Graphs and Charts Visualize sensor data over time with configurable retention windows
βš™οΈ Customizable Settings Define custom zones, activities, metrics, and camera streams
🌍 Internationalization Available in English, German, Spanish, and French
πŸ”“ Guest Mode Optional read-only access for unauthenticated visitors
πŸ“± Mobile-Friendly Responsive layout for desktop and mobile

πŸ› οΈ Coming Soon

  • πŸ”” Alerts and Notifications β€” Set custom thresholds and get notified when conditions go out of range.
  • πŸ“¦ Export and Backup β€” Download your full grow history for offline archiving.

⚑ Quick Start

Isley runs in Docker and is up in minutes. PostgreSQL is recommended for production; SQLite works great for local testing.

Prerequisites: Docker and docker-compose

🐳 Option 1: PostgreSQL (Recommended)

# docker-compose.postgres.yml
version: '3.8'

services:
  isley:
    image: dwot/isley:latest
    ports:
      - "8080:8080"
    environment:
      - ISLEY_PORT=8080
      - ISLEY_DB_DRIVER=postgres
      - ISLEY_DB_HOST=postgres
      - ISLEY_DB_PORT=5432
      - ISLEY_DB_USER=isley
      - ISLEY_DB_PASSWORD=supersecret
      - ISLEY_DB_NAME=isleydb
      - ISLEY_SESSION_SECRET=change-me-to-a-long-random-string
    depends_on:
      - postgres
    volumes:
      - isley-uploads:/app/uploads
    restart: unless-stopped

  postgres:
    image: postgres:16
    environment:
      - POSTGRES_DB=isleydb
      - POSTGRES_USER=isley
      - POSTGRES_PASSWORD=supersecret
    volumes:
      - postgres-data:/var/lib/postgresql/data
    restart: unless-stopped

volumes:
  postgres-data:
  isley-uploads:
docker-compose -f docker-compose.postgres.yml up -d

Then open http://localhost:8080 β€” default login is admin / isley. You'll be prompted to change your password on first login.


βšͺ Option 2: SQLite (Lightweight / Local)

# docker-compose.sqlite.yml
version: '3.8'

services:
  isley:
    image: dwot/isley:latest
    ports:
      - "8080:8080"
    environment:
      - ISLEY_PORT=8080
      - ISLEY_DB_DRIVER=sqlite
    volumes:
      - isley-db:/app/data
      - isley-uploads:/app/uploads
    restart: unless-stopped

volumes:
  isley-db:
  isley-uploads:
docker-compose -f docker-compose.sqlite.yml up -d

Note: SQLite is not recommended for production due to write contention under concurrent load.


πŸ”„ Migrating from SQLite to PostgreSQL

Already running Isley with SQLite? Isley handles the migration automatically.

Use docker-compose.migration.yml β€” it mounts both your existing SQLite volume and the new PostgreSQL instance. On startup, if Isley finds existing SQLite data and an empty PostgreSQL instance, it will import everything automatically.

# docker-compose.migration.yml
version: '3.8'

services:
  isley:
    image: dwot/isley:latest
    ports:
      - "8080:8080"
    environment:
      - ISLEY_PORT=8080
      - ISLEY_DB_DRIVER=postgres
      - ISLEY_DB_HOST=postgres
      - ISLEY_DB_PORT=5432
      - ISLEY_DB_USER=isley
      - ISLEY_DB_PASSWORD=supersecret
      - ISLEY_DB_NAME=isleydb
    depends_on:
      - postgres
    volumes:
      - isley-db:/app/data
      - isley-uploads:/app/uploads
    restart: unless-stopped

  postgres:
    image: postgres:16
    environment:
      - POSTGRES_DB=isleydb
      - POSTGRES_USER=isley
      - POSTGRES_PASSWORD=supersecret
    volumes:
      - postgres-data:/var/lib/postgresql/data
    restart: unless-stopped

volumes:
  isley-db:
  postgres-data:
  isley-uploads:

Tip: Back up your isley-db volume before running migration, just in case.

After migration completes, switch back to docker-compose.postgres.yml for your regular deployment.


βš™οΈ Configuration

Most settings are managed through the Settings panel in the app β€” enable integrations, set device IPs, scan for sensors, and more.

For environment-level configuration, the full reference is below:

General

Variable Default Description
ISLEY_PORT 8080 Port Isley listens on
ISLEY_SESSION_SECRET (random) Session encryption key β€” set this in production

Database

Variable Default Description
ISLEY_DB_DRIVER sqlite Database backend: sqlite or postgres
ISLEY_DB_FILE data/isley.db SQLite database path
ISLEY_DB_HOST β€” PostgreSQL host
ISLEY_DB_PORT 5432 PostgreSQL port
ISLEY_DB_USER β€” PostgreSQL username
ISLEY_DB_PASSWORD β€” PostgreSQL password
ISLEY_DB_NAME β€” PostgreSQL database name
ISLEY_DB_SSLMODE require PostgreSQL SSL mode (require, disable, verify-full, etc.)

πŸ”Œ API & Integrations

Isley exposes an HTTP API for pushing sensor data from custom devices, IoT hardware, or home automation systems.

Generating an API Key

  1. Log in as an admin and go to Settings β†’ API Settings.
  2. Click Generate New Key and copy it somewhere safe.
  3. Include the key as an X-API-KEY header on all API requests.

Ingest Endpoint

POST /api/sensors/ingest

{
  "source": "custom",
  "device": "Arduino Sensor",
  "type": "temperature",
  "value": 25.5,
  "name": "Temperature Sensor 1",
  "new_zone": "Tent 1",
  "unit": "Β°C"
}

Use this for: Arduino/ESP32 sensors, Home Assistant, Node-RED, or any off-the-shelf sensor not natively supported by Isley.


πŸ›‘οΈ Production Recommendations

  • Use Docker with PostgreSQL behind a reverse proxy (Nginx, Traefik) for TLS termination and clean URL routing.
  • Back up these volumes on a regular schedule:
    • postgres-data β€” database
    • isley-uploads β€” plant photos and images
  • Set ISLEY_SESSION_SECRET to keep sessions valid across container restarts.

πŸ“ Notes

  • Isley is in active development 🚧 β€” breaking changes may occasionally occur between releases.
  • Found a bug or have a feature request? Open an issue β€” contributions welcome.

🌐 For screenshots, feature highlights, and the latest news: isley.dwot.io


⭐ Star History

Star History

Star History Chart

About

Self-Hosted Cannabis Grow Journal with sensor tracking for AC Infinity Controllers and Ecowitt Soil Sensors

Topics

Resources

License

Stars

Watchers

Forks

Contributors