This document serves as the primary architecture and knowledge base for AI agents developing on the Helix Ultimate framework (Joomla 4, 5, and 6).
- CMS: Joomla 4, 5, and 6
- Language: PHP (following Joomla coding standards where applicable)
- Styling: SCSS prioritized over standard CSS, utilizing Bootstrap 5 conventions
- Scripting: Vanilla JS (ES6) prioritized over jQuery
- Template Framework: Helix Ultimate
The framework is divided into two main components:
-
System Plugin (
plugins/system/helixultimate/)- Contains the core framework logic, layouts, custom fields, and parameters.
core/: Core classes and bootstrapping.src/: Namespaced classes (HelixUltimate\Framework\...).fields/: Custom Joomla form fields.layouts/: Reusable HTML layouts.html/: Layout overrides for standard Joomla components.
-
Template (
templates/shaper_helixultimate/)- The frontend starter template utilizing the framework.
index.php: Main entry point for rendering.scss/: All styling should be done here. Do NOT write standard CSS unless unavoidable.js/: Custom scripts (prefer Vanilla JS).features/: Template features (logo, social, title, etc.).html/: Template-specific overrides.
- SCSS over CSS: Always write styles in SCSS. Use the existing SCSS structure in the template (
scss/theme.scss,scss/custom.scss). Utilize Bootstrap 5 mixins and variables. - Vanilla JS: Avoid jQuery. Use modern Vanilla JS (ES6+) for all new scripts.
- Template Overrides: When overriding Joomla components or modules, place them in the
html/directory of the template, following the standard Joomla override hierarchy. - Framework API: Utilize
HelixUltimate\Framework\Platform\Helperand other built-in classes rather than reinventing the wheel. - Joomla Core Compatibility: Ensure code is compatible with Joomla 4+ (avoid deprecated Joomla 3 methods like
JFactory, useJoomla\CMS\Factoryand Namespaced classes instead).
- Utilize Bootstrap 5 utility classes for layout (e.g.,
d-flex,row,col) instead of writing custom CSS grids/flexbox where Bootstrap already provides a solution. - Scope custom styles properly to avoid global conflicts.
- Use
document.addEventListener('DOMContentLoaded', ...)for initialization. - Use
fetchAPI instead ofjQuery.ajax. - Utilize standard ES6 features (const/let, arrow functions, template literals).