- Introduced multiple new markdown files covering API and routing, application architecture, deployment architecture, database patterns, frontend patterns, and security practices. - Established guidelines for development workflows, testing strategies, and continuous improvement of rules. - Enhanced project overview and technology stack documentation to provide clarity on Coolify's features and architecture.
		
			
				
	
	
		
			320 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			320 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
---
 | 
						|
description: 
 | 
						|
globs: 
 | 
						|
alwaysApply: false
 | 
						|
---
 | 
						|
# Coolify Frontend Architecture & Patterns
 | 
						|
 | 
						|
## Frontend Philosophy
 | 
						|
 | 
						|
Coolify uses a **server-side first** approach with minimal JavaScript, leveraging Livewire for reactivity and Alpine.js for lightweight client-side interactions.
 | 
						|
 | 
						|
## Core Frontend Stack
 | 
						|
 | 
						|
### Livewire 3.5+ (Primary Framework)
 | 
						|
- **Server-side rendering** with reactive components
 | 
						|
- **Real-time updates** without page refreshes
 | 
						|
- **State management** handled on the server
 | 
						|
- **WebSocket integration** for live updates
 | 
						|
 | 
						|
### Alpine.js (Client-Side Interactivity)
 | 
						|
- **Lightweight JavaScript** for DOM manipulation
 | 
						|
- **Declarative directives** in HTML
 | 
						|
- **Component-like behavior** without build steps
 | 
						|
- **Perfect companion** to Livewire
 | 
						|
 | 
						|
### Tailwind CSS 4.1+ (Styling)
 | 
						|
- **Utility-first** CSS framework
 | 
						|
- **Custom design system** for deployment platform
 | 
						|
- **Responsive design** built-in
 | 
						|
- **Dark mode support**
 | 
						|
 | 
						|
## Livewire Component Structure
 | 
						|
 | 
						|
### Location: [app/Livewire/](mdc:app/Livewire)
 | 
						|
 | 
						|
#### Core Application Components
 | 
						|
- **[Dashboard.php](mdc:app/Livewire/Dashboard.php)** - Main dashboard interface
 | 
						|
- **[ActivityMonitor.php](mdc:app/Livewire/ActivityMonitor.php)** - Real-time activity tracking
 | 
						|
- **[MonacoEditor.php](mdc:app/Livewire/MonacoEditor.php)** - Code editor component
 | 
						|
 | 
						|
#### Server Management
 | 
						|
