Public Access
89eec33c7b
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
5.0 KiB
5.0 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.
Note
: Client repos are sites, not distributable Joomla extensions. They do not have
updates.xmlor an update-server workflow.
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
├── scripts/ # Build and deployment scripts
├── 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 (10 workflows):
auto-release.yml— Create GitHub Release on main mergepre-release.yml— Pre-release builds for dev/rc branchesci-joomla.yml— Joomla manifest validation, XML lintpr-check.yml— Pull request validationdeploy-manual.yml— Manual FTP deploy for testingrepo-health.yml— Repository health checkssecurity-audit.yml— Security scanningnotify.yml— Notifications for workflow eventscleanup.yml— Clean up stale branches/artifactssync-media.yml— Synchronize media assets
Release Tags
Standard 5-tag system applies:
development— Dev buildsalpha— Internal testingbeta— Client preview / UATrelease-candidate— Final QA before productionstable— Production release
Deployment
Client sites are deployed via:
- 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-*) - No updates.xml: Client repos are sites, not distributable extensions
- SFTP config:
sftp-config.json.templatewith credential placeholders - Branding: Client-specific (not Moko Consulting)
- Deployment: Manual FTP + direct install (standard repos use Joomla updater)