Architecture & Platform
Technical architecture of the Lancaster Archery Academy event management system.
Technology Stack
Core Platform
- Framework: Laravel 8.40+
- Admin Panel: Laravel Nova 4.0+
- PHP: 8.2+
- Frontend: Inertia.js 0.4.1 + Vue 3.2.0
- Database: MySQL 8.0+ / MariaDB 10.3+
- Build Tool: Laravel Mix 6.0.6
- CSS: Tailwind CSS 2.0.3 with @tailwindcss/forms
- Routing: Ziggy 1.0 (route generation for Vue)
Payment Processing
Authorize.Net Customer Information Manager (CIM):
- Package:
authorizenet/authorizenet: ^2.0 - Features:
- Secure payment method storage (tokenization)
- Recurring subscription billing
- One-time payments
- AVS and CVV validation
- Transaction management (void, refund)
Configuration:
AUTHNET_LOGIN_ID=your_api_login_id
AUTHNET_TRANSACTION_KEY=your_transaction_key
AUTHNET_CLIENT_KEY=your_public_client_key
AUTHNET_MODE=sandbox # or production
Digital Waivers
Smartwaiver Integration:
- Package: Custom fork in
lib/smartwaiver-php-sdk - Features:
- Electronic waiver generation
- Pre-filled participant data
- Guardian signatures for minors
- Webhook notifications
- Waiver tracking per account
Configuration:
SMARTWAIVER_API_KEY=your_api_key
SMARTWAIVER_TEMPLATE_ID=your_template_id
Laravel Nova Extensions
Content Management:
classic-o/nova-media-library- Media uploads and gallerieswhitecube/nova-flexible-content- Flexible content blocksmurdercode/nova4-tinymce-editor- Rich text editingoptimistdigital/nova-menu-builder- Navigation managementoptimistdigital/nova-settings- Site-wide settings
UI Enhancements:
codenco-dev/nova-grid-system- Responsive layoutsdillingham/nova-attach-many- Many-to-many attachmentsformfeed-uk/nova-theming-classes- UI customization
Custom Suma Nova Components (in nova-components/):
- event-tools - Event management utilities and quick actions
- event-insights - Dashboard metrics and visualizations
- reports - Custom reporting tools for revenue and analytics
- reservation-refund-grid - Advanced refund management interface
- volume-discount - Volume-based pricing calculator
- generate-sessions - Automated session generation from patterns
- theme-assets - Theme customization and asset management
- account-preview - Quick account overview modal
Additional Key Packages
Audit Trail:
owen-it/laravel-auditing: ^13.7- Comprehensive activity logging
SEO & Metadata:
butschster/meta-tags: ^2.0- Meta tag managementspatie/schema-org: ^3.9- Structured data markup
Export:
maatwebsite/excel: ^3.1- Excel/CSV export functionalityspatie/simple-excel: ^3.2- Simple spreadsheet operations
Search:
titasgailius/search-relations: ^2.0- Related model searching in Nova
Application Architecture
Frontend Architecture (Inertia.js + Vue 3)
Lancaster Archery uses Inertia.js to build a modern SPA without building an API.
Key Benefits:
- Server-side routing with Laravel
- Vue 3 components for UI
- No API required
- Shared data between requests
- Automatic progress bar
- Asset versioning
Page Structure (resources/js/Pages/):
Pages/
├── Events/
│ ├── List.vue # Event category browsing
│ ├── Detail.vue # Event registration page
│ └── Registrations.vue # Public tournament roster
├── Account/
│ ├── Dashboard.vue # User dashboard
│ ├── Profile.vue # Account management
│ ├── Billing.vue # Payment methods
│ ├── Booking.vue # Reservations & subscriptions
│ ├── Members.vue # Family members
│ ├── Security.vue # Password/email changes
│ └── Transactions.vue # Subscription invoice history
├── Cart/
│ ├── index.vue # Shopping cart
│ └── Charge.vue # Payment processing
├── Checkout/
│ └── Show.vue # Checkout & waiver flow
├── Merchandise/
│ └── Show.vue # Practice passes & merchandise
└── Calendar.vue # Public event calendar
Shared Layout (resources/js/Layouts/Layout.vue):
- Persistent navigation
- Authentication state
- Flash messages
- Impersonation notice banner
- Shopping cart indicator
- Mobile responsive menu
Route Integration with Ziggy:
// In Vue components
route('events.detail', { category: 'leagues', slug: 'weekly-target' })
route('account.dashboard')
route('checkout.show')
// In templates
<Link :href="route('events.detail', { category, slug })">
View Event
</Link>
Backend Architecture
Models (app/Models/):
- User Management:
User,Account,AccountNote - Events:
Event,Session,EventType,EventCategory,EventLevel - Reservations:
Reservation,Order,Transaction - Subscriptions:
Subscription,SubscriptionInvoice,SubscriptionTransaction - Tournaments:
Division,Team,TeamInvite - Content:
Merchandise,Coupon,Credit,Waitlist,Waiver - CMS:
Page,Blog,Location - Auditing:
Audit(via owen-it/laravel-auditing)
Repositories (app/Models/*/):
AccountRepository- Account management logicEventRepository- Event queries and transformationsSubscriptionRepository- Subscription billing and generationReservationRepository- Reservation creation and validationOrderRepository- Order processing and expiration
Services/Managers:
WaiverManager(app/Models/WaiverManager.php) - Smartwaiver integrationAuthNetGateway(app/Models/Gateways/AuthNetGateway.php) - Payment processing
Database Architecture
40+ Tables organized into logical groups:
Core Entities:
users- Staff/admin accounts with role-based accessaccounts- Customer accounts (multiple per user, family members)events- Classes, tournaments, parties, subscriptionssessions- Individual time slots for eventsreservations- Bookings linking accounts to sessions
Financial:
orders- Purchase records with expirationtransactions- Payment processing records (Authorize.Net)subscriptions- Recurring enrollmentssubscription_invoices- Monthly billing recordssubscription_transactions- Subscription payment attempts
Supporting:
waitlists- Waiting lists for full sessionscredits- Account credits from refundscoupons- Discount codes with usage trackingmerchandise- Products and practice passeswaivers- Digital waiver templates and signaturesdivisions- Tournament divisions with age/gender rulesteams- Team registrations for mixed eventstimeslots- Recurring time preferences for subscriptionsaudits- Comprehensive audit trail
Authentication & Authorization
Multi-Account System:
- Single
User(login credentials) - Multiple
Accounts(family members) - Primary account for billing
- Individual accounts for participants
Role-Based Access (Nova):
- Super Admin - Full system access
- Admin - Event and user management
- Manager - Limited administrative tasks
- Staff - View-only access
Location-Based Permissions:
location_assignmentstable- Users assigned to specific locations
- Filter events and sessions by location access
Session Management
Cart Expiration:
- 15-minute cart timeout
- Countdown timer on cart page
- Automatic seat release on expiration
- Database cleanup via scheduled command
Session State:
- Uses database session driver
- Stores cart contents
- Maintains authentication
- Preserves incomplete orders
Queue System
Background Jobs:
- Subscription reservation generation
- Subscription billing charges
- Email sending (queued)
- IANSEO export generation
- Audit cleanup
Configuration:
QUEUE_CONNECTION=redis # Production
QUEUE_CONNECTION=sync # Development/testing
Development Environment
Requirements
- PHP 8.2+
- Composer 2.x
- Node.js 20.x
- MySQL 8.0+ or MariaDB 10.3+
- Redis (for queues and caching in production)
Local Setup Options
Option 1: Laravel Herd (Recommended)
- Native PHP 8.2+ on macOS/Windows
- Automatic .test domain resolution
- Database management included
Option 2: Laravel Sail (Docker)
- Containerized development environment
- All services included (MySQL, Redis, Mailhog)
- Cross-platform compatibility
Option 3: Traditional XAMPP/MAMP
- Manual PHP/MySQL setup
- Requires separate Redis installation
Build Tools
Laravel Mix Configuration (webpack.mix.js):
mix.js('resources/js/app.js', 'public/js')
.vue()
.postCss('resources/css/app.css', 'public/css', [
require('tailwindcss'),
])
.version();
NPM Scripts:
npm run dev # Development build
npm run watch # Watch mode with auto-reload
npm run hot # Hot module replacement
npm run production # Minified production build
Testing Architecture
Test Suite:
- Feature tests for user flows (registration, checkout, etc.)
- Unit tests for models and services
- Browser tests for critical paths (optional, Puppeteer in
puppeteer/)
Database:
- Uses separate test database
- RefreshDatabase trait for clean state
- Model factories for test data
Performance Considerations
Caching:
- Query result caching for events and sessions
- Route caching in production
- Config caching in production
- View caching in production
Eager Loading:
- Relationships loaded efficiently
- N+1 query prevention via Debugbar in development
Asset Optimization:
- Mix versioning for cache busting
- CSS/JS minification in production
- Image optimization via Nova Media Library
Security Features
Payment Security:
- PCI compliance via Authorize.Net CIM
- No card data stored locally
- Accept.js tokenization
- Encrypted billing profile storage
Data Protection:
- Password hashing (bcrypt)
- CSRF protection on all forms
- SQL injection prevention (Eloquent ORM)
- XSS prevention (Blade auto-escaping)
Audit Trail:
- All model changes tracked
- User actions logged
- IP address and user agent captured
- Restorable deleted records
Deployment Architecture
Production Environment:
- VPS or shared hosting with PHP 8.2+
- MySQL 8.0+ database
- Redis for caching and queues
- SSL/TLS certificates (Let's Encrypt)
- Scheduled cron jobs for billing and cleanup
Deployment Process:
- Git pull latest code
composer install --optimize-autoloader --no-devnpm ci && npm run productionphp artisan migrate --forcephp artisan config:cachephp artisan route:cachephp artisan view:cachephp artisan queue:restart
Environment Configuration:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://lancasterarcheryacademy.com
LOG_CHANNEL=daily
LOG_LEVEL=warning
SESSION_DRIVER=redis
CACHE_STORE=redis
QUEUE_CONNECTION=redis
Future Architecture Considerations
Potential Enhancements:
- Mobile app integration (API layer with Laravel Sanctum)
- Real-time notifications (Laravel Echo + WebSockets)
- Advanced analytics dashboard (Chart.js integration)
- Multi-location franchise support
- Instructor portal with schedule management
- Equipment rental inventory system
- Point-of-sale integration for in-person purchases