
Building Beeing: A Modern Laravel Beekeeping Management System - Part 1: Architecture & Database Design
Theodoros Kafantaris
Published on August 11, 2025
The beekeeping industry has been slow to adopt digital solutions, but modern beekeepers need comprehensive tools to manage their apiaries efficiently. In this series, I'll share the technical journey of building Beeing, a Laravel-based beekeeping management system that handles everything from hive inspections to harvest tracking.
Project Overview
Beeing is built with Laravel 12 and provides a complete digital solution for beekeepers to manage their operations. The application supports unlimited apiaries and hives, real-time weather integration, multilingual support (English/Greek), and comprehensive reporting features.
Key Features
- Apiary & Hive Management: Complete CRUD operations with interactive Google Maps
- Activity Tracking: Inspections, feedings, harvests, and task management
- Weather Integration: Real-time weather data for each apiary location
- Financial Tracking: Revenue and expense management per hive/apiary
- Subscription Management: Stripe integration with automated invoicing
- Advanced Analytics: Production metrics and performance insights
Database Design Philosophy
When designing a beekeeping management system, the database architecture needs to reflect the real-world hierarchical structure of beekeeping operations. We approached this by creating a clear hierarchy: Users → Apiaries → Hives → Activities.
Core Entity Structure
Users Table The foundation includes standard authentication fields plus beekeeping-specific attributes like measurement units (metric/imperial) and country for localization. We added an admin flag for system administration and soft deletes for data preservation.
Apiaries Table Represents physical locations where hives are kept. Each apiary belongs to a user and stores GPS coordinates for mapping features. The description field allows detailed location notes, which proves invaluable for record-keeping.
Hives Table The heart of the system. Each hive can optionally belong to an apiary (some beekeepers have standalone hives). We included equipment tracking with boolean flags for feeders, screens, dividers, and queen excluders. The status field helps track active vs. inactive hives.
Activity Tracking Design
We designed separate tables for each major beekeeping activity, as they have distinct data requirements:
Inspections Table Captures colony health data including queen presence, brood patterns, population levels, disease signs, and treatments applied. We used specific Greek terminology (like 'anoiktos_gonos' for open brood) to match local beekeeping practices.
Harvests Table Tracks production with flexible product types (honey, beeswax, propolis, etc.), quantities, and measurement units. This flexibility accommodates different beekeeping focuses and regional practices.
Feedings Table Records nutritional supplementation with feed types, quantities, and timing - crucial for colony management and cost tracking.
Financial Tracking Architecture
We implemented dual financial tracking:
Expenses Table Categorized spending (feeding, equipment, health treatments) with optional apiary/hive-level attribution. This granular tracking enables precise cost-per-hive calculations.
Revenues Table Product sales tracking with customer information, sales channels, and profitability analysis capabilities.
Relationship Strategy
The Eloquent relationships follow beekeeping logic:
- One-to-Many: Users have many apiaries, apiaries have many hives
- Polymorphic Relationships: Activities can relate to specific hives or entire apiaries
- HasManyThrough: Direct access from apiaries to all related activities across their hives
This structure enables efficient queries like "show me all harvests from this apiary" without complex joins.
Real-World Challenges Solved
Building a domain-specific application taught us several important lessons:
Data Integrity vs. Flexibility
We needed to balance strict data validation with the flexibility beekeepers require. Not every inspection captures every data point, so we made most fields nullable while ensuring critical information (like dates and user associations) remains required.
Multilingual Considerations
Supporting both English and Greek required careful planning. We used Laravel's localization features and stored translatable content in JSON columns for database efficiency while maintaining translation flexibility.
Scalability Planning
While individual beekeepers might have 10-50 hives, commercial operations can have thousands. Our indexing strategy and relationship design accommodate both small hobbyists and large commercial operations.
Key Design Decisions
- Separate Activity Tables: Rather than a single "activities" table, we created dedicated tables for inspections, feedings, and harvests. This approach provides better data integrity and query performance.
- Optional Apiary Assignment: Hives can exist without apiary assignment, accommodating beekeepers who manage individual hives across various locations.
- Financial Granularity: Expenses and revenues can be attributed to specific hives, entire apiaries, or remain general. This flexibility supports different accounting approaches.
- Equipment Tracking: Boolean flags for equipment track what's installed in each hive, enabling inventory management and equipment-based filtering.
Next Steps
In the next post, we'll dive into the Google Maps integration and how we handle real-time location data for apiaries. We'll also explore the weather API integration that provides crucial environmental data for beekeeping decisions.
This is part 1 of a series about building a modern beekeeping management system with Laravel. The database design demonstrates how to model complex real-world relationships while maintaining performance and flexibility.