A modern, real-time plant monitoring system powered by ESP32 devices and Rails πͺ΄
Features β’ Getting Started β’ Development β’ Deployment β’ Contributing
- πΏ Real-time plant moisture monitoring
- π Beautiful, interactive charts and visualizations
- π Instant notifications when plants need attention
- π± Progressive Web App (PWA) support
- π€ ESP32 device integration
- π HTMX-powered dynamic interactions
- β‘οΈ WebSocket live updates via Hotwire
- π¨ Modern, responsive UI with TailwindCSS
- π§ͺ Comprehensive test suite
- Ruby 3.3.0
- PostgreSQL 14+
- Node.js 18+
- Yarn 1.x
- Redis (optional, for ActionCable in production)
- Clone the repository:
git clone https://github.com/mathisto/sprout-server.git
cd sprout-server
- Install dependencies:
bundle install
yarn install
- Set up your environment:
cp .env.example .env
# Edit .env with your configuration
- Set up the database:
rails db:create db:migrate db:seed
- Start the development server:
bin/dev
Visit http://localhost:3000 and start monitoring your plants! π±
bundle exec rspec # Run all tests
bundle exec rspec spec/models # Run specific test directory
bundle exec rspec spec/models/plant_spec.rb # Run specific test file
bundle exec rubocop # Ruby style guide
bundle exec brakeman # Security vulnerabilities
bundle exec bundle audit # Gem vulnerabilities
%%{
init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#1a1b26',
'primaryTextColor': '#a9b1d6',
'primaryBorderColor': '#7aa2f7',
'lineColor': '#7aa2f7',
'secondaryColor': '#24283b',
'tertiaryColor': '#414868'
}
}
}%%
graph TD
A[ESP32 Device]:::iot -->|HTTP POST| B[Rails API]:::server
B -->|ActionCable| C[Browser Client]:::client
B -->|Store| D[(PostgreSQL)]:::db
C -->|HTMX Requests| B
B -->|HTML Fragments| C
C -->|Turbo Streams| E[Dashboard]:::ui
C -->|Service Worker| F[PWA Notifications]:::worker
classDef default fill:#1a1b26,stroke:#7aa2f7,color:#a9b1d6,stroke-width:2px
classDef iot fill:#2ac3de,stroke:#7dcfff,color:#1a1b26,stroke-width:2px
classDef server fill:#f7768e,stroke:#ff9e64,color:#1a1b26,stroke-width:2px
classDef client fill:#9ece6a,stroke:#73daca,color:#1a1b26,stroke-width:2px
classDef db fill:#bb9af7,stroke:#c0caf5,color:#1a1b26,stroke-width:2px
classDef ui fill:#e0af68,stroke:#ff9e64,color:#1a1b26,stroke-width:2px
classDef worker fill:#7aa2f7,stroke:#b4f9f8,color:#1a1b26,stroke-width:2px
This application uses Kamal for deployment:
- Set up your deployment configuration:
cp config/deploy.yml.example config/deploy.yml
# Edit deploy.yml with your server configuration
- Deploy:
bin/kamal setup
bin/kamal deploy
We love contributions! Please check out our Contributing Guide for guidelines.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -am 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Ruby on Rails - The web framework that powers everything
- HTMX - For modern HTML-driven interactivity
- Hotwire - For making real-time updates a breeze
- TailwindCSS - For the beautiful UI components
- Chart.js - For the gorgeous data visualizations
- All our contributors π
Made with π by Matt Kelly
Theme inspired by Tokyo Night π