Public Access
d736df870a
Covers naming conventions, directory structure, privacy rules, workflow profile, update server priority, deployment methods, and differences from standard Joomla repos. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
5.9 KiB
5.9 KiB
Client Repository Standards
Overview
Client repos (client-*) contain Joomla site customizations for individual clients — templates, overrides, custom CSS, module configurations, and deployment scripts. They follow the Joomla workflow profile but have additional rules around privacy, branding, and deployment.
Naming Convention
client-{clientname}
- Lowercase, hyphenated client identifier
- No version numbers in the repo name
- Examples:
client-clarksvillefurs,client-kiddieland,client-vexcreations
Repository Structure
client-{name}/
├── .github/ # Workflows, CLAUDE.md, CODEOWNERS
│ ├── workflows/ # Standard Joomla workflows (from template)
│ ├── CLAUDE.md # AI assistant context for this client
│ └── CODEOWNERS # jmiller owns all files
├── src/ # Joomla extension source
│ ├── templates/ # Template overrides
│ ├── modules/ # Custom modules
│ ├── plugins/ # Custom plugins
│ └── media/ # CSS, JS, images
├── docs/ # Client-specific documentation
│ ├── INSTALLATION.md # Deployment instructions
│ └── update-server.md # Update server configuration
├── scripts/ # Build and deployment scripts
├── updates.xml # Joomla update server manifest
├── composer.json # Dependencies
├── CHANGELOG.md # Version history
├── README.md # Client overview (no sensitive details)
├── LICENSE # GPL-3.0-or-later
└── Makefile # Build targets
Privacy Rules
Client repos are private by default. These rules are non-negotiable:
- No client credentials in the repo — passwords, API keys, FTP credentials, database passwords go in environment variables or secure secrets, never in code or config files
- No PII — no customer names, emails, addresses, phone numbers in code or comments
- No client-specific hostnames in committed configs — use environment variables or
sftp-config.json.templatepatterns with placeholders - README.md is generic — describes the extension type, not the client's business details
- CLAUDE.md may reference the client by name for AI context, but must not include credentials
Workflows
Client repos use the Joomla workflow profile from MokoStandards-Template-Client:
auto-assign.yml— Auto-assign issues/PRs to jmillerauto-dev-issue.yml— Create tracking issue on dev branch pushauto-release.yml— Create GitHub Release on main mergechangelog-validation.yml— Validate CHANGELOG.md formatci-joomla.yml— Joomla manifest validation, XML lintcodeql-analysis.yml— Security scanningcopilot-agent.yml— Copilot agent configurationdeploy-manual.yml— Manual FTP deploy for testingenterprise-firewall-setup.yml— Copilot firewall rulesproject-setup.yml— Initialize project structurerepo_health.yml— Repository health checksrepository-cleanup.yml— Clean up stale branches/artifactsstandards-compliance.yml— MokoStandards validationsync-version-on-merge.yml— Version trackingupdate-docs.yml— Auto-update documentation indexesupdate-server.yml— Updateupdates.xmlon release
Release Tags
Standard 5-tag system applies:
development— Dev buildsalpha— Internal testingbeta— Client preview / UATrelease-candidate— Final QA before productionstable— Production release
Update Server
Client repos use the standard dual update server with Gitea as priority 1:
<updateservers>
<server type="extension" priority="1" name="{ExtName} (Gitea)">
https://git.mokoconsulting.tech/MokoConsulting/client-{name}/raw/branch/main/updates.xml
</server>
<server type="extension" priority="2" name="{ExtName} (GitHub)">
https://raw.githubusercontent.com/mokoconsulting-tech/client-{name}/main/updates.xml
</server>
</updateservers>
Deployment
Client sites are deployed via:
- Joomla updater — site pulls from
updates.xml(preferred for production) - Manual FTP — via
deploy-manual.ymlworkflow dispatch (for dev/staging) - Direct install — download ZIP from GitHub Release and install via Joomla admin
Creating a New Client Repo
- Create from template:
MokoStandards-Template-Client - Name it
client-{clientname}(lowercase, hyphenated) - Set repo to private
- Set up secrets:
GA_TOKEN,GH_TOKEN - Configure push mirror to GitHub
- Apply branch protection on
main - Update
README.md,composer.json,CLAUDE.mdwith client-specific context - Run initial bulk sync to pull latest standards
Differences from Standard Joomla Repos
- Visibility: Always private (standard Joomla repos can be public)
- Template:
MokoStandards-Template-Client(notTemplate-Joomla-*) - Extra workflows:
project-setup.yml,update-docs.yml,copilot-agent.yml - SFTP config:
sftp-config.json.templatewith credential placeholders - Branding: Client-specific (not Moko Consulting)
- Deployment: Joomla updater + manual FTP (standard repos use updater only)