This document defines the frontend architecture, design system, component strategy and UI conventions for the Symfony UX Starter Kit.
All frontend implementations must follow these guidelines.
The following frontend stack is mandatory.
Do not introduce:
Bootstrap Icons are allowed through Symfony UX Icons.
The UI should follow modern SaaS and professional application standards.
Inspirations:
The interface should be:
Primary background:
slate-950
Surface:
slate-900
Primary color:
blue-600
Primary hover:
blue-500
Primary active:
blue-700
Accent:
cyan-500
Text:
gray-100
Muted text:
gray-400
Borders:
slate-800
Success:
green-500
Warning:
amber-500
Danger:
red-500
Plus Jakarta Sans
Used for:
JetBrains Mono
Used for:
Do not use:
Dark mode is mandatory.
All components must support dark mode.
No light-only components are allowed.
All pages must support:
Mobile-first principles should be preferred.
The application uses a shared layout.
Sidebar
Header
Content Area
Structure:
+---------------------+
| Sidebar |
| |
+------+--------------+
| Header |
+--------------+
| Content |
| |
+--------------+
The sidebar is a reusable Symfony UX Component.
Responsibilities:
Component:
Sidebar
The navbar is a reusable Symfony UX Component.
Responsibilities:
Component:
Navbar
Preline provides visual implementation.
Symfony UX Components provide application abstraction.
Architecture:
Page
↓
Symfony UX Component
↓
Preline
↓
Tailwind
Before creating a new component:
Expected components:
Card
Modal
Alert
Badge
Dropdown
Table
Navbar
Sidebar
StatWidget
Pagination
FormField
Good:
Card
Modal
Table
Badge
Bad:
UserCard
CustomerCard
ProfileCard
DashboardCard
Prefer configurable generic components.
Example:
<twig:Card title="Profile">
...
</twig:Card>
When a task references an existing Preline component:
The generated component must visually resemble the official Preline component.
The objective is adaptation, not reinterpretation.
Preline UI is the visual source of truth.
When implementing a component based on a Preline component:
Do not redesign components.
Do not invent alternative layouts when a Preline component already exists.
Cards are the primary container component.
Cards should:
Example:
<twig:Card title="User Information">
...
</twig:Card>
Tables must be responsive.
Tables should support:
Component:
Table
Forms should use Symfony Forms.
All form fields should be wrapped using reusable components.
Example:
FormField
Responsibilities:
Button hierarchy:
Primary:
blue-600
Secondary:
slate-700
Danger:
red-500
Success:
green-500
Modals should be implemented through:
Modal
Avoid custom modal implementations.
Use Preline modal behavior.
Alert component variants:
success
warning
danger
info
Reusable component:
Alert
Badge component variants:
success
warning
danger
info
neutral
Reusable component:
Badge
Icons must be provided through:
Symfony UX Icons
Preferred icon set:
Bootstrap Icons
No SVG duplication in templates.
No inline SVG unless strictly necessary.
Charts use:
Symfony UX ChartJS
Charts are demonstration-only.
Keep examples generic.
Maps use:
Symfony UX Map
Leaflet should be used for demonstrations.
The account page demonstrates user localisation.
Uploads use:
Symfony UX Dropzone
The home page should demonstrate upload capabilities.
Autocomplete uses:
Symfony UX Autocomplete
The home page should contain a demonstration component.
Purpose:
Demonstrate available UI components.
Examples:
No business data.
Purpose:
Demonstrate authenticated profile management.
Displayed information:
Use reusable components exclusively.
Requirements:
Accessibility is not optional.
Avoid custom CSS whenever possible.
Prefer:
Custom CSS should be exceptional.
When creating a new page:
No exceptions.
Toute logique liée aux variantes visuelles doit être définie dans le composant PHP.
Cela inclut :
Les templates Twig ne doivent pas contenir de longues conditions if/elseif pour gérer les
variantes.
How can I help you explore Laravel packages today?