Portfolio
Rootly

Rootly

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.

Rootly Botanical Dashboard
Rootly Inventory Management
Staff Data

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

1. Architectural Evolution

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.

2. Relational Data Integrity

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.

3. Secure Session Management

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 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.