# Shared Asset Repository This directory contains the master repository of all assets that can be used by Rustelo implementation templates. This follows the DRY principle - all assets are defined once here and included by template variants as needed. ## Structure ``` shared/ ├── scripts/ # Setup, build, database, deployment scripts │ ├── setup/ # Installation and setup scripts │ ├── build/ # Build and compilation scripts │ ├── database/ # Database management scripts │ ├── deploy/ # Deployment scripts │ ├── testing/ # Testing and quality assurance scripts │ └── utils/ # Utility scripts ├── configs/ # Configuration templates │ ├── base/ # Base configurations (app.toml, database.toml, etc.) │ ├── environments/ # Environment-specific configs (dev, prod, staging) │ ├── features/ # Feature-specific configurations (auth, content, etc.) │ └── examples/ # Example configurations ├── docker/ # Docker files for different purposes │ ├── Dockerfile.dev # Development Docker file │ └── Dockerfile.cross # Cross-compilation Docker file ├── content/ # Sample content and localization │ ├── locales/ # Localization files │ ├── blog/ # Sample blog posts │ └── pages/ # Sample pages ├── docs/ # Documentation templates ├── public/ # Public assets (images, logos, etc.) ├── src/ # Source code templates │ ├── main.rs.template # Main application entry point │ └── lib.rs.template # Library entry point ├── justfile.template # Just task runner configuration ├── package.json.template # Node.js package configuration ├── Cargo.toml.template # Rust package configuration ├── unocss.config.ts.template # UnoCSS configuration └── rustelo-deps.toml.template # Rustelo dependency configuration ``` ## Asset Inclusion System Template variants use inclusion/exclusion patterns to select which assets they need: ### Template Manifest Format Each template variant has a manifest that specifies: ```json { "name": "basic", "includes": [ "shared/scripts/setup/*.sh", "shared/scripts/build/build-docs.sh", "shared/configs/base/*.toml", "shared/docker/Dockerfile.dev" ], "excludes": [ "shared/scripts/enterprise/*", "shared/configs/features/advanced/*" ], "template_files": [ "shared/justfile.template", "shared/package.json.template", "shared/Cargo.toml.template", "shared/unocss.config.ts.template" ] } ``` ### Template Variables All `.template` files support variable substitution: - `{{project_name}}` - Project name - `{{project_name_snake}}` - Project name in snake_case - `{{template_variant}}` - Template variant (basic, enterprise, etc.) - `{{rustelo_version}}` - Rustelo framework version - `{{generation_timestamp}}` - When the template was generated - `{{asset_source}}` - Where assets came from (local, remote, etc.) ## Adding New Assets 1. **Add the asset file** to the appropriate subdirectory 2. **Use template variables** if the asset needs customization 3. **Update template manifests** to include the new asset where appropriate 4. **Test with different variants** to ensure proper inclusion ## Maintaining DRY Principle - **Single source of truth**: All assets live in `shared/` - **Template variants include, don't duplicate**: Templates specify what to include, not what to copy - **Easy updates**: Modify once in `shared/`, all templates benefit - **Clear ownership**: Each asset has one canonical location ## Asset Types ### Scripts (`shared/scripts/`) Executable shell scripts for various tasks: - Setup and installation - Build and compilation - Database management - Deployment - Testing and validation ### Configurations (`shared/configs/`) Configuration file templates: - Base configurations for common settings - Environment-specific configs - Feature-specific configs - Example configurations ### Templates (`shared/*.template`) Core project file templates: - Build system configuration - Package management - CSS/styling configuration - Framework dependency management ### Content (`shared/content/`) Sample content and localization: - Blog posts - Page content - Localization files - Menu structures ## Template Resolution Process 1. **Template selection**: User chooses a template variant 2. **Manifest loading**: CLI loads the template's manifest 3. **Asset resolution**: CLI processes include/exclude patterns 4. **File copying**: Matching assets are copied to target project 5. **Variable substitution**: Template variables are replaced in `.template` files 6. **File renaming**: `.template` extensions are removed This approach ensures maintainability, reduces duplication, and provides flexibility for different implementation needs.