- **Server/** directory - Server configuration and monitoring
 | 
						|
- Real-time server status updates
 | 
						|
- SSH connection management
 | 
						|
- Resource monitoring
 | 
						|
 | 
						|
#### Project & Application Management
 | 
						|
- **Project/** directory - Project organization
 | 
						|
- Application deployment interfaces
 | 
						|
- Environment variable management
 | 
						|
- Service configuration
 | 
						|
 | 
						|
#### Settings & Configuration
 | 
						|
- **Settings/** directory - System configuration
 | 
						|
- **[SettingsEmail.php](mdc:app/Livewire/SettingsEmail.php)** - Email notification setup
 | 
						|
- **[SettingsOauth.php](mdc:app/Livewire/SettingsOauth.php)** - OAuth provider configuration
 | 
						|
- **[SettingsBackup.php](mdc:app/Livewire/SettingsBackup.php)** - Backup configuration
 | 
						|
 | 
						|
#### User & Team Management
 | 
						|
- **Team/** directory - Team collaboration features
 | 
						|
- **Profile/** directory - User profile management
 | 
						|
- **Security/** directory - Security settings
 | 
						|
 | 
						|
## Blade Template Organization
 | 
						|
 | 
						|
### Location: [resources/views/](mdc:resources/views)
 | 
						|
 | 
						|
#### Layout Structure
 | 
						|
- **layouts/** - Base layout templates
 | 
						|
- **components/** - Reusable UI components
 | 
						|
- **livewire/** - Livewire component views
 | 
						|
 | 
						|
#### Feature-Specific Views
 | 
						|
- **server/** - Server management interfaces
 | 
						|
- **auth/** - Authentication pages
 | 
						|
- **emails/** - Email templates
 | 
						|
- **errors/** - Error pages
 | 
						|
 | 
						|
## Interactive Components
 | 
						|
 | 
						|
### Monaco Editor Integration
 | 
						|
- **Code editing** for configuration files
 | 
						|
- **Syntax highlighting** for multiple languages
 | 
						|
- **Live validation** and error detection
 | 
						|
- **Integration** with deployment process
 | 
						|
 | 
						|
### Terminal Emulation (XTerm.js)
 | 
						|
- **Real-time terminal** access to servers
 | 
						|
- **WebSocket-based** communication
 | 
						|
- **Multi-session** support
 | 
						|
- **Secure connection** through SSH
 | 
						|
 | 
						|
### Real-Time Updates
 | 
						|
- **WebSocket connections** via Laravel Echo
 | 
						|
- **Live deployment logs** streaming
 | 
						|
- **Server monitoring** with live metrics
 | 
						|
- **Activity notifications** in real-time
 | 
						|
 | 
						|
## Alpine.js Patterns
 | 
						|
 | 
						|
### Common Directives Used
 | 
						|
```html
 | 
						|
<!-- State management -->
 | 
						|
<div x-data="{ open: false }">
 | 
						|
 | 
						|
<!-- Event handling -->
 | 
						|
<button x-on:click="open = !open">
 | 
						|
 | 
						|
<!-- Conditional rendering -->
 | 
						|
<div x-show="open">
 | 
						|
 | 
						|
<!-- Data binding -->
 | 
						|
<input x-model="searchTerm">
 | 
						|
 | 
						|
<!-- Component initialization -->
 | 
						|
<div x-init="initializeComponent()">
 | 
						|
```
 | 
						|
 | 
						|
### Integration with Livewire
 | 
						|
```html
 | 
						|
<!-- Livewire actions with Alpine state -->
 | 
						|
<button 
 | 
						|
    x-data="{ loading: false }"
 | 
						|
    x-on:click="loading = true"
 | 
						|
    wire:click="deploy"
 | 
						|
    wire:loading.attr="disabled"
 | 
						|
    wire:target="deploy"
 | 
						|
>
 | 
						|
    <span x-show="!loading">Deploy</span>
 | 
						|
    <span x-show="loading">Deploying...</span>
 | 
						|
</button>
 | 
						|
```
 | 
						|
 | 
						|
## Tailwind CSS Patterns
 | 
						|
 | 
						|
### Design System
 | 
						|
- **Consistent spacing** using Tailwind scale
 | 
						|
- **Color palette** optimized for deployment platform
 | 
						|
- **Typography** hierarchy for technical content
 | 
						|
- **Component classes** for reusable elements
 | 
						|
 | 
						|
### Responsive Design
 | 
						|
```html
 | 
						|
<!-- Mobile-first responsive design -->
 | 
						|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3">
 | 
						|
    <!-- Content adapts to screen size -->
 | 
						|
</div>
 | 
						|
```
 | 
						|
 | 
						|
### Dark Mode Support
 | 
						|
```html
 | 
						|
<!-- Dark mode variants -->
 | 
						|
<div class="bg-white dark:bg-gray-900 text-gray-900 dark:text-gray-100">
 | 
						|
    <!-- Automatic dark mode switching -->
 | 
						|
</div>
 | 
						|
```
 | 
						|
 | 
						|
## Build Process
 | 
						|
 | 
						|
### Vite Configuration ([vite.config.js](mdc:vite.config.js))
 | 
						|
- **Fast development** with hot module replacement
 | 
						|
- **Optimized production** builds
 | 
						|
- **Asset versioning** for cache busting
 | 
						|
- **CSS processing** with PostCSS
 | 
						|
 | 
						|
### Asset Compilation
 | 
						|
```bash
 | 
						|
# Development
 | 
						|
npm run dev
 | 
						|
 | 
						|
# Production build
 | 
						|
npm run build
 | 
						|
```
 | 
						|
 | 
						|
## State Management Patterns
 | 
						|
 | 
						|
### Server-Side State (Livewire)
 | 
						|
- **Component properties** for persistent state
 | 
						|
- **Session storage** for user preferences
 | 
						|
- **Database models** for application state
 | 
						|
- **Cache layer** for performance
 | 
						|
 | 
						|
### Client-Side State (Alpine.js)
 | 
						|
- **Local component state** for UI interactions
 | 
						|
- **Form validation** and user feedback
 | 
						|
- **Modal and dropdown** state management
 | 
						|
- **Temporary UI states** (loading, hover, etc.)
 | 
						|
 | 
						|
## Real-Time Features
 | 
						|
 | 
						|
### WebSocket Integration
 | 
						|
```php
 | 
						|
// Livewire component with real-time updates
 | 
						|
class ActivityMonitor extends Component
 | 
						|
{
 | 
						|
    public function getListeners()
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            'deployment.started' => 'refresh',
 | 
						|
            'deployment.finished' => 'refresh',
 | 
						|
            'server.status.changed' => 'updateServerStatus',
 | 
						|
        ];
 | 
						|
    }
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
### Event Broadcasting
 | 
						|
- **Laravel Echo** for client-side WebSocket handling
 | 
						|
- **Pusher protocol** for real-time communication
 | 
						|
- **Private channels** for user-specific events
 | 
						|
- **Presence channels** for collaborative features
 | 
						|
 | 
						|
## Performance Patterns
 | 
						|
 | 
						|
### Lazy Loading
 | 
						|
```php
 | 
						|
// Livewire lazy loading
 | 
						|
class ServerList extends Component
 | 
						|
{
 | 
						|
    public function placeholder()
 | 
						|
    {
 | 
						|
        return view('components.loading-skeleton');
 | 
						|
    }
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
### Caching Strategies
 | 
						|
- **Fragment caching** for expensive operations
 | 
						|
- **Image optimization** with lazy loading
 | 
						|
- **Asset bundling** and compression
 | 
						|
- **CDN integration** for static assets
 | 
						|
 | 
						|
## Form Handling Patterns
 | 
						|
 | 
						|
### Livewire Forms
 | 
						|
```php
 | 
						|
class ServerCreateForm extends Component
 | 
						|
{
 | 
						|
    public $name;
 | 
						|
    public $ip;
 | 
						|
    
 | 
						|
    protected $rules = [
 | 
						|
        'name' => 'required|min:3',
 | 
						|
        'ip' => 'required|ip',
 | 
						|
    ];
 | 
						|
    
 | 
						|
    public function save()
 | 
						|
    {
 | 
						|
        $this->validate();
 | 
						|
        // Save logic
 | 
						|
    }
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
### Real-Time Validation
 | 
						|
- **Live validation** as user types
 | 
						|
- **Server-side validation** rules
 | 
						|
- **Error message** display
 | 
						|
- **Success feedback** patterns
 | 
						|
 | 
						|
## Component Communication
 | 
						|
 | 
						|
### Parent-Child Communication
 | 
						|
```php
 | 
						|
// Parent component
 | 
						|
$this->emit('serverCreated', $server->id);
 | 
						|
 | 
						|
// Child component
 | 
						|
protected $listeners = ['serverCreated' => 'refresh'];
 | 
						|
```
 | 
						|
 | 
						|
### Cross-Component Events
 | 
						|
- **Global events** for application-wide updates
 | 
						|
- **Scoped events** for feature-specific communication
 | 
						|
- **Browser events** for JavaScript integration
 | 
						|
 | 
						|
## Error Handling & UX
 | 
						|
 | 
						|
### Loading States
 | 
						|
- **Skeleton screens** during data loading
 | 
						|
- **Progress indicators** for long operations
 | 
						|
- **Optimistic updates** with rollback capability
 | 
						|
 | 
						|
### Error Display
 | 
						|
- **Toast notifications** for user feedback
 | 
						|
- **Inline validation** errors
 | 
						|
- **Global error** handling
 | 
						|
- **Retry mechanisms** for failed operations
 | 
						|
 | 
						|
## Accessibility Patterns
 | 
						|
 | 
						|
### ARIA Labels and Roles
 | 
						|
```html
 | 
						|
<button
 | 
						|
    aria-label="Deploy application"
 | 
						|
    aria-describedby="deploy-help"
 | 
						|
    wire:click="deploy"
 | 
						|
>
 | 
						|
    Deploy
 | 
						|
</button>
 | 
						|
```
 | 
						|
 | 
						|
### Keyboard Navigation
 | 
						|
- **Tab order** management
 | 
						|
- **Keyboard shortcuts** for power users
 | 
						|
- **Focus management** in modals and forms
 | 
						|
- **Screen reader** compatibility
 | 
						|
 | 
						|
## Mobile Optimization
 | 
						|
 | 
						|
### Touch-Friendly Interface
 | 
						|
- **Larger tap targets** for mobile devices
 | 
						|
- **Swipe gestures** where appropriate
 | 
						|
- **Mobile-optimized** forms and navigation
 | 
						|
 | 
						|
### Progressive Enhancement
 | 
						|
- **Core functionality** works without JavaScript
 | 
						|
- **Enhanced experience** with JavaScript enabled
 | 
						|
- **Offline capabilities** where possible
 |