Skip to content
asvibesPublic

About

Florisha is your intelligent plant companion β€” snap a photo to instantly identify any plant, get AI-generated care tips, and track your collection with a personal journal and care calendar. 🌿

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

85 Commits

Folders and files

Repository files navigation

🌿 Florisha

Your intelligent plant companion β€” identify, learn, and care for plants with the power of AI.

Live Demo Python Flask Gemini AI


Home
image
Dashboard
image
Plant Identification
image
Result
image
Favourite
image
Journal
image
Calendar
image

✨ Features

  • πŸ” Plant Identification β€” Upload a photo and identify any plant instantly using the PlantNet API
  • πŸ““ Plant Journal β€” Save and revisit your identified plants with personal notes
  • πŸ“… Care Calendar β€” Track watering and care schedules with a visual calendar
  • πŸ” Secure Auth β€” Email verification, bcrypt password hashing, and session management
  • 🌱 Personalised Dashboard β€” View your plant collection, favourites, and journal entries in one place

πŸ› οΈ Tech Stack

Layer Technology
Backend Python 3.14, Flask 3.0
Database PostgreSQL (via SQLAlchemy + psycopg2)
ORM & Migrations Flask-SQLAlchemy, Flask-Migrate (Alembic)
AI β€” Plant Profiles Google Gemini 2.0 Flash (google-genai)
Plant Identification PlantNet API
Email Brevo (Sendinblue) Transactional API
Auth Flask-Login, Flask-Bcrypt
ML scikit-learn (model.pkl)
Frontend Jinja2 Templates, HTML/CSS/JS
Server Gunicorn
Deployment Render

πŸ“ Project Structure

Florisha/
β”‚
β”œβ”€β”€ app.py                         # App entry point
β”œβ”€β”€ config.py                      # Configuration & environment variables
β”œβ”€β”€ extensions.py                  # Flask extensions (db, bcrypt, mail)
β”œβ”€β”€ planet_knowledge.py            # Plant domain knowledge base & facts
β”œβ”€β”€ plant_service.py               # Core plant service layer (business logic)
β”œβ”€β”€ requirements.txt               # Python dependencies
β”œβ”€β”€ runtime.txt                    # Python version for Render
β”œβ”€β”€ .python-version                # Local Python version
β”œβ”€β”€ .env                           # Environment variables (not committed)
β”œβ”€β”€ .gitignore
β”‚
β”œβ”€β”€ models/                        # SQLAlchemy database models
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ user.py
β”‚   β”œβ”€β”€ plant.py
β”‚   β”œβ”€β”€ journal_entry.py
β”‚   └── calendar_preferences.py
β”‚
β”œβ”€β”€ routes/                        # Flask Blueprints
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ auth_routes.py             # Register, login, logout, email verification
β”‚   β”œβ”€β”€ ai_routes.py               # Plant identification & AI profile generation
β”‚   β”œβ”€β”€ dashboard.py               # User dashboard
β”‚   β”œβ”€β”€ main_routes.py             # Home & static pages
β”‚   β”œβ”€β”€ journal_routes.py          # Plant journal CRUD
β”‚   └── calendar_routes.py         # Care calendar
β”‚
β”œβ”€β”€ services/                      # External API integrations
β”‚   β”œβ”€β”€ gemini_service.py          # Google Gemini AI plant profiles
β”‚   └── plant_processor.py         # PlantNet identification processing
β”‚
β”œβ”€β”€ modules/                       # AI & recommendation logic
β”‚   β”œβ”€β”€ ai_engine.py
β”‚   β”œβ”€β”€ prompt_engine.py
β”‚   β”œβ”€β”€ recommendation.py
β”‚   └── user_profile.py
β”‚
β”œβ”€β”€ ml/
β”‚   └── model.pkl                  # Trained ML model
β”‚
β”œβ”€β”€ utils/
β”‚   β”œβ”€β”€ image_handler.py           # Image upload & processing
β”‚   └── cloudinary_helper.py       # Cloudinary cloud image storage helper
β”‚
β”œβ”€β”€ static/                        # CSS, JS, Images
β”‚   β”œβ”€β”€ css/style.css
β”‚   β”œβ”€β”€ js/app.js
β”‚   └── images/
β”‚
β”œβ”€β”€ templates/                     # Jinja2 HTML templates
β”‚   β”œβ”€β”€ index.html
β”‚   β”œβ”€β”€ dashboard.html
β”‚   β”œβ”€β”€ identify.html
β”‚   β”œβ”€β”€ result.html
β”‚   β”œβ”€β”€ chat.html
β”‚   β”œβ”€β”€ login.html
β”‚   β”œβ”€β”€ register.html
β”‚   β”œβ”€β”€ verify_email.html
β”‚   β”œβ”€β”€ forgot_password.html
β”‚   β”œβ”€β”€ reset_password.html
β”‚   └── upload.html
β”‚
β”œβ”€β”€ migrations/                    # Alembic database migrations
β”‚   β”œβ”€β”€ versions/
β”‚   β”œβ”€β”€ alembic.ini
β”‚   β”œβ”€β”€ env.py
β”‚   β”œβ”€β”€ README.md
β”‚   └── script.py.mako
β”‚
β”œβ”€β”€ data/                          # JSON data files
β”‚   β”œβ”€β”€ users.json
β”‚   └── history.json
β”‚
└── uploads/                       # User uploaded plant images

πŸš€ Getting Started

Prerequisites

  • Python 3.11+
  • PostgreSQL database
  • Google Gemini API key
  • PlantNet API key
  • Brevo (Sendinblue) API key

Local Setup

  1. Clone the repository
git clone https://github.com/asvibes/Florisha.git
cd Florisha
  1. Create a virtual environment
python -m venv venv
source venv/bin/activate      # Mac/Linux
venv\Scripts\activate         # Windows
  1. Install dependencies
pip install -r requirements.txt
  1. Create a .env file in the root directory:
SECRET_KEY=your-secret-key-here
DATABASE_URL=postgresql://user:password@host:5432/dbname
GEMINI_API_KEY=your-gemini-api-key
PLANTNET_API_KEY=your-plantnet-api-key
BREVO_API_KEY=your-brevo-api-key
MAIL_USERNAME=your-email@gmail.com
  1. Run database migrations
flask db upgrade
  1. Start the development server
flask run

Visit http://localhost:5000 in your browser.


☁️ Deployment (Render)

Florisha is deployed on Render.

Environment Variables (set in Render dashboard)

Variable Description
DATABASE_URL PostgreSQL connection string (auto-set by Render)
SECRET_KEY Flask secret key for sessions
GEMINI_API_KEY Google AI Studio API key
PLANTNET_API_KEY PlantNet identification API key
BREVO_API_KEY Brevo transactional email API key

Start Command

gunicorn app:app

πŸ”‘ API Keys

Service Where to get it
Google Gemini aistudio.google.com
PlantNet my-api.plantnet.org
Brevo Email brevo.com

🌱 How It Works

  1. User uploads a photo of a plant on the dashboard
  2. PlantNet API identifies the plant species with confidence scores
  3. Results are saved to the user's journal and plant collection
  4. Users can chat with the AI about their plants, set care reminders, and track watering schedules

πŸ“„ License

This project is for educational and personal use.


πŸ‘©β€πŸ’» Author

Built with πŸ’š by Shreya β€” @asvibes


Florisha β€” because every plant deserves to be known. 🌿

About

Florisha is your intelligent plant companion β€” snap a photo to instantly identify any plant, get AI-generated care tips, and track your collection with a personal journal and care calendar. 🌿

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages