Rootly is a specialized botanical management and inventory platform designed for detailed tracking of plant species, health records, and expert staff administration.
It serves as a centralized hub for technical plant data, allowing users to automate ecosystem monitoring and maintain a professional-grade digital herbarium.
The project highlights a transition from monolithic logic to a service-oriented architecture, emphasizing scalability, modularity, and high availability in a full-stack environment.
Project Overview
Rootly is built as a robust RESTful API using Go, paired with a modern, responsive React frontend. The system focuses on the precise management of relational data—mapping the complex relationships between botanical entities and their historical health logs.
On the backend, the architecture follows a strict separation of concerns through services, controllers, and persistent models. The frontend complements this with a utility-first design approach, ensuring that complex botanical data is presented through a clean, intuitive interface.
Technical Stack
- Backend: Developed in Go (v1.24.5) using the Gin Gonic framework for high-performance API routing and GORM for efficient PostgreSQL orchestration.
- Frontend: Built with React and Vite, utilizing Tailwind CSS for a utility-first styling approach and Lucide React for iconography.
- Security: Implemented JWT (JSON Web Tokens) for secure session management and Bcrypt for industrial-grade password hashing.
- Database: PostgreSQL serves as the primary relational engine, handling complex botanical schemas and historical records.
Key Learnings
- Clean Architecture in Go: Implementing service-oriented patterns to decouple business logic from infrastructure, facilitating easier maintenance.
- Advanced API Security: Mastering Middleware for route protection, token validation, and structural data verification to ensure system integrity.
- Modern Frontend Tooling: Setting up an optimized React environment with Vite and managing client-side routing and JWT decoding for a seamless UX.
- Relational Data Modeling: Designing complex database schemas to track plant evolution, health history, and personnel assignments.
- Code Quality & Scalability: Maintaining high standards through ESLint and modular folder structures (api, components, layouts) in both the frontend and backend.
Technical Challenges & Solutions
Moving from a monolithic structure to a Service-Oriented Architecture in Go was the biggest challenge. By decoupling the logic, I ensured that the database (GORM) and the HTTP layer (Gin) don't "know" about each other, making the system easier to test and scale.
Mapping the relationship between plant species and their historical health logs required a deep dive into PostgreSQL associations. I implemented structural validators in Go to ensure that every health entry is correctly linked to a valid species ID, preventing orphaned data.
Synchronizing JWT authentication between a Go backend
and a React frontend required careful handling of token expiration and
client-side decoding. I used jwt-decode on the frontend to
manage user states and implemented custom Middlewares in Go to protect
sensitive botanical records.
Repositories
Explore the complete source code and technical documentation on GitHub:
Live Project
Try the live demo version of Rootly:
- Rootly (Demo) on Cloudflare – Explore the interactive web experience.
Rootly stands as a testament to the power of modern stacks—combining the performance of Go with the flexibility of React to create a professional tool for the botanical community.