Files
rspade_system/app/RSpade/man/rsx_architecture.txt
root f6fac6c4bc Fix bin/publish: copy docs.dist from project root
Fix bin/publish: use correct .env path for rspade_system
Fix bin/publish script: prevent grep exit code 1 from terminating script

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-21 02:08:33 +00:00

282 lines
10 KiB
Plaintext
Executable File

NAME
rsx_architecture - RSX application structure and organization
SYNOPSIS
RSX application structure, module organization, and development patterns
DESCRIPTION
RSX applications follow a standardized module-based architecture that
separates framework code from application code. Understanding this
structure is essential for organizing files, creating modules, and
understanding the development workflow.
RSX DIRECTORY STRUCTURE
The /rsx/ directory contains all application code organized by modules:
/rsx/
├── app/ # Application modules
│ ├── frontend/ # Public website (route: /)
│ │ ├── frontend_controller.php
│ │ ├── frontend_bundle.php
│ │ ├── frontend_view.blade.php
│ │ ├── frontend.scss
│ │ ├── frontend.js
│ │ └── layout.blade.php
│ ├── backend/ # Admin panel (route: /admin)
│ │ └── (same structure as frontend)
│ ├── dashboard/ # User dashboard (route: /dashboard)
│ │ └── (same structure as frontend)
│ ├── root/ # Super admin (route: /root)
│ │ └── (same structure as frontend)
│ ├── login/ # Authentication (routes: /login, /logout)
│ │ └── (same structure as frontend)
│ ├── api/ # Public API endpoints
│ │ └── CLAUDE.md # API documentation
│ └── demo/ # Demo/example code
├── lib/ # Shared libraries and utilities
├── models/ # Database models
├── theme/ # Global theme assets
│ ├── variables.scss # Global SCSS variables
│ ├── components/ # Reusable UI components
│ └── layouts/ # Shared layouts (if needed)
└── main.php # Application-wide middleware hooks
MODULE STRUCTURE CONVENTION
Each module is self-contained with its own files:
File Naming:
- Always lowercase: frontend_controller.php
- Underscore separation: user_profile_view.blade.php
Class Naming:
- Noun_Type format: Frontend_Controller, Backend_Bundle
- Matches file name pattern
View Identifiers:
- Noun_Type format: @rsx_id('Frontend_View')
- Used for CSS scoping and identification
Bundle Rendering:
- Required format: {!! Module_Bundle::render() !!}
- Example: {!! Frontend_Bundle::render() !!}
API ORGANIZATION
Two types of API endpoints:
Public APIs (/rsx/app/api/):
- External-facing endpoints
- Include versioning
- Public documentation
Internal APIs:
- Place in module directories: /rsx/app/frontend/api/
- Or in shared location: /rsx/lib/
- Module-specific functionality
MODULE HIERARCHY
RSX uses a four-level hierarchy for organizing complex applications:
Level 1 - Module:
- Top-level application section
- Route: /module
- Has own layout and styling
- Example: frontend, backend, dashboard
Level 2 - Submodule:
- Sub-section within module with embedded layout
- Route: /module/submodule
- Extends parent module layout
- Example: /backend/users, /dashboard/reports
Level 3 - Feature:
- Specific functionality page
- Route: /module/feature or /module/submodule/feature
- Individual page within module/submodule
- Example: /backend/create, /dashboard/reports/monthly
Level 4 - Subfeature:
- Sub-page within feature
- Route: /module/feature/subfeature or /module/submodule/feature/subfeature
- Detailed or step-based pages
- Example: /backend/create/step2, /dashboard/reports/monthly/export
MODULE FEATURES
Each level creates specific file structures:
Index Feature (default):
- Route: /module
- Files in module root: module_index_controller.php
- Default landing page for module
Additional Features:
- Route: /module/feature
- Files in subdirectory: module/feature/module_feature_controller.php
- Each feature is self-contained
Feature Files:
- Controller: handles routing and logic
- View: Blade template for HTML
- JS Class: client-side behavior
- SCSS: styling specific to feature
SUBMODULE ORGANIZATION
Submodules provide hierarchical organization:
Layout Structure:
- Submodules have embedded layouts extending parent layouts
- Allows consistent styling within module family
- Parent module controls overall structure
File Placement:
- Submodule files in: /rsx/app/module/submodule/
- Features within submodule: /rsx/app/module/submodule/feature/
- Maintains clear separation of concerns
MODULE CREATION COMMANDS
Generate modules with standardized structure using hierarchy commands:
Level 1 - Module Commands:
php artisan rsx:app:module:create signup
Creates: /rsx/app/signup/ with index feature
Route: /signup
php artisan rsx:app:module:feature:create signup verify_email
Creates: /rsx/app/signup/verify_email/
Route: /signup/verify_email
Level 2 - Submodule Commands:
php artisan rsx:app:submodule:create backend users
Creates: /rsx/app/backend/users/ with embedded layout
Route: /backend/users
php artisan rsx:app:submodule:feature:create backend users create
Creates: /rsx/app/backend/users/create/
Route: /backend/users/create
Level 3 - Subfeature Commands:
php artisan rsx:app:subfeature:create signup verify_email confirm
Creates: /rsx/app/signup/verify_email/confirm/
Route: /signup/verify_email/confirm
php artisan rsx:app:submodule:subfeature:create backend users create step2
Creates: /rsx/app/backend/users/create/step2/
Route: /backend/users/create/step2
Component Commands:
php artisan rsx:app:component:create --name=my_widget --path=rsx/theme/components
Creates reusable jqhtml component in theme directory
php artisan rsx:app:component:create --name=user_card --module=dashboard
Creates component within specific module
php artisan rsx:app:component:create --name=form_field --module=backend --feature=users
Creates component within module feature
COMMAND NAMING RULES
All names must be lowercase with underscores:
- Correct: user_profile, email_verify, admin_panel
- Incorrect: UserProfile, emailVerify, admin-panel
Examples of full hierarchy:
Module: ecommerce
Submodule: ecommerce/products
Feature: ecommerce/products/create
Subfeature: ecommerce/products/create/images
JAVASCRIPT INTEGRATION
JavaScript classes auto-initialize:
- Extend appropriate base classes
- Use static on_app_ready() method for initialization
- Use static on_jqhtml_ready() to wait for JQHTML components to load
- No manual registration required
Lifecycle timing:
- on_app_ready(): Runs when page initializes, before JQHTML components finish
- on_jqhtml_ready(): Runs after all JQHTML components loaded and rendered
Important limitation:
JavaScript only executes when bundle is rendered in HTML output.
Won't work with:
- JSON API responses
- Raw HTML responses
- Views without bundle includes
SHARED RESOURCES
Theme Directory (/rsx/theme/):
- variables.scss: Global SCSS variables and mixins
- components/: Reusable jqhtml components
- layouts/: Shared layout templates (if needed)
Library Directory (/rsx/lib/):
- Shared utility classes
- Common business logic
- Internal API helpers
Models Directory (/rsx/models/):
- Database model classes
- Data validation logic
- Model relationships
MIDDLEWARE INTEGRATION
Application-wide hooks via /rsx/main.php:
- Extends Main_Abstract
- Provides init(), pre_dispatch(), unhandled_route() methods
- Handles cross-cutting concerns
DEVELOPMENT WORKFLOW
1. Plan module hierarchy (module > submodule > feature > subfeature)
2. Create structure with appropriate artisan commands
3. Implement controllers with route attributes
4. Create view templates with bundle includes
5. Add JavaScript classes for interactivity
6. Style with SCSS in theme or module files
7. Test with rsx:debug command
HIERARCHY PLANNING
Choose appropriate level based on complexity:
Simple Applications:
- Use modules and features only
- Example: /login, /dashboard, /profile
Complex Applications:
- Use full hierarchy for organization
- Example: /admin/users/create/permissions
Planning Questions:
- Does this need its own layout? (Use submodule)
- Is this a multi-step process? (Use subfeatures)
- Will users bookmark this page? (Consider hierarchy depth)
BEST PRACTICES
Hierarchy Organization:
- Start simple: use modules and features first
- Add submodules when you need distinct layouts
- Use subfeatures for multi-step processes
- Avoid deep nesting (4 levels maximum)
Module Organization:
- Keep modules focused on single responsibility
- Use shared /lib/ for cross-module functionality
- Place components in /theme/ if truly reusable
File Organization:
- Follow naming conventions strictly (lowercase, underscores)
- Keep related files together in module directories
- Use features for complex modules with multiple pages
- Group related submodules under logical modules
API Design:
- Public APIs in /api/ with versioning
- Internal APIs close to consuming code
- Document API endpoints in module CLAUDE.md files
Layout Strategy:
- Module layouts for major sections
- Submodule embedded layouts for consistent styling
- Share common elements through parent layouts
SEE ALSO
bundle_api - Bundle system documentation
controller - Controller patterns and routing
manifest_api - Manifest system reference