AssetFlow
Office Asset Management System
Role
Full-stack Developer
Project Type
Personal Project
Stack
Laravel · Livewire · Tailwind CSS
Status
Completed
Overview
AssetFlow is a web-based office asset management system designed to organize asset inventory, borrowing workflows, maintenance, damage reporting, and administrative reporting.
Asset management involves multiple interconnected workflows: identifying available assets, organizing them by category and location, controlling access, requesting assets, approving borrowing requests, tracking active usage, processing returns, reporting damage, managing maintenance, and generating administrative reports.
AssetFlow centralizes these workflows into a single web application, focusing on workflow coordination and business rules.
Goals
- Centralize asset records.
- Organize assets using categories and locations.
- Support controlled asset borrowing.
- Separate administrator and staff capabilities.
- Track asset lifecycle states.
- Support return verification.
- Track damage and maintenance.
- Provide administrative visibility through dashboards and reports.
- Export borrowing reports as PDF documents.
Key Features
User & Asset Management
- Role-based access control (Admin & Staff)
- CRUD for users, categories, locations
- Asset tracking with status and usage types (individu/bersama)
- Asset photo uploads with validation
Borrowing & Lifecycle
- Staff asset catalog and borrowing requests
- Administrative review (Approve/Reject)
- Return initiation and verification
- Damage reporting and maintenance workflow
Reporting & Analytics
- Operational dashboard insights
- Asset status and category visualization
- Filtered borrowing reports
- PDF report export via DomPDF
Users & Roles
Administrator
Administrative routes are protected using custom route middleware. Administrators can:
- Manage users, categories, locations, and assets
- Review borrowing requests
- Verify returns
- Manage maintenance
- View dashboard analytics and generate reports
Staff
Staff members interact with the asset catalog and manage their own requests. Staff can:
- Browse, search, and filter available assets
- Submit and cancel borrowing requests
- View personal borrowing history
- Initiate asset returns
- Report asset damage
Core Workflows
Borrowing
Return
Maintenance
Asset Lifecycle
Explicit asset states and transitions coordinate borrowing, return, damage, and maintenance workflows.
Borrowing Lifecycle
Maintenance Lifecycle
Technical Architecture
- Browser
- ↓
- Laravel Application
- ↓
- Eloquent ORM
- ↓
- Relational Database
Supporting Systems
- Laravel Storage → Asset Photos
- DomPDF → Borrowing Reports
- Chart.js → Dashboard Visualization
- Vite → Asset Compilation
Domain Model
User ├── BorrowingRequest └── current asset assignment Asset ├── Category ├── Location ├── current User ├── BorrowingRequest └── MaintenanceLog MaintenanceLog ├── Asset └── User
Technical Decisions
- Laravel Framework
- Used as the primary application framework for routing, authentication integration, server-side application logic, and database interaction. Integrated Laravel authentication scaffolding for registration, login, password management, and email verification.
- Livewire
- Used to build reactive server-driven interfaces while keeping application workflows closely integrated with Laravel. Powers interactive workflows like searching, filtering, modal-based interaction, administrative CRUD, and borrowing workflows.
- Eloquent ORM
- Handles data modeling and relationships, translating the domain model (User, Asset, BorrowingRequest, MaintenanceLog) into relational persistence.
- Tailwind CSS
- Provides interface styling strictly adhering to the design constraints (light theme, sharp geometry, specific typography tokens) without creating large custom CSS payloads.
Engineering Challenges
1. Asset State Coordination
Challenge:
Managing the state transitions across borrowing, returning, and maintenance to prevent inconsistent states.
Approach:
Implemented explicit asset statuses (`Tersedia`, `Dipakai`, `Rusak`, `Dalam Perbaikan`) and strictly coupled transitions to specific user-initiated or admin-initiated actions.
2. Role Separation
Challenge:
Ensuring administrative functions are securely isolated from staff borrowing interactions.
Approach:
Used custom route middleware to explicitly verify roles before granting access to administrative routes, and prevented self-deletion by administrators as a concrete business rule.
3. Conditional Business Rules
Challenge:
Assets have different behaviors; shared assets have locations while individual assets have user assignments, and only certain assets can be borrowed.
Approach:
Implemented application-level business rules restricting the staff catalog to assets with status `Tersedia` and usage type `individu`.
Technical Limitation
The current borrowing approval flow validates asset availability at the application level but does not yet use database transactions or row-level locking for concurrent approval scenarios.
Future direction:
Introduce transactional approval with appropriate row-level locking to make asset state transitions atomic.
Testing
Authentication workflows are covered by existing automated tests, while core domain workflows currently have limited automated test coverage.
Lessons Learned
- Business rules extend beyond CRUD.
- Domain relationships strongly affect workflow design.
- Shared-state workflows require attention to data integrity.
- Framework infrastructure can be reused to focus effort on domain-specific functionality.
- Workflow-heavy interfaces benefit from reactive UI patterns.
Future Improvements
- Transactional borrowing approval
- Row-level locking where appropriate
- Automated tests for core domain workflows
- Broader authorization tests
- Asset history/audit trail
- Expanded reporting
- Operational observability