Owner: Dev Team | Last Updated: 2026-02-21 | Status: Current
Annotated project map -- navigating the Booking file structure.
Booking is a full-stack monolith built on Laravel 12 (backend) + Vue 3 / Inertia.js (frontend). The backend and frontend live in a single repository.
booking/
├── app/ # Core application logic (PHP)
├── bootstrap/ # Framework bootstrap
├── config/ # Laravel configuration files
├── database/ # Migrations, factories, seeders
├── lang/ # Localization files
├── public/ # Publicly accessible files (entry point)
├── resources/ # Frontend source (Vue, CSS, Blade)
├── routes/ # Route definitions
├── storage/ # Logs, cache, generated files
├── tests/ # PHPUnit tests
├── .env.example # Environment template
├── composer.json # PHP dependencies
├── package.json # JS dependencies
├── vite.config.js # Vite bundler configuration
├── tailwind.config.js # Tailwind CSS configuration
├── docker-compose.yml # Docker services (MySQL)
├── deploy.php # Deployer configuration
└── .gitlab-ci.yml # CI/CD pipeline
app/
├── Actions/ # Single-purpose business actions
│ ├── BookingFlow/ # Booking flow logging, cache
│ ├── Coupon/ # Coupon deletion
│ ├── Customer/ # Customer deletion
│ ├── Experience/ # Cost calculation, status toggle, cache
│ ├── Media/ # File upload, resize, delete
│ ├── Notifications/ # Email notifications (booking, invoice, etc.)
│ ├── PricingRule/ # Pricing rule status management
│ ├── Refund/ # Refund status changes
│ ├── RuleAssign/ # Rule assignment deletion
│ └── User/ # User invitation, deletion
│
├── Casts/ # Custom Eloquent casts
│ ├── EncryptedJsonCast # Encrypted JSON attributes
│ └── EncryptedStringCast # Encrypted string attributes
│
├── Console/Commands/ # Artisan commands
│ ├── ProcessAbandonedLeads # Hourly: process abandoned leads
│ ├── ScheduleReportCommand # Every min: send scheduled reports
│ ├── SendLeadsDigest # Daily: leads digest email
│ ├── SendScheduledLeadsDigest # Scheduled leads notifications
│ └── SyncExperiencesCommand # Daily: sync with external APIs
│
├── Constants/ # Domain constants (26 files)
│ ├── BookingConstants # QR code prefix, routes, gift card days
│ ├── ExperiencesConstants # Cache keys, image sizes, sort fields
│ ├── LeadConstants # Statuses, steps, pagination
│ └── ... # Other domain constants
│
├── DTOs/ # Data Transfer Objects (82 files)
│ ├── Booking/ # BookingCostDTO, BookingExperienceDTO, etc.
│ ├── ChannelManager/ # CM-specific DTOs
│ └── ... # Other domain DTOs
│
├── Enums/ # PHP Enums
│ ├── BookingStatus # CONFIRMED, CANCELED, REBOOKED, etc.
│ ├── OrderStatus # PENDING, CONFIRMED, PAID, etc.
│ ├── UserRole # ADMIN, CASHIER, MANAGER, etc.
│ └── ... # Other enums
│
├── Exports/ # Excel export classes
├── External/ # External service integrations
│ ├── Proxy/ # External API proxy (tours/bikes)
│ └── Stripe/ # Stripe payment integration
│
├── Helpers/ # Helper functions
├── Http/
│ ├── Controllers/
│ │ ├── Api/ # Public API controllers (5)
│ │ ├── Auth/ # Authentication controllers (9)
│ │ ├── ChannelManager/ # Channel Manager controllers (5)
│ │ ├── Embed/ # Embed widget controller
│ │ └── Web/ # Dashboard controllers (35+)
│ ├── Middleware/
│ │ ├── RoleMiddleware # Role-based access
│ │ ├── CheckUserStatus # Active user validation
│ │ ├── HandleInertiaRequests # Inertia shared data
│ │ ├── BokunBasicAuthMiddleware # Bokun authentication
│ │ └── EnsureCompanyIds... # Company session management
│ ├── Requests/ # Form Request validation (105 files)
│ └── Resources/ # API Resources (17 files)
│
├── Imports/ # Data import classes
├── Interfaces/ # Service/Repository interfaces
├── Jobs/ # Queue jobs
├── Listeners/ # Event listeners
├── Mail/ # Mailable classes
├── Models/ # Eloquent Models (67 files)
├── Notifications/ # Notification classes
├── Observers/ # Model observers
├── Providers/ # Service providers
├── Repositories/ # Data access layer (56 files)
├── Responses/ # Custom response classes
├── Rules/ # Custom validation rules
├── Services/ # Business logic services (62 files)
│ ├── Booking/ # BookingService, CheckAvailabilityService
│ ├── ChannelManager/ # BookingService, ProductService
│ └── ... # Domain-specific services
├── Traits/ # Reusable traits
│ ├── DateFormatting # Date format helpers
│ └── MoneyFormatting # Money format helpers
└── Utilities/ # Utility classes
resources/js/
├── app.ts # Main application entry point
├── types/ # TypeScript type definitions
│
├── components/ # Reusable Vue components (273 files)
│ ├── ui/ # Base UI components (shadcn/radix)
│ │ ├── button/ # Button component
│ │ ├── input/ # Input component
│ │ ├── dialog/ # Dialog/modal
│ │ ├── table/ # Table component
│ │ └── ... # Other UI primitives
│ ├── navigation/ # Navigation components
│ ├── sidebar/ # Sidebar menu
│ ├── charts/ # Chart.js wrappers
│ ├── pagination/ # Pagination component
│ ├── quill/ # Rich text editor
│ ├── dateRangeSelector/ # Date range picker
│ ├── customModal/ # Modal dialogs
│ └── ... # Other reusable components
│
├── composables/ # Vue 3 Composables (logic reuse)
│ ├── useDebounce # Debounced values
│ ├── usePagination # Pagination logic
│ └── ... # Other composables
│
├── pages/ # Page components (22 directories)
│ ├── auth/ # Login, Register, Password Reset
│ ├── dashboard/ # Dashboard page
│ ├── experiences/ # Experience management pages
│ ├── bookings/ # Booking management pages
│ ├── bookingFlows/ # Booking flow configuration
│ ├── customers/ # Customer management
│ ├── leads/ # Lead management (CRM)
│ ├── giftCards/ # Gift card management
│ ├── invoices/ # Invoice management
│ ├── dynamicPricing/ # Pricing rules
│ ├── coupons/ # Coupon management
│ ├── refunds/ # Refund management
│ ├── reports/ # Reports
│ ├── salesChannels/ # Sales channels
│ ├── companies/ # Company management
│ ├── staff/ # Staff management
│ ├── profile/ # User profile
│ └── ... # Other pages
│
├── pagesPartials/ # Page-specific partial components (22 dirs)
│
├── rest/ # REST API service clients (30 dirs)
│ ├── booking/ # Booking API client
│ ├── experiences/ # Experience API client
│ ├── customer/ # Customer API client
│ └── ... # Other API clients
│
├── stores/ # Pinia state management
│
├── layouts/ # Page layouts
│
├── common/ # Shared constants and utilities
│
├── lib/ # Utility libraries (utils, clsx, etc.)
│
├── share/ # Shared components across features
│
└── embed/ # Embedded booking widget (standalone SPA)
├── embed-app.ts # Embed entry point
├── embed-api.ts # Public API for embed
├── components/ # Embed-specific components
├── pages/ # Embed pages (booking steps)
├── router/ # Vue Router for embed
├── services/ # Embed services
├── stores/ # Embed Pinia stores
└── utils/ # Embed utilities
routes/
├── web.php # Main web routes (dashboard, authenticated)
├── api.php # Public API v1 (experiences, payments, leads)
├── auth.php # Authentication routes (login, register, etc.)
├── rest.php # Internal REST API (CRUD operations)
├── channelManager.php # Channel Manager API (Bokun integration)
├── webhook.php # Stripe webhook handler
├── system.php # System admin routes
├── proxy.php # External API proxy
└── console.php # Artisan scheduled commands
database/
├── factories/ # Model factories for testing
├── migrations/ # 160 migration files
│ ├── users # User, companies, roles
│ ├── experiences # Tours, media, pricing, availability
│ ├── orders # Orders, items, bookings
│ ├── customers # Customers, history
│ ├── pricing # Dynamic pricing rules
│ ├── payments # Payments, refunds
│ ├── invoices # Invoices, line items
│ ├── gift_cards # Gift cards, transactions
│ ├── leads # Leads, history
│ └── channels # Sales channels
└── seeders/ # Database seeders
└── UserSeeder.php # Initial user creation
config/
├── app.php # Application settings
├── auth.php # Authentication config
├── cache.php # Cache configuration (Redis)
├── database.php # Database connections
├── filesystems.php # File storage (local/S3)
├── logging.php # Logging channels
├── mail.php # Mail driver configuration
├── queue.php # Queue connections
├── sanctum.php # API authentication
├── services.php # External services (Stripe, Bokun, AWS)
├── session.php # Session management
├── l5-swagger.php # Swagger API docs config
└── excel.php # Laravel Excel config
| Category | Count |
|---|---|
| PHP files (backend) | ~875 |
| Vue components (.vue) | ~498 |
| TypeScript files (.ts) | ~262 |
| Models | 67 |
| Controllers | 60+ |
| Services | 62 |
| Repositories | 56 |
| DTOs | 82 |
| Form Requests | 105 |
| Migrations | 160 |
| REST API Clients (frontend) | 30 |
| Date | Author | Change |
|---|---|---|
| 2026-02-21 | Documentation Team | Initial creation |
Prev: Key Concepts | Up: Getting Started