From 17ccae270f9755b7fe53fb73d3ded53348eb293a Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 20 Feb 2026 01:04:09 +0000
Subject: [PATCH 1/7] Initial plan
From ac51405b06d67565792b663494c05ae6d4af35fc Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 20 Feb 2026 01:06:58 +0000
Subject: [PATCH 2/7] Add comprehensive client fork README template and
documentation
Co-authored-by: jmiller-moko <230051081+jmiller-moko@users.noreply.github.com>
---
CLIENT_FORK_README.md | 453 +++++++++++++++++++++++
README.md | 18 +-
docs/README.md | 14 +-
templates/CLIENT_FORK_README_TEMPLATE.md | 57 +++
4 files changed, 537 insertions(+), 5 deletions(-)
create mode 100644 CLIENT_FORK_README.md
create mode 100644 templates/CLIENT_FORK_README_TEMPLATE.md
diff --git a/CLIENT_FORK_README.md b/CLIENT_FORK_README.md
new file mode 100644
index 0000000..a0ab7e6
--- /dev/null
+++ b/CLIENT_FORK_README.md
@@ -0,0 +1,453 @@
+
+
+# [CLIENT NAME] - MokoCassiopeia Custom Fork
+
+**Custom Joomla Template Fork for [CLIENT NAME]**
+
+This is a customized fork of the [MokoCassiopeia](https://github.com/mokoconsulting-tech/MokoCassiopeia) Joomla template, tailored specifically for [CLIENT NAME]'s website.
+
+---
+
+## 📋 About This Fork
+
+This repository contains client-specific customizations built on top of the MokoCassiopeia template. The template provides a modern, lightweight enhancement layer for Joomla with advanced theming, Font Awesome 7, Bootstrap 5, and dark mode support.
+
+### Customization Strategy
+
+This fork maintains the following customizations:
+- **Custom Color Schemes**: Brand-specific colors for light and dark modes
+- **Custom Code**: Client-specific HTML, CSS, and JavaScript customizations
+- **Configuration**: Pre-configured template settings for the client environment
+
+All customizations are designed to be preserved when syncing with upstream MokoCassiopeia updates.
+
+---
+
+## 🚀 Quick Start
+
+### Prerequisites
+
+- **Joomla**: 4.4.x or 5.x
+- **PHP**: 8.0 or higher
+- **Git**: For version control and syncing with upstream
+- **Local Development**: MAMP/XAMPP/Docker for local testing
+
+### Installation for Development
+
+1. **Clone this repository**:
+ ```bash
+ git clone [YOUR-FORK-URL]
+ cd [YOUR-FORK-NAME]
+ ```
+
+2. **Set up upstream remote** (for syncing updates):
+ ```bash
+ git remote add upstream https://github.com/mokoconsulting-tech/MokoCassiopeia.git
+ git fetch upstream
+ ```
+
+3. **Install into Joomla**:
+ - Copy the `src/` directory contents to your Joomla installation:
+ - `src/templates/` → `[joomla]/templates/`
+ - `src/media/` → `[joomla]/media/templates/site/mokocassiopeia/`
+ - `src/language/` → `[joomla]/language/`
+ - `src/administrator/language/` → `[joomla]/administrator/language/`
+
+4. **Enable the template**:
+ - Log into Joomla admin
+ - Navigate to **System → Site Templates**
+ - Set **MokoCassiopeia** as the default template
+
+---
+
+## 🎨 Custom Branding & Colors
+
+### Custom Color Schemes
+
+This fork includes custom color schemes specific to [CLIENT NAME]'s brand:
+
+**Location**:
+- Light mode: `src/media/css/colors/light/colors_custom.css`
+- Dark mode: `src/media/css/colors/dark/colors_custom.css`
+
+**Note**: These files are gitignored in the upstream repository to prevent conflicts, but are tracked in this fork.
+
+### Modifying Brand Colors
+
+1. **Edit the custom color files**:
+ ```bash
+ # Light mode colors
+ edit src/media/css/colors/light/colors_custom.css
+
+ # Dark mode colors
+ edit src/media/css/colors/dark/colors_custom.css
+ ```
+
+2. **Key variables to customize**:
+ ```css
+ :root[data-bs-theme="light"] {
+ --color-primary: #YOUR-BRAND-COLOR;
+ --accent-color-primary: #YOUR-ACCENT-COLOR;
+ --color-link: #YOUR-LINK-COLOR;
+ --nav-bg-color: #YOUR-NAV-BG;
+ }
+ ```
+
+3. **Test your changes**:
+ - Clear Joomla cache: System → Clear Cache
+ - Clear browser cache (Ctrl+Shift+R / Cmd+Shift+R)
+ - View your site in light and dark modes
+
+### Available CSS Variables
+
+For a complete reference of all customizable CSS variables, see the [CSS Variables Documentation](./docs/CSS_VARIABLES.md) in the upstream repository.
+
+---
+
+## 🔧 Custom Code Injection
+
+### Using custom.php
+
+The `src/templates/custom.php` file allows for custom PHP functions and HTML snippets:
+
+**Location**: `src/templates/custom.php`
+
+**Example Use Cases**:
+- Custom helper functions
+- Client-specific HTML snippets
+- Custom console logging
+- Integration code
+
+**Example**:
+```php
+' . $js_code . '';
+ }
+ echo $js_code;
+}
+?>
+
+```
+
+### Custom Code via Joomla Template Settings
+
+You can also inject custom code via the Joomla admin interface:
+
+1. Navigate to **System → Site Templates → MokoCassiopeia**
+2. Go to the **Custom Code** tab
+3. Add custom HTML/CSS/JS in:
+ - **Custom Head Start**: Injected at the beginning of `
`
+ - **Custom Head End**: Injected at the end of ``
+
+This approach is ideal for:
+- Analytics tracking codes
+- Custom meta tags
+- External script includes
+- Custom CSS snippets
+
+---
+
+## 🔄 Syncing with Upstream Updates
+
+To keep your fork up-to-date with new features and bug fixes from the upstream MokoCassiopeia repository:
+
+### 1. Fetch Upstream Changes
+
+```bash
+# Ensure upstream remote is configured
+git remote -v
+# If upstream is not listed, add it:
+# git remote add upstream https://github.com/mokoconsulting-tech/MokoCassiopeia.git
+
+# Fetch latest changes
+git fetch upstream
+```
+
+### 2. Review Changes
+
+```bash
+# See what changed in upstream
+git log HEAD..upstream/main --oneline
+
+# Review the diff
+git diff HEAD..upstream/main
+```
+
+### 3. Merge Upstream Changes
+
+```bash
+# Switch to your main branch
+git checkout main
+
+# Merge upstream changes
+git merge upstream/main
+
+# Or rebase (preserves cleaner history):
+# git rebase upstream/main
+```
+
+### 4. Resolve Conflicts
+
+If conflicts occur (typically in custom files):
+
+1. **Check conflict status**:
+ ```bash
+ git status
+ ```
+
+2. **Resolve conflicts manually** in your editor:
+ - Look for conflict markers: `<<<<<<<`, `=======`, `>>>>>>>`
+ - Keep your custom changes
+ - Remove conflict markers
+
+3. **Complete the merge**:
+ ```bash
+ git add .
+ git commit -m "Merge upstream updates and resolve conflicts"
+ ```
+
+### 5. Test After Merging
+
+- Clear Joomla cache
+- Test critical functionality:
+ - Homepage loads correctly
+ - Custom colors are preserved
+ - Dark mode toggle works
+ - Navigation functions properly
+ - Custom code still executes
+
+### Protected Files
+
+The following files contain your customizations and should be carefully reviewed during merges:
+
+- `src/media/css/colors/light/colors_custom.css` (custom light mode colors)
+- `src/media/css/colors/dark/colors_custom.css` (custom dark mode colors)
+- `src/templates/custom.php` (custom PHP code)
+- Template configuration (stored in Joomla database, not in files)
+
+---
+
+## 📦 Building & Deployment
+
+### Creating a Template Package
+
+To create an installable ZIP package of your customized template:
+
+1. **Prepare the package**:
+ ```bash
+ cd src
+ zip -r ../mokocassiopeia-[CLIENT-NAME]-[VERSION].zip . -x "*.git*" "*.DS_Store"
+ ```
+
+2. **Install via Joomla**:
+ - Upload the ZIP file via **System → Install → Extensions**
+ - Or manually copy files to the Joomla installation
+
+### Deployment to Production
+
+**Recommended Deployment Methods**:
+
+1. **Via Joomla Extension Manager** (Easiest):
+ - Create a ZIP package as described above
+ - Upload via Joomla admin interface
+ - The template will automatically overwrite the existing installation
+
+2. **Via FTP/SFTP**:
+ - Upload changed files directly to the server
+ - Clear Joomla cache after deployment
+
+3. **Via Git** (Advanced):
+ - Push changes to a deployment branch
+ - Use Git hooks or CI/CD to deploy to production
+ - Ensure proper file permissions
+
+**Post-Deployment Checklist**:
+- [ ] Clear Joomla cache (System → Clear Cache)
+- [ ] Test homepage
+- [ ] Test navigation and menus
+- [ ] Verify custom colors appear correctly
+- [ ] Test dark mode toggle
+- [ ] Check mobile responsiveness
+- [ ] Verify analytics tracking (if enabled)
+
+---
+
+## 🛠 Local Development Setup
+
+### Setting Up a Local Joomla Environment
+
+1. **Install a local server stack**:
+ - **MAMP** (Mac/Windows): https://www.mamp.info/
+ - **XAMPP** (Cross-platform): https://www.apachefriends.org/
+ - **Docker**: https://github.com/joomla-docker/docker-joomla
+
+2. **Install Joomla**:
+ - Download Joomla from https://downloads.joomla.org/
+ - Extract to your local server's web directory
+ - Follow the Joomla installation wizard
+
+3. **Install this template**:
+ - Copy files from this repository to your Joomla installation
+ - Or upload the ZIP package via Joomla's Extension Manager
+
+4. **Enable development mode**:
+ - Edit `configuration.php`:
+ ```php
+ public $debug = '1';
+ public $error_reporting = 'maximum';
+ ```
+
+### Development Workflow
+
+1. **Make changes** to template files in your local Joomla installation
+2. **Test changes** in your browser
+3. **Copy changes back** to this repository:
+ ```bash
+ # From Joomla installation
+ cp [joomla]/templates/mokocassiopeia/* [repo]/src/templates/
+ cp [joomla]/media/templates/site/mokocassiopeia/css/* [repo]/src/media/css/
+ ```
+4. **Commit and push** to your fork
+5. **Deploy** to staging/production when ready
+
+### Quick Testing Commands
+
+```bash
+# Clear Joomla cache from command line
+rm -rf [joomla]/cache/*
+rm -rf [joomla]/administrator/cache/*
+
+# Watch for CSS changes (if using a build tool)
+# npm run watch
+```
+
+---
+
+## 📝 Customization Checklist
+
+Use this checklist when setting up or modifying your custom fork:
+
+### Initial Setup
+- [ ] Fork the MokoCassiopeia repository
+- [ ] Update this README with client name and details
+- [ ] Configure custom brand colors
+- [ ] Test light and dark modes
+- [ ] Add custom code if needed
+- [ ] Configure template settings in Joomla
+- [ ] Set up analytics tracking (if required)
+- [ ] Test on multiple devices and browsers
+
+### Ongoing Maintenance
+- [ ] Sync with upstream periodically (monthly recommended)
+- [ ] Review upstream changelog for breaking changes
+- [ ] Test thoroughly after merging upstream updates
+- [ ] Keep this README updated with customization notes
+- [ ] Document any client-specific configurations
+- [ ] Maintain backup before major updates
+
+---
+
+## 📚 Documentation Resources
+
+### MokoCassiopeia Documentation
+
+- **[Main README](https://github.com/mokoconsulting-tech/MokoCassiopeia/blob/main/README.md)** - Features and overview
+- **[CSS Variables Reference](./docs/CSS_VARIABLES.md)** - Complete CSS customization guide
+- **[Development Guide](./docs/JOOMLA_DEVELOPMENT.md)** - Development and testing
+- **[Quick Start](./docs/QUICK_START.md)** - Quick setup guide
+- **[Changelog](./CHANGELOG.md)** - Version history
+
+### Joomla Resources
+
+- **[Joomla Documentation](https://docs.joomla.org/)** - Official Joomla docs
+- **[Joomla Templates](https://docs.joomla.org/J4.x:How_to_Create_a_Joomla_Template)** - Template development guide
+- **[Cassiopeia Documentation](https://docs.joomla.org/J4.x:Cassiopeia)** - Parent template docs
+
+---
+
+## 🔒 Security & Best Practices
+
+### Security Considerations
+
+1. **Keep Joomla Updated**: Always run the latest stable Joomla version
+2. **Update Dependencies**: Regularly sync with upstream MokoCassiopeia for security patches
+3. **Secure Custom Code**: Review all custom code for security vulnerabilities
+4. **Use HTTPS**: Always serve production sites over HTTPS
+5. **Regular Backups**: Maintain regular backups of both files and database
+
+### Best Practices
+
+1. **Version Control**: Commit changes frequently with clear messages
+2. **Testing**: Always test changes locally before deploying to production
+3. **Documentation**: Document all customizations in this README
+4. **Code Review**: Have changes reviewed before deploying to production
+5. **Staging Environment**: Use a staging site to test updates before production
+
+---
+
+## 📞 Support & Contact
+
+### Client-Specific Support
+
+**Client Contact**: [CLIENT CONTACT INFO]
+**Developer Contact**: [DEVELOPER CONTACT INFO]
+**Hosting Provider**: [HOSTING INFO]
+
+### Upstream MokoCassiopeia Support
+
+- **Repository**: https://github.com/mokoconsulting-tech/MokoCassiopeia
+- **Issues**: https://github.com/mokoconsulting-tech/MokoCassiopeia/issues
+- **Documentation**: https://github.com/mokoconsulting-tech/MokoCassiopeia/blob/main/README.md
+- **Moko Consulting**: https://mokoconsulting.tech
+
+---
+
+## 📄 License
+
+This fork maintains the original GPL-3.0-or-later license from MokoCassiopeia.
+
+- **MokoCassiopeia**: GPL-3.0-or-later
+- **Client Customizations**: GPL-3.0-or-later (or as specified by client agreement)
+- **Third-Party Libraries**: See [Included Libraries](https://github.com/mokoconsulting-tech/MokoCassiopeia#-included-libraries)
+
+---
+
+## 📊 Fork Information
+
+- **Upstream Repository**: https://github.com/mokoconsulting-tech/MokoCassiopeia
+- **Fork Repository**: [YOUR-FORK-URL]
+- **Client**: [CLIENT NAME]
+- **Created**: [DATE]
+- **Last Synced with Upstream**: [DATE]
+- **Current Version**: 03.06.03
+
+---
+
+## 🔄 Revision History
+
+| Date | Version | Change Summary | Author |
+|------|---------|----------------|--------|
+| [DATE] | 03.06.03 | Initial fork setup with custom colors and branding | [YOUR NAME] |
+
+---
+
+**Maintained by [CLIENT NAME] / [DEVELOPER NAME]**
diff --git a/README.md b/README.md
index d1ef4b0..74aab56 100644
--- a/README.md
+++ b/README.md
@@ -328,9 +328,13 @@ See [Joomla Development Guide](./docs/JOOMLA_DEVELOPMENT.md) for packaging instr
### Customization Resources
-- **[Template Files](./templates/)** - Ready-to-use color palette templates
- - `colors_custom_light.css` - Light mode template
- - `colors_custom_dark.css` - Dark mode template
+- **[Template Files](./templates/)** - Ready-to-use templates for customization
+ - `colors_custom.css` - Custom color palette template
+ - `CLIENT_FORK_README_TEMPLATE.md` - Template for client fork documentation
+
+### Client Forks
+
+- **[Client Fork Guide](./CLIENT_FORK_README.md)** - Comprehensive guide for creating and maintaining client custom code forks
### Governance
@@ -398,6 +402,14 @@ We welcome contributions! Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for gu
See [Workflow Guide](./docs/WORKFLOW_GUIDE.md) for detailed Git workflow.
+### Client Custom Forks
+
+Creating a custom fork for client-specific branding and code? See our comprehensive [Client Fork Guide](./CLIENT_FORK_README.md) for:
+- Setting up custom color schemes
+- Maintaining fork-specific customizations
+- Syncing with upstream updates
+- Deployment workflows
+
---
## 📦 Included Libraries
diff --git a/docs/README.md b/docs/README.md
index 4dceab9..87a11de 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -70,6 +70,15 @@ This directory contains comprehensive documentation for the MokoCassiopeia Jooml
For end-user documentation, installation instructions, and feature guides, see the main [README.md](../README.md) in the repository root.
+### Client Fork Documentation
+
+* **[Client Fork Guide](../CLIENT_FORK_README.md)** - Comprehensive guide for client custom code forks
+ * Setting up custom branding and colors
+ * Maintaining fork-specific customizations
+ * Syncing with upstream MokoCassiopeia
+ * Deployment and development workflows
+ * Template README for client forks
+
## Project Structure
```
@@ -85,9 +94,10 @@ moko-cassiopeia/
│ ├── templates/ # Joomla template files
│ └── media/ # Assets (CSS, JS, images)
├── templates/ # Template files for customization
-│ ├── colors_custom_light.css # Light mode color template
-│ └── colors_custom_dark.css # Dark mode color template
+│ ├── colors_custom.css # Custom color palette template
+│ └── CLIENT_FORK_README_TEMPLATE.md # Template for client fork docs
├── tests/ # Automated tests
+├── CLIENT_FORK_README.md # Client fork guide
└── .github/ # GitHub configuration and workflows
```
diff --git a/templates/CLIENT_FORK_README_TEMPLATE.md b/templates/CLIENT_FORK_README_TEMPLATE.md
new file mode 100644
index 0000000..4b2d497
--- /dev/null
+++ b/templates/CLIENT_FORK_README_TEMPLATE.md
@@ -0,0 +1,57 @@
+
+
+# [CLIENT NAME] - MokoCassiopeia Custom
+
+Custom Joomla template fork for **[CLIENT NAME]**.
+
+---
+
+## 🎨 Custom Branding
+
+**Brand Colors**:
+- Primary: `[COLOR]`
+- Accent: `[COLOR]`
+- Background: `[COLOR]`
+
+**Custom Files**:
+- Light mode colors: `src/media/css/colors/light/colors_custom.css`
+- Dark mode colors: `src/media/css/colors/dark/colors_custom.css`
+- Custom PHP code: `src/templates/custom.php`
+
+---
+
+## 🔄 Syncing with Upstream
+
+```bash
+# Add upstream remote (first time only)
+git remote add upstream https://github.com/mokoconsulting-tech/MokoCassiopeia.git
+
+# Sync with upstream
+git fetch upstream
+git merge upstream/main
+```
+
+---
+
+## 📚 Documentation
+
+- **Full Client Fork Guide**: [CLIENT_FORK_README.md](../CLIENT_FORK_README.md)
+- **MokoCassiopeia Docs**: https://github.com/mokoconsulting-tech/MokoCassiopeia
+- **CSS Variables**: [docs/CSS_VARIABLES.md](../docs/CSS_VARIABLES.md)
+
+---
+
+## 📝 Quick Notes
+
+[Add your client-specific notes here]
+
+---
+
+**Fork of**: [MokoCassiopeia](https://github.com/mokoconsulting-tech/MokoCassiopeia) v03.06.03
+**Last Synced**: [DATE]
+**Contact**: [CONTACT INFO]
From 9b842516e72b3afae3f260c467628674ec164593 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 20 Feb 2026 01:07:50 +0000
Subject: [PATCH 3/7] Add templates directory README explaining client fork
resources
Co-authored-by: jmiller-moko <230051081+jmiller-moko@users.noreply.github.com>
---
templates/README.md | 81 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 81 insertions(+)
create mode 100644 templates/README.md
diff --git a/templates/README.md b/templates/README.md
new file mode 100644
index 0000000..b5b78e3
--- /dev/null
+++ b/templates/README.md
@@ -0,0 +1,81 @@
+
+
+# MokoCassiopeia Template Files
+
+This directory contains template files for client customizations and custom code forks.
+
+---
+
+## 📁 Available Templates
+
+### Custom Color Scheme Template
+
+**File**: `colors_custom.css`
+
+A comprehensive template for creating custom color schemes. This template includes all CSS variables used by MokoCassiopeia for both light and dark modes.
+
+**Usage**:
+1. Copy this file to either:
+ - `src/media/css/colors/light/colors_custom.css` (for light mode)
+ - `src/media/css/colors/dark/colors_custom.css` (for dark mode)
+2. Customize the CSS variables to match your brand colors
+3. Enable in Joomla: System → Site Templates → MokoCassiopeia → Theme tab
+4. Set the appropriate palette to "Custom"
+
+**Reference**: See [CSS Variables Documentation](../docs/CSS_VARIABLES.md) for complete variable reference.
+
+---
+
+### Client Fork README Template
+
+**File**: `CLIENT_FORK_README_TEMPLATE.md`
+
+A simplified README template for client-specific forks. Use this as a starting point for documenting your customizations.
+
+**Usage**:
+1. Copy this file to the root of your fork repository as `README.md`
+2. Replace `[CLIENT NAME]` with your client's name
+3. Fill in brand colors and contact information
+4. Add client-specific notes and configurations
+
+**For Comprehensive Fork Setup**: See [CLIENT_FORK_README.md](../CLIENT_FORK_README.md) for the complete client fork guide.
+
+---
+
+## 🎯 When to Use These Templates
+
+### Creating a Client Fork
+
+If you're creating a custom fork of MokoCassiopeia for a specific client:
+
+1. **Start with the full guide**: Read [CLIENT_FORK_README.md](../CLIENT_FORK_README.md)
+2. **Set up custom colors**: Use `colors_custom.css` as your starting point
+3. **Document your fork**: Copy `CLIENT_FORK_README_TEMPLATE.md` to your fork
+
+### Custom Colors Only
+
+If you just need custom colors without forking:
+
+1. Use the `colors_custom.css` template
+2. Follow the instructions in the [main README](../README.md#custom-color-palettes)
+3. Enable custom palette in Joomla template settings
+
+---
+
+## 📚 Additional Resources
+
+- **[Main README](../README.md)** - MokoCassiopeia features and installation
+- **[Client Fork Guide](../CLIENT_FORK_README.md)** - Complete guide for client forks
+- **[CSS Variables Reference](../docs/CSS_VARIABLES.md)** - All available CSS variables
+- **[Development Guide](../docs/JOOMLA_DEVELOPMENT.md)** - Development workflows
+
+---
+
+**Template Directory**: `/templates/`
+**Version**: 03.06.03
+**Maintained by**: Moko Consulting
From 084bac383a7ae8926f691351ed50207b269f0961 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 20 Feb 2026 01:08:41 +0000
Subject: [PATCH 4/7] Fix project structure diagram to clarify custom color
file locations
Co-authored-by: jmiller-moko <230051081+jmiller-moko@users.noreply.github.com>
---
docs/README.md | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/docs/README.md b/docs/README.md
index 87a11de..946514f 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -92,10 +92,15 @@ moko-cassiopeia/
│ └── ROADMAP.md # Version-specific roadmap
├── src/ # Template source code
│ ├── templates/ # Joomla template files
-│ └── media/ # Assets (CSS, JS, images)
+│ ├── media/ # Assets (CSS, JS, images)
+│ │ └── css/colors/ # Color schemes (light/dark subdirectories)
+│ │ ├── light/ # Light mode color files (colors_custom.css)
+│ │ └── dark/ # Dark mode color files (colors_custom.css)
+│ └── language/ # Translation files
├── templates/ # Template files for customization
-│ ├── colors_custom.css # Custom color palette template
-│ └── CLIENT_FORK_README_TEMPLATE.md # Template for client fork docs
+│ ├── colors_custom.css # Custom color palette template (copy to src/media/css/colors/)
+│ ├── CLIENT_FORK_README_TEMPLATE.md # Template for client fork docs
+│ └── README.md # Guide to using templates
├── tests/ # Automated tests
├── CLIENT_FORK_README.md # Client fork guide
└── .github/ # GitHub configuration and workflows
From 64e8db75aa15a06a00a8a5d2daadae3086e8f308 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 20 Feb 2026 01:38:06 +0000
Subject: [PATCH 5/7] Add client fork creation workflow and script
Co-authored-by: jmiller-moko <230051081+jmiller-moko@users.noreply.github.com>
---
.github/workflows/create-client-fork.yml | 164 ++++++++++++
docs/CLIENT_FORK_WORKFLOW.md | 320 +++++++++++++++++++++++
scripts/create-client-fork.sh | 168 ++++++++++++
3 files changed, 652 insertions(+)
create mode 100644 .github/workflows/create-client-fork.yml
create mode 100644 docs/CLIENT_FORK_WORKFLOW.md
create mode 100755 scripts/create-client-fork.sh
diff --git a/.github/workflows/create-client-fork.yml b/.github/workflows/create-client-fork.yml
new file mode 100644
index 0000000..77f32aa
--- /dev/null
+++ b/.github/workflows/create-client-fork.yml
@@ -0,0 +1,164 @@
+# Copyright (C) 2026 Moko Consulting
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# GitHub Actions Workflow: Create Client Fork Implementation
+# This workflow prepares the repository for a client-specific fork by:
+# - Copying custom color templates to the appropriate locations
+# - Replacing the main README with the client fork README
+# - Cleaning up template documentation files
+
+name: Create Client Fork
+
+on:
+ workflow_dispatch:
+ inputs:
+ client_name:
+ description: 'Client Name (e.g., "Acme Corporation")'
+ required: true
+ type: string
+ confirm:
+ description: 'Type "CONFIRM" to proceed with fork creation'
+ required: true
+ type: string
+
+jobs:
+ create-fork:
+ name: Setup Client Fork
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Validate confirmation
+ if: ${{ inputs.confirm != 'CONFIRM' }}
+ run: |
+ echo "::error::You must type CONFIRM to proceed with fork creation"
+ exit 1
+
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Setup Git
+ run: |
+ git config user.name "github-actions[bot]"
+ git config user.email "github-actions[bot]@users.noreply.github.com"
+
+ - name: Create client fork branch
+ run: |
+ CLIENT_SLUG=$(echo "${{ inputs.client_name }}" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
+ BRANCH_NAME="client-fork/${CLIENT_SLUG}"
+ git checkout -b "${BRANCH_NAME}"
+ echo "BRANCH_NAME=${BRANCH_NAME}" >> $GITHUB_ENV
+ echo "CLIENT_SLUG=${CLIENT_SLUG}" >> $GITHUB_ENV
+
+ - name: Copy custom color templates
+ run: |
+ # Copy the colors_custom.css template to both light and dark mode directories
+ echo "Copying colors_custom.css to light and dark mode directories..."
+ cp templates/colors_custom.css src/media/css/colors/light/colors_custom.css
+ cp templates/colors_custom.css src/media/css/colors/dark/colors_custom.css
+
+ # Verify files were created
+ if [ -f "src/media/css/colors/light/colors_custom.css" ]; then
+ echo "✓ Created src/media/css/colors/light/colors_custom.css"
+ else
+ echo "::error::Failed to create light mode colors_custom.css"
+ exit 1
+ fi
+
+ if [ -f "src/media/css/colors/dark/colors_custom.css" ]; then
+ echo "✓ Created src/media/css/colors/dark/colors_custom.css"
+ else
+ echo "::error::Failed to create dark mode colors_custom.css"
+ exit 1
+ fi
+
+ - name: Replace README with client fork README
+ run: |
+ echo "Replacing README.md with CLIENT_FORK_README.md..."
+
+ # Customize the CLIENT_FORK_README.md with client name
+ sed "s/\[CLIENT NAME\]/${{ inputs.client_name }}/g" CLIENT_FORK_README.md > README.md
+
+ # Update fork information section
+ CURRENT_DATE=$(date +"%Y-%m-%d")
+ sed -i "s/\[DATE\]/${CURRENT_DATE}/g" README.md
+ sed -i "s/\[YOUR-FORK-URL\]/https:\/\/github.com\/${GITHUB_REPOSITORY}/g" README.md
+
+ echo "✓ README.md replaced with customized client fork README"
+
+ - name: Clean up template files
+ run: |
+ echo "Removing template documentation files..."
+
+ # Remove the original CLIENT_FORK_README.md
+ if [ -f "CLIENT_FORK_README.md" ]; then
+ rm CLIENT_FORK_README.md
+ echo "✓ Removed CLIENT_FORK_README.md"
+ fi
+
+ # Remove the template README from templates directory
+ if [ -f "templates/CLIENT_FORK_README_TEMPLATE.md" ]; then
+ rm templates/CLIENT_FORK_README_TEMPLATE.md
+ echo "✓ Removed templates/CLIENT_FORK_README_TEMPLATE.md"
+ fi
+
+ # Update templates/README.md to remove references to CLIENT_FORK_README_TEMPLATE.md
+ if [ -f "templates/README.md" ]; then
+ sed -i '/CLIENT_FORK_README_TEMPLATE.md/d' templates/README.md
+ sed -i '/Client Fork README Template/,/^---$/d' templates/README.md
+ echo "✓ Updated templates/README.md"
+ fi
+
+ # Keep templates/colors_custom.css as specified
+ echo "✓ Keeping templates/colors_custom.css as template"
+
+ - name: Commit changes
+ run: |
+ git add .
+ git status
+
+ if git diff --staged --quiet; then
+ echo "No changes to commit"
+ else
+ git commit -m "Setup client fork for ${{ inputs.client_name }}
+
+- Copied colors_custom.css to src/media/css/colors/light/ and dark/
+- Replaced README.md with customized CLIENT_FORK_README.md
+- Removed CLIENT_FORK_README.md and templates/CLIENT_FORK_README_TEMPLATE.md
+- Kept templates/colors_custom.css as template
+
+This commit prepares the repository for ${{ inputs.client_name }}'s custom fork."
+
+ echo "✓ Changes committed successfully"
+ fi
+
+ - name: Push branch
+ run: |
+ git push origin "${BRANCH_NAME}"
+ echo "✓ Branch ${BRANCH_NAME} pushed successfully"
+
+ - name: Summary
+ run: |
+ echo "## Client Fork Setup Complete! 🎉" >> $GITHUB_STEP_SUMMARY
+ echo "" >> $GITHUB_STEP_SUMMARY
+ echo "### Changes Applied" >> $GITHUB_STEP_SUMMARY
+ echo "- ✓ Copied \`colors_custom.css\` to \`src/media/css/colors/light/\`" >> $GITHUB_STEP_SUMMARY
+ echo "- ✓ Copied \`colors_custom.css\` to \`src/media/css/colors/dark/\`" >> $GITHUB_STEP_SUMMARY
+ echo "- ✓ Replaced \`README.md\` with customized client fork README" >> $GITHUB_STEP_SUMMARY
+ echo "- ✓ Removed \`CLIENT_FORK_README.md\`" >> $GITHUB_STEP_SUMMARY
+ echo "- ✓ Removed \`templates/CLIENT_FORK_README_TEMPLATE.md\`" >> $GITHUB_STEP_SUMMARY
+ echo "- ✓ Kept \`templates/colors_custom.css\` as template" >> $GITHUB_STEP_SUMMARY
+ echo "" >> $GITHUB_STEP_SUMMARY
+ echo "### Next Steps" >> $GITHUB_STEP_SUMMARY
+ echo "1. Review the changes in branch: \`${BRANCH_NAME}\`" >> $GITHUB_STEP_SUMMARY
+ echo "2. Customize colors in \`src/media/css/colors/light/colors_custom.css\`" >> $GITHUB_STEP_SUMMARY
+ echo "3. Customize colors in \`src/media/css/colors/dark/colors_custom.css\`" >> $GITHUB_STEP_SUMMARY
+ echo "4. Update \`README.md\` with client-specific details" >> $GITHUB_STEP_SUMMARY
+ echo "5. Create a new repository for ${{ inputs.client_name }}" >> $GITHUB_STEP_SUMMARY
+ echo "6. Push this branch to the new repository" >> $GITHUB_STEP_SUMMARY
+ echo "" >> $GITHUB_STEP_SUMMARY
+ echo "### Branch Information" >> $GITHUB_STEP_SUMMARY
+ echo "- **Branch Name**: \`${BRANCH_NAME}\`" >> $GITHUB_STEP_SUMMARY
+ echo "- **Client**: ${{ inputs.client_name }}" >> $GITHUB_STEP_SUMMARY
diff --git a/docs/CLIENT_FORK_WORKFLOW.md b/docs/CLIENT_FORK_WORKFLOW.md
new file mode 100644
index 0000000..131ceaf
--- /dev/null
+++ b/docs/CLIENT_FORK_WORKFLOW.md
@@ -0,0 +1,320 @@
+
+
+# Client Fork Creation Workflow
+
+This document explains how to use the automated client fork creation tools to set up a new client-specific fork of MokoCassiopeia.
+
+---
+
+## Overview
+
+The client fork creation workflow automates the process of preparing a repository for a client-specific fork. It performs the following actions:
+
+1. ✅ Copies `templates/colors_custom.css` to `src/media/css/colors/light/colors_custom.css`
+2. ✅ Copies `templates/colors_custom.css` to `src/media/css/colors/dark/colors_custom.css`
+3. ✅ Replaces `README.md` with customized `CLIENT_FORK_README.md`
+4. ✅ Removes `CLIENT_FORK_README.md` from root
+5. ✅ Removes `templates/CLIENT_FORK_README_TEMPLATE.md`
+6. ✅ Updates `templates/README.md` to remove fork template references
+7. ✅ Keeps `templates/colors_custom.css` as a template for reference
+
+---
+
+## Method 1: GitHub Actions Workflow (Recommended)
+
+### Prerequisites
+
+- Repository admin or maintainer access
+- GitHub Actions enabled for the repository
+
+### Steps
+
+1. **Navigate to Actions**
+ - Go to your repository on GitHub
+ - Click on the "Actions" tab
+
+2. **Run the Workflow**
+ - Select "Create Client Fork" from the workflow list
+ - Click "Run workflow"
+ - Fill in the required inputs:
+ - **Client Name**: Full client name (e.g., "Acme Corporation")
+ - **Confirm**: Type "CONFIRM" to proceed
+ - Click "Run workflow" button
+
+3. **Monitor Progress**
+ - The workflow will create a new branch named `client-fork/{client-slug}`
+ - You can monitor the progress in the Actions tab
+ - Once complete, you'll see a summary of changes
+
+4. **Review the Branch**
+ - Navigate to the new branch: `client-fork/{client-slug}`
+ - Review the changes made
+ - The README will be customized with the client name
+ - Custom color files will be in place
+
+5. **Create Client Repository**
+ - Create a new repository for the client
+ - Push the branch to the new repository:
+ ```bash
+ git remote add client-repo
+ git push client-repo client-fork/{client-slug}:main
+ ```
+
+### Workflow Features
+
+- ✅ **Safe Confirmation**: Requires typing "CONFIRM" to prevent accidental runs
+- ✅ **Automated Branch Creation**: Creates a properly named branch automatically
+- ✅ **Customized README**: Automatically fills in client name and date
+- ✅ **Git Tracking**: Commits all changes with a descriptive message
+- ✅ **Summary Report**: Provides a complete summary of actions taken
+
+---
+
+## Method 2: Local Bash Script
+
+### Prerequisites
+
+- Git installed on your local machine
+- Bash shell (Linux, macOS, or Git Bash on Windows)
+- Local clone of the MokoCassiopeia repository
+
+### Steps
+
+1. **Clone the Repository**
+ ```bash
+ git clone https://github.com/mokoconsulting-tech/MokoCassiopeia.git
+ cd MokoCassiopeia
+ ```
+
+2. **Make Script Executable**
+ ```bash
+ chmod +x scripts/create-client-fork.sh
+ ```
+
+3. **Run the Script**
+ ```bash
+ ./scripts/create-client-fork.sh "Client Name"
+ ```
+
+ Example:
+ ```bash
+ ./scripts/create-client-fork.sh "Acme Corporation"
+ ```
+
+4. **Confirm Actions**
+ - The script will show you what it will do
+ - Type "yes" to proceed
+ - Review the changes shown
+ - Type "yes" to commit
+
+5. **Push to New Repository**
+ ```bash
+ # Add the client's repository as a remote
+ git remote add client-repo
+
+ # Push the branch
+ git push client-repo client-fork/{client-slug}:main
+ ```
+
+### Script Features
+
+- 🎨 **Colored Output**: Easy-to-read colored terminal output
+- ✅ **Interactive Confirmation**: Asks for confirmation before making changes
+- ✅ **Safety Checks**: Verifies you're in the correct directory
+- ✅ **Progress Indicators**: Shows each step as it completes
+- ✅ **Git Status**: Shows what files changed before committing
+- ✅ **Summary**: Provides a complete summary at the end
+
+---
+
+## What Gets Changed
+
+### Files Created
+
+```
+src/media/css/colors/light/colors_custom.css [NEW]
+src/media/css/colors/dark/colors_custom.css [NEW]
+```
+
+### Files Modified
+
+```
+README.md [REPLACED]
+templates/README.md [UPDATED]
+```
+
+### Files Removed
+
+```
+CLIENT_FORK_README.md [DELETED]
+templates/CLIENT_FORK_README_TEMPLATE.md [DELETED]
+```
+
+### Files Kept
+
+```
+templates/colors_custom.css [UNCHANGED]
+```
+
+---
+
+## Post-Setup Steps
+
+After running the workflow or script, you should:
+
+1. **Customize Brand Colors**
+ - Edit `src/media/css/colors/light/colors_custom.css`
+ - Edit `src/media/css/colors/dark/colors_custom.css`
+ - Update CSS variables to match client branding
+
+2. **Update README**
+ - Fill in client-specific contact information
+ - Add custom notes or configurations
+ - Update fork URL references
+
+3. **Test Locally**
+ - Install the template in a local Joomla instance
+ - Test light and dark modes
+ - Verify custom colors appear correctly
+
+4. **Create Client Repository**
+ - Create a new repository for the client
+ - Push the prepared branch to the new repo
+ - Set up appropriate access controls
+
+5. **Enable Custom Palette in Joomla**
+ - Log into Joomla admin
+ - Navigate to System → Site Templates → MokoCassiopeia
+ - Under Theme tab, set palette to "Custom"
+ - Save and test
+
+---
+
+## Troubleshooting
+
+### Workflow Fails with "CONFIRM" Error
+
+**Problem**: Workflow stops immediately with confirmation error.
+
+**Solution**: Make sure you type "CONFIRM" (in all caps) in the confirmation field.
+
+### Script Says "CLIENT_FORK_README.md not found"
+
+**Problem**: Script can't find required files.
+
+**Solution**: Make sure you're running the script from the repository root directory:
+```bash
+cd /path/to/MokoCassiopeia
+./scripts/create-client-fork.sh "Client Name"
+```
+
+### Colors Don't Appear After Setup
+
+**Problem**: Custom colors don't show in Joomla.
+
+**Solution**:
+1. Enable custom palette in template settings
+2. Clear Joomla cache (System → Clear Cache)
+3. Clear browser cache (Ctrl+Shift+R / Cmd+Shift+R)
+
+### Branch Already Exists
+
+**Problem**: Branch name conflicts with existing branch.
+
+**Solution**: Either delete the old branch or choose a different client name:
+```bash
+# Delete old branch
+git branch -D client-fork/{client-slug}
+
+# Or use a more specific client name
+./scripts/create-client-fork.sh "Client Name - Division"
+```
+
+---
+
+## Examples
+
+### Example 1: Simple Client Fork
+
+```bash
+# Using the script
+./scripts/create-client-fork.sh "Acme Corporation"
+```
+
+This creates:
+- Branch: `client-fork/acme-corporation`
+- README title: "Acme Corporation - MokoCassiopeia Custom Fork"
+
+### Example 2: Client with Multiple Words
+
+```bash
+# Using the script
+./scripts/create-client-fork.sh "Global Tech Solutions Inc"
+```
+
+This creates:
+- Branch: `client-fork/global-tech-solutions-inc`
+- README title: "Global Tech Solutions Inc - MokoCassiopeia Custom Fork"
+
+### Example 3: Using GitHub Actions
+
+1. Go to Actions → Create Client Fork
+2. Enter: "Mountain View Medical Center"
+3. Enter: "CONFIRM"
+4. Click "Run workflow"
+
+Result:
+- Branch: `client-fork/mountain-view-medical-center`
+- README title: "Mountain View Medical Center - MokoCassiopeia Custom Fork"
+
+---
+
+## Best Practices
+
+1. **Naming Convention**: Use the official client name as it should appear in documentation
+
+2. **Branch Management**:
+ - Keep the branch until the client repository is set up
+ - Don't merge client fork branches back to main
+
+3. **Custom Colors**:
+ - Document color choices in README
+ - Keep a backup of custom color files
+ - Test in both light and dark modes
+
+4. **Version Tracking**:
+ - Note the upstream version in fork README
+ - Track when you last synced with upstream
+
+5. **Security**:
+ - Don't commit client-specific credentials
+ - Review custom code before deployment
+ - Keep client forks private if they contain sensitive branding
+
+---
+
+## Related Documentation
+
+- **[CLIENT_FORK_README.md](../CLIENT_FORK_README.md)** - Full client fork guide
+- **[CSS Variables](../docs/CSS_VARIABLES.md)** - Complete CSS variable reference
+- **[Main README](../README.md)** - MokoCassiopeia documentation
+
+---
+
+## Support
+
+For issues with the workflow or script:
+- Check this documentation first
+- Review error messages carefully
+- Contact: hello@mokoconsulting.tech
+
+---
+
+**Document Version**: 1.0
+**Last Updated**: 2026-02-20
+**Maintained by**: Moko Consulting
diff --git a/scripts/create-client-fork.sh b/scripts/create-client-fork.sh
new file mode 100755
index 0000000..6f6b321
--- /dev/null
+++ b/scripts/create-client-fork.sh
@@ -0,0 +1,168 @@
+#!/bin/bash
+# Copyright (C) 2026 Moko Consulting
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# Script: Create Client Fork Setup
+# This script prepares the repository for a client-specific fork by:
+# - Copying custom color templates to the appropriate locations
+# - Replacing the main README with the client fork README
+# - Cleaning up template documentation files
+
+set -e
+
+# Colors for output
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[1;33m'
+BLUE='\033[0;34m'
+NC='\033[0m' # No Color
+
+# Function to print colored output
+print_success() { echo -e "${GREEN}✓${NC} $1"; }
+print_error() { echo -e "${RED}✗${NC} $1"; }
+print_info() { echo -e "${BLUE}ℹ${NC} $1"; }
+print_warning() { echo -e "${YELLOW}⚠${NC} $1"; }
+
+# Check if client name is provided
+if [ -z "$1" ]; then
+ print_error "Usage: $0 "
+ echo "Example: $0 \"Acme Corporation\""
+ exit 1
+fi
+
+CLIENT_NAME="$1"
+CLIENT_SLUG=$(echo "${CLIENT_NAME}" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
+BRANCH_NAME="client-fork/${CLIENT_SLUG}"
+
+echo ""
+echo "╔════════════════════════════════════════════════════════════════╗"
+echo "║ MokoCassiopeia - Client Fork Setup Script ║"
+echo "╚════════════════════════════════════════════════════════════════╝"
+echo ""
+print_info "Client Name: ${CLIENT_NAME}"
+print_info "Branch Name: ${BRANCH_NAME}"
+echo ""
+
+# Confirm before proceeding
+read -p "Do you want to proceed? (yes/no): " -r
+echo
+if [[ ! $REPLY =~ ^[Yy]es$ ]]; then
+ print_warning "Operation cancelled by user"
+ exit 0
+fi
+
+# Check if we're in the right directory
+if [ ! -f "CLIENT_FORK_README.md" ]; then
+ print_error "CLIENT_FORK_README.md not found. Are you in the repository root?"
+ exit 1
+fi
+
+# Create new branch
+print_info "Creating branch: ${BRANCH_NAME}"
+git checkout -b "${BRANCH_NAME}"
+print_success "Branch created"
+
+# Copy custom color templates
+print_info "Copying colors_custom.css to light and dark mode directories..."
+cp templates/colors_custom.css src/media/css/colors/light/colors_custom.css
+cp templates/colors_custom.css src/media/css/colors/dark/colors_custom.css
+
+if [ -f "src/media/css/colors/light/colors_custom.css" ] && [ -f "src/media/css/colors/dark/colors_custom.css" ]; then
+ print_success "Created src/media/css/colors/light/colors_custom.css"
+ print_success "Created src/media/css/colors/dark/colors_custom.css"
+else
+ print_error "Failed to create colors_custom.css files"
+ exit 1
+fi
+
+# Replace README with client fork README
+print_info "Replacing README.md with CLIENT_FORK_README.md..."
+sed "s/\[CLIENT NAME\]/${CLIENT_NAME}/g" CLIENT_FORK_README.md > README.md.new
+mv README.md.new README.md
+
+# Update fork information section
+CURRENT_DATE=$(date +"%Y-%m-%d")
+sed -i.bak "s/\[DATE\]/${CURRENT_DATE}/g" README.md
+sed -i.bak "s/\[YOUR-FORK-URL\]/[UPDATE-WITH-YOUR-FORK-URL]/g" README.md
+rm -f README.md.bak
+
+print_success "README.md replaced with customized client fork README"
+
+# Clean up template files
+print_info "Removing template documentation files..."
+
+if [ -f "CLIENT_FORK_README.md" ]; then
+ rm CLIENT_FORK_README.md
+ print_success "Removed CLIENT_FORK_README.md"
+fi
+
+if [ -f "templates/CLIENT_FORK_README_TEMPLATE.md" ]; then
+ rm templates/CLIENT_FORK_README_TEMPLATE.md
+ print_success "Removed templates/CLIENT_FORK_README_TEMPLATE.md"
+fi
+
+# Update templates/README.md
+if [ -f "templates/README.md" ]; then
+ # Create a backup
+ cp templates/README.md templates/README.md.bak
+
+ # Remove references to CLIENT_FORK_README_TEMPLATE.md
+ sed '/CLIENT_FORK_README_TEMPLATE.md/d' templates/README.md > templates/README.md.tmp
+ mv templates/README.md.tmp templates/README.md
+ rm -f templates/README.md.bak
+
+ print_success "Updated templates/README.md"
+fi
+
+print_success "Keeping templates/colors_custom.css as template"
+
+# Show git status
+echo ""
+print_info "Git status:"
+git status --short
+
+# Commit changes
+echo ""
+read -p "Commit these changes? (yes/no): " -r
+echo
+if [[ $REPLY =~ ^[Yy]es$ ]]; then
+ git add .
+ git commit -m "Setup client fork for ${CLIENT_NAME}
+
+- Copied colors_custom.css to src/media/css/colors/light/ and dark/
+- Replaced README.md with customized CLIENT_FORK_README.md
+- Removed CLIENT_FORK_README.md and templates/CLIENT_FORK_README_TEMPLATE.md
+- Kept templates/colors_custom.css as template
+
+This commit prepares the repository for ${CLIENT_NAME}'s custom fork."
+
+ print_success "Changes committed successfully"
+
+ echo ""
+ print_info "To push this branch, run:"
+ echo " git push origin ${BRANCH_NAME}"
+fi
+
+# Summary
+echo ""
+echo "╔════════════════════════════════════════════════════════════════╗"
+echo "║ Setup Complete! 🎉 ║"
+echo "╚════════════════════════════════════════════════════════════════╝"
+echo ""
+echo "Changes Applied:"
+print_success "Copied colors_custom.css to src/media/css/colors/light/"
+print_success "Copied colors_custom.css to src/media/css/colors/dark/"
+print_success "Replaced README.md with customized client fork README"
+print_success "Removed CLIENT_FORK_README.md"
+print_success "Removed templates/CLIENT_FORK_README_TEMPLATE.md"
+print_success "Kept templates/colors_custom.css as template"
+echo ""
+echo "Next Steps:"
+echo "1. Review the changes in branch: ${BRANCH_NAME}"
+echo "2. Customize colors in src/media/css/colors/light/colors_custom.css"
+echo "3. Customize colors in src/media/css/colors/dark/colors_custom.css"
+echo "4. Update README.md with client-specific details"
+echo "5. Create a new repository for ${CLIENT_NAME}"
+echo "6. Push this branch to the new repository"
+echo ""
From f1c1841cea5275bd4117559c1c1d95b23616d0f5 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 20 Feb 2026 01:39:36 +0000
Subject: [PATCH 6/7] Fix workflow YAML syntax and update documentation
references
Co-authored-by: jmiller-moko <230051081+jmiller-moko@users.noreply.github.com>
---
.github/workflows/create-client-fork.yml | 136 ++++++++++-------------
CLIENT_FORK_README.md | 2 +
README.md | 7 +-
docs/README.md | 6 +
4 files changed, 75 insertions(+), 76 deletions(-)
diff --git a/.github/workflows/create-client-fork.yml b/.github/workflows/create-client-fork.yml
index 77f32aa..3f371d9 100644
--- a/.github/workflows/create-client-fork.yml
+++ b/.github/workflows/create-client-fork.yml
@@ -1,16 +1,13 @@
+---
# Copyright (C) 2026 Moko Consulting
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GitHub Actions Workflow: Create Client Fork Implementation
-# This workflow prepares the repository for a client-specific fork by:
-# - Copying custom color templates to the appropriate locations
-# - Replacing the main README with the client fork README
-# - Cleaning up template documentation files
name: Create Client Fork
-on:
+"on":
workflow_dispatch:
inputs:
client_name:
@@ -18,7 +15,7 @@ on:
required: true
type: string
confirm:
- description: 'Type "CONFIRM" to proceed with fork creation'
+ description: 'Type "CONFIRM" to proceed'
required: true
type: string
@@ -26,139 +23,128 @@ jobs:
create-fork:
name: Setup Client Fork
runs-on: ubuntu-latest
-
+
steps:
- name: Validate confirmation
if: ${{ inputs.confirm != 'CONFIRM' }}
run: |
- echo "::error::You must type CONFIRM to proceed with fork creation"
+ echo "::error::Type CONFIRM to proceed"
exit 1
-
+
- name: Checkout repository
uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
-
+
- name: Setup Git
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
-
+
- name: Create client fork branch
run: |
- CLIENT_SLUG=$(echo "${{ inputs.client_name }}" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
+ CLIENT_NAME="${{ inputs.client_name }}"
+ CLIENT_SLUG=$(echo "${CLIENT_NAME}" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
BRANCH_NAME="client-fork/${CLIENT_SLUG}"
git checkout -b "${BRANCH_NAME}"
echo "BRANCH_NAME=${BRANCH_NAME}" >> $GITHUB_ENV
echo "CLIENT_SLUG=${CLIENT_SLUG}" >> $GITHUB_ENV
-
+
- name: Copy custom color templates
run: |
- # Copy the colors_custom.css template to both light and dark mode directories
- echo "Copying colors_custom.css to light and dark mode directories..."
+ echo "Copying colors_custom.css..."
cp templates/colors_custom.css src/media/css/colors/light/colors_custom.css
cp templates/colors_custom.css src/media/css/colors/dark/colors_custom.css
-
- # Verify files were created
+
if [ -f "src/media/css/colors/light/colors_custom.css" ]; then
- echo "✓ Created src/media/css/colors/light/colors_custom.css"
+ echo "✓ Created light mode colors_custom.css"
else
echo "::error::Failed to create light mode colors_custom.css"
exit 1
fi
-
+
if [ -f "src/media/css/colors/dark/colors_custom.css" ]; then
- echo "✓ Created src/media/css/colors/dark/colors_custom.css"
+ echo "✓ Created dark mode colors_custom.css"
else
echo "::error::Failed to create dark mode colors_custom.css"
exit 1
fi
-
+
- name: Replace README with client fork README
run: |
- echo "Replacing README.md with CLIENT_FORK_README.md..."
-
- # Customize the CLIENT_FORK_README.md with client name
+ echo "Replacing README.md..."
sed "s/\[CLIENT NAME\]/${{ inputs.client_name }}/g" CLIENT_FORK_README.md > README.md
-
- # Update fork information section
+
CURRENT_DATE=$(date +"%Y-%m-%d")
sed -i "s/\[DATE\]/${CURRENT_DATE}/g" README.md
sed -i "s/\[YOUR-FORK-URL\]/https:\/\/github.com\/${GITHUB_REPOSITORY}/g" README.md
-
- echo "✓ README.md replaced with customized client fork README"
-
+
+ echo "✓ README.md replaced"
+
- name: Clean up template files
run: |
- echo "Removing template documentation files..."
-
- # Remove the original CLIENT_FORK_README.md
+ echo "Removing template files..."
+
if [ -f "CLIENT_FORK_README.md" ]; then
rm CLIENT_FORK_README.md
echo "✓ Removed CLIENT_FORK_README.md"
fi
-
- # Remove the template README from templates directory
+
if [ -f "templates/CLIENT_FORK_README_TEMPLATE.md" ]; then
rm templates/CLIENT_FORK_README_TEMPLATE.md
echo "✓ Removed templates/CLIENT_FORK_README_TEMPLATE.md"
fi
-
- # Update templates/README.md to remove references to CLIENT_FORK_README_TEMPLATE.md
+
if [ -f "templates/README.md" ]; then
sed -i '/CLIENT_FORK_README_TEMPLATE.md/d' templates/README.md
sed -i '/Client Fork README Template/,/^---$/d' templates/README.md
echo "✓ Updated templates/README.md"
fi
-
- # Keep templates/colors_custom.css as specified
- echo "✓ Keeping templates/colors_custom.css as template"
-
+
+ echo "✓ Keeping templates/colors_custom.css"
+
- name: Commit changes
run: |
git add .
git status
-
+
if git diff --staged --quiet; then
echo "No changes to commit"
else
- git commit -m "Setup client fork for ${{ inputs.client_name }}
-
-- Copied colors_custom.css to src/media/css/colors/light/ and dark/
-- Replaced README.md with customized CLIENT_FORK_README.md
-- Removed CLIENT_FORK_README.md and templates/CLIENT_FORK_README_TEMPLATE.md
-- Kept templates/colors_custom.css as template
-
-This commit prepares the repository for ${{ inputs.client_name }}'s custom fork."
-
- echo "✓ Changes committed successfully"
+ git commit -m "Setup client fork for ${{ inputs.client_name }}" \
+ -m "Copied colors_custom.css to src/media/css/colors/" \
+ -m "Replaced README.md with CLIENT_FORK_README.md" \
+ -m "Removed CLIENT_FORK_README.md" \
+ -m "Removed templates/CLIENT_FORK_README_TEMPLATE.md" \
+ -m "Kept templates/colors_custom.css as template"
+ echo "✓ Changes committed"
fi
-
+
- name: Push branch
run: |
git push origin "${BRANCH_NAME}"
- echo "✓ Branch ${BRANCH_NAME} pushed successfully"
-
+ echo "✓ Branch ${BRANCH_NAME} pushed"
+
- name: Summary
run: |
- echo "## Client Fork Setup Complete! 🎉" >> $GITHUB_STEP_SUMMARY
- echo "" >> $GITHUB_STEP_SUMMARY
- echo "### Changes Applied" >> $GITHUB_STEP_SUMMARY
- echo "- ✓ Copied \`colors_custom.css\` to \`src/media/css/colors/light/\`" >> $GITHUB_STEP_SUMMARY
- echo "- ✓ Copied \`colors_custom.css\` to \`src/media/css/colors/dark/\`" >> $GITHUB_STEP_SUMMARY
- echo "- ✓ Replaced \`README.md\` with customized client fork README" >> $GITHUB_STEP_SUMMARY
- echo "- ✓ Removed \`CLIENT_FORK_README.md\`" >> $GITHUB_STEP_SUMMARY
- echo "- ✓ Removed \`templates/CLIENT_FORK_README_TEMPLATE.md\`" >> $GITHUB_STEP_SUMMARY
- echo "- ✓ Kept \`templates/colors_custom.css\` as template" >> $GITHUB_STEP_SUMMARY
- echo "" >> $GITHUB_STEP_SUMMARY
- echo "### Next Steps" >> $GITHUB_STEP_SUMMARY
- echo "1. Review the changes in branch: \`${BRANCH_NAME}\`" >> $GITHUB_STEP_SUMMARY
- echo "2. Customize colors in \`src/media/css/colors/light/colors_custom.css\`" >> $GITHUB_STEP_SUMMARY
- echo "3. Customize colors in \`src/media/css/colors/dark/colors_custom.css\`" >> $GITHUB_STEP_SUMMARY
- echo "4. Update \`README.md\` with client-specific details" >> $GITHUB_STEP_SUMMARY
- echo "5. Create a new repository for ${{ inputs.client_name }}" >> $GITHUB_STEP_SUMMARY
- echo "6. Push this branch to the new repository" >> $GITHUB_STEP_SUMMARY
- echo "" >> $GITHUB_STEP_SUMMARY
- echo "### Branch Information" >> $GITHUB_STEP_SUMMARY
- echo "- **Branch Name**: \`${BRANCH_NAME}\`" >> $GITHUB_STEP_SUMMARY
- echo "- **Client**: ${{ inputs.client_name }}" >> $GITHUB_STEP_SUMMARY
+ cat >> $GITHUB_STEP_SUMMARY << EOF
+ ## Client Fork Setup Complete! 🎉
+
+ ### Changes Applied
+ - ✓ Copied colors_custom.css to src/media/css/colors/
+ - ✓ Replaced README.md
+ - ✓ Removed CLIENT_FORK_README.md
+ - ✓ Removed templates/CLIENT_FORK_README_TEMPLATE.md
+ - ✓ Kept templates/colors_custom.css
+
+ ### Next Steps
+ 1. Review branch: \`${BRANCH_NAME}\`
+ 2. Customize colors in src/media/css/colors/
+ 3. Update README.md with client details
+ 4. Create new repository for ${{ inputs.client_name }}
+ 5. Push branch to new repository
+
+ ### Branch Information
+ - **Branch**: \`${BRANCH_NAME}\`
+ - **Client**: ${{ inputs.client_name }}
+ EOF
diff --git a/CLIENT_FORK_README.md b/CLIENT_FORK_README.md
index a0ab7e6..2b8aa85 100644
--- a/CLIENT_FORK_README.md
+++ b/CLIENT_FORK_README.md
@@ -19,6 +19,8 @@
This is a customized fork of the [MokoCassiopeia](https://github.com/mokoconsulting-tech/MokoCassiopeia) Joomla template, tailored specifically for [CLIENT NAME]'s website.
+> **💡 Tip**: This fork was likely created using the automated [Client Fork Workflow](./docs/CLIENT_FORK_WORKFLOW.md). If you're creating a new client fork, use the workflow for instant setup!
+
---
## 📋 About This Fork
diff --git a/README.md b/README.md
index 74aab56..f7ae954 100644
--- a/README.md
+++ b/README.md
@@ -404,7 +404,12 @@ See [Workflow Guide](./docs/WORKFLOW_GUIDE.md) for detailed Git workflow.
### Client Custom Forks
-Creating a custom fork for client-specific branding and code? See our comprehensive [Client Fork Guide](./CLIENT_FORK_README.md) for:
+Creating a custom fork for client-specific branding and code?
+
+**Quick Setup**: Use our automated workflow to create a client fork in minutes:
+- **[Client Fork Workflow Guide](./docs/CLIENT_FORK_WORKFLOW.md)** - Automated GitHub Actions workflow or local bash script
+
+**Comprehensive Guide**: See our [Client Fork Guide](./CLIENT_FORK_README.md) for:
- Setting up custom color schemes
- Maintaining fork-specific customizations
- Syncing with upstream updates
diff --git a/docs/README.md b/docs/README.md
index 946514f..d2620e8 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -72,6 +72,12 @@ For end-user documentation, installation instructions, and feature guides, see t
### Client Fork Documentation
+* **[Client Fork Workflow](CLIENT_FORK_WORKFLOW.md)** - Automated client fork creation
+ * GitHub Actions workflow for instant fork setup
+ * Local bash script alternative
+ * Complete setup automation in minutes
+ * Post-setup customization guide
+
* **[Client Fork Guide](../CLIENT_FORK_README.md)** - Comprehensive guide for client custom code forks
* Setting up custom branding and colors
* Maintaining fork-specific customizations
From 65cae9f39281f76c1632291cd93dd2a03a531d7f Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 20 Feb 2026 01:41:10 +0000
Subject: [PATCH 7/7] Add permissions to workflow and fix security issue
Co-authored-by: jmiller-moko <230051081+jmiller-moko@users.noreply.github.com>
---
.github/workflows/create-client-fork.yml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.github/workflows/create-client-fork.yml b/.github/workflows/create-client-fork.yml
index 3f371d9..be82228 100644
--- a/.github/workflows/create-client-fork.yml
+++ b/.github/workflows/create-client-fork.yml
@@ -23,6 +23,8 @@ jobs:
create-fork:
name: Setup Client Fork
runs-on: ubuntu-latest
+ permissions:
+ contents: write
steps:
- name: Validate confirmation