iCrewMarine
Enterprise-grade Maritime Crew Management System (ERP) featuring modular Filament PHP dashboards, role-based database permissions, and automated crew-to-user profile synchronization.
01 — Overview
Overview
a. Maritime HR Digitalization
Managing maritime human resources is notoriously complex due to strict international maritime regulations, dynamic contract shifts (sign-on/sign-off), and the critical need for crew certifcation compliance before onboard assignment.
We initiated the development of iCrewMarine to streamline this process, creating a centralized dashboard where fleet managers can oversee crews (seafarers), contract timelines, and vessel rosters in real time. The platform replaces fragmented spreadsheets with unified digital ledgers.
b. High-Level System Architecture
We built the system on a modern tech stack consisting of Laravel 12, FilamentPHP v5, TailwindCSS v4, and Inertia.js v2 with React v19. This hybrid architecture allows us to serve rich administrative panels via Filament resources while enabling reactive single-page app (SPA) elements for interactive screens like organization charts.
The core architecture is strictly modularized. To prevent large resource files in Filament, we separated the logic into independent classes for Form schemas, Table columns, and Infolist detail views. This layout ensures maintainability as the system scales to accommodate fleet-wide logistics.
- Architected a highly decoupled and modular FilamentPHP v5 resource structure (Form, Infolist, and Table separated files)
- Designed a comprehensive multi-level, database-driven authorization and privilege system (module, roles, roles_d)
- Implemented automatic user account provisioning and updates via CrewStaffObserver to keep crew profiles and login credentials in sync
- Built administrative compliance engines for document and certificate verification matching vessel/crew levels
- Modeled the database schema for crews (Seafarers), vessel specifications, crew movements, and contracts
- Configured Laravel Octane and Inertia/React templates for responsive frontend single-page application rendering
02 — Problems & Challenges
Problems & Challenges
a. Structuring Complex Certification Rules
Maritime crews require various certificates (safety training, medical clearances, technical ranks) which vary depending on their vessel role. Ensuring that only crew members with valid, verified certificates are assigned to compatible vessel tasks is a key compliance challenge.
We addressed this by modeling dynamic verification pipelines in `CertificateVerificationForm`. Under `adm_certificates`, upload records are captured under a multi-step verification status (`Waiting Verification`, `Verified`, `Not Verified`, `Cancelled`). The form enforces strict validation rules, requiring managers to specify a written reason if a certificate is marked as `Not Verified` or `Cancelled`.
b. Relational Data Mapping for Crew Deployments
A crew assignment involves complex associations across multiple entities: the parent holding, the operating company, the seafarer profile, and the active vessel schedule. When setting up a new crew placement, mismatched fields can lead to logistics disruptions and compliance failures.
We solved this mapping challenge in `AssignmentOnBoardForm` using dynamic cascading filters. When a user selects a corporate holding, the form dynamically resets child selection fields, queries the associated companies, and loads only the crews and vessel schedules belonging to that company. This relational scoping prevents placement errors at the database level.
c. Designing Scalable Backend
With dozens of vessel routes, crew lists, and payroll components operating simultaneously, a standard monolithic structure would lead to database lockups and high resource consumption.
We built a scalable backend using database-driven role-based access control (RBAC). The tables `module`, `roles`, and `roles_d` configure granular permissions (Read, Create, Modify, Drop) per user type. We designed `BaseResource` as the parent class for all Filament panels, automatically injecting these permission checks into page lifecycle methods to minimize query overhead.
03 — Project Goals
Project Goals
a. Streamlining Crew Placement
Our primary goal was to automate the workflow from hiring to sign-on. We designed the `CrewStaffObserver` class to automatically provision a `User` login account the moment a new seafarer (`CrewStaff`) is registered in the database, setting their password to their birthdate (Ymd).
This eliminates manual user setup, enabling crews to immediately access their personalized rosters and documents.
b. Ensuring Regulatory Compliance
We aimed to establish a digital auditing trail for international maritime authorities. Every data insertion and modification across seafarer files, vessel lists, and stock logs is automatically recorded using Spatie Activitylog and our custom `HasAuditFields` trait, capturing timestamps, user details, and client IP addresses.
04 — Design Process
Design Process
a. Maritime Database Schema Modeling
We designed a comprehensive relational database schema to represent maritime operations. The model is structured around: seafarers (`crew_staff`), job descriptions (`crew_jobdesc`), levels (`crew_level`), vessel listings (`vessel_main`), routes (`vessel_route`), schedules (`vessel_schedule`), and operational assignments (`crew_assignment`).
This model provides the foundation for automating crew shifts, logbook entries, and fuel/maintenance inventory tracking.
b. UI/UX Blueprinting
We blueprinted a high-fidelity control dashboard styled with TailwindCSS v4. The interface uses deep dark hues and high-contrast indicators to prioritize data readability under varying light conditions on active vessel bridges.
For the crew portal, we designed simple, responsive layouts focusing on mobile usability, allowing seafarers to view schedules, upload certificates, and request medical claims directly from their smartphones.
05 — Usability Testing & QA
Usability Testing & QA
a. Backend Logic Validation
Since the system is in active development, our QA focused heavily on backend logic validation. We wrote PHPUnit tests to verify data mutations on crew creation. We validated that updating a seafarer's birthdate automatically updates their hashed password through the observer, and that deleting a staff profile cleans up their associated database user.
b. API Endpoint Testing
We validated form request rules and API endpoints using Postman. We tested edge cases such as uploading malformed certificate PDFs, inserting overlapping vessel schedules, and attempting actions with limited staff roles. The system logs these events and returns descriptive validation errors without exposing backend database schemas.
06 — Prototyping & Handoff
Prototyping & Handoff
a. CI/CD Setup & Development Environment
To streamline developer onboarding and handoff, we prepared a complete Docker environment with a structured `Dockerfile` and `.dockerignore`. Running the local environment is as simple as launching Docker Compose, which boots Laravel 12, PostgreSQL, and Vite assets.
We configured automated database seeders (`ModuleSeeder`, `RolesSeeder`, and `ComprehensiveDataSeeder`) to populate the local database with realistic maritime records, letting developers test compliance rules immediately.
b. Feature Roadmap
As development continues, our technical roadmap outlines critical integrations. The next phases include linking the system with maritime GPS APIs for real-time vessel tracking, integrating automated email alerts for certificate expiration, and connecting the payroll engine with international multi-currency payment gateways.
07 — Key Takeaways
Key Takeaways
a. Architecting Industry-Specific ERP
ERP systems in specialized industries require custom relational design. Standard off-the-shelf HR platforms fail to model maritime intricacies such as ship sign-on/sign-off, rank verification, and vessel schedules. Building a bespoke relational foundation is essential for long-term scalability.
b. Building Robust Foundations for Maritime Logistics
Strict compliance and audit trails must be built into the core codebase from day one. Using Eloquent observers, global audit traits, and database-driven RBAC ensures that security and data integrity are maintained throughout the system lifecycle, even as new features are added during the active development phase.