Architecture Overview
This section provides technical documentation for developers and engineers working on or integrating with ABRA.
Technology Stack
Backend
- PHP 8.2 with Laravel 10
- MySQL 8.0 database
- Redis for caching and queues
Frontend
- Vue 3 with Composition API
- Inertia.js for SPA without API
- Tailwind CSS for styling
- Pinia for state management
Infrastructure
- Google Cloud Platform (GCP)
- Docker containerization
- Laravel Reverb for WebSockets
High-Level Architecture
┌─────────────────────────────────────────────────────────────┐
│ CLIENTS │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Browser │ │ Mobile │ │ PMS │ │ Webhooks│ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
└───────┼────────────┼────────────┼────────────┼──────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ ABRA APPLICATION │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Laravel Backend │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ Inertia │ │ API │ │ Webhooks│ │ Workers │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Vue.js Frontend │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ DATA LAYER │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ MySQL │ │ Redis │ │ Files │ │
│ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────────────────────────────────────────┘
Key Patterns
Multi-Tenancy
ABRA is multi-tenant by hotel. Each hotel has isolated data with shared application code.
Command/Service Pattern
Business logic is organized into Commands and Services for testability and reuse.
Event-Driven Processing
PMS integrations use event streaming for real-time data synchronization.