Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/yaycommerce/yayloyalty/archive/refs/heads/dev.zipYayLoyalty: Points, Rewards, Referral & VIP for WooCommerce
A loyalty plugin for WooCommerce: points, rewards, referrals and VIP tiers. One repository ships a Pro and a Lite build.
Requirements
- A WordPress site with WooCommerce active. The minimum WordPress, WooCommerce and PHP versions are in the plugin header of
yayloyalty.php. - PHP 8.2 or later for the dev tooling. The product itself must run on PHP 7.4.
- Composer 2.
- Node 22, with pnpm through Corepack.
package.jsonpins the pnpm version. - A GitHub account with read access to the private admin-shell repository. Composer clones it over HTTPS.
- WP-CLI, for
pnpm makepotand the release validator's optional boot check. - Claude Code 2.1.283 or later.
Onboarding
-
Clone into the site's plugins directory:
cd <site>/wp-content/plugins git clone https://github.com/YayCommerce/YayLoyalty.git yayloyalty cd yayloyalty -
Switch to Node 22 and enable pnpm:
nvm use corepack enable -
Run the dev script, then install from a second terminal:
./scripts/run.sh dev pnpm installvendor-prefixed/(the scoped admin-shell) is committed, so the dev script only runscomposer installwhenvendor/is missing, and never rebuildsvendor-prefixed/. The dev script ends by starting Vite on port 3030, which keeps running. To move to a newer admin-shell, run./scripts/run.sh shell-updateand commit what it changes. -
Activate the plugin in wp-admin. Activation installs the tables.
YAYLOYALTY_IS_DEVELOPMENTdefaults totrue, so wp-admin loads the SPA from the dev server: keep./scripts/run.sh devrunning while you work in the admin. To load a built bundle instead, define the constant asfalseinwp-config.php, then run./scripts/run.sh build. -
Run the lint and test commands in CLAUDE.md § Commands. Some fail today on
dev; docs/knowledge/known-issues.md lists each failure with the result to expect. Your result should match it. -
Install the yay harness plugin once with
claude plugin install yay@yayharness, then start Claude Code in the repo withclaudeand accept the trust dialog. Until you do, Claude ignores the command allowlist in.claude/settings.json. Then:CLAUDE.mdloads at the start of every session: the kit-managed workflow block and the project block;- a rule in
.claude/rules/loads when Claude reads a file itspathsmatch; - the
/yay:*skills come from the plugin, and.yay/config.jsonholds the repo's commands, editions and generated paths.
Daily workflow
The git rules are in .claude/rules/yay-git.md: branch names, Conventional Commits, PR-only into dev. The parts only people do:
- Review. Every PR into
devneeds one approval from a teammate other than its author, then it is squash-merged. - Promotion.
devis the default branch and the only long-lived one, so a release is cut fromdevitself. There is no promotion step. - Releases. There is no release yet, and the cadence is set at the first one. Cut one with
/yay:release. What the release builds and checks is in docs/knowledge/build-release.md.
Agent tooling
The repo uses the yay harness. Its skills take a change from idea to release tag; the table in CLAUDE.md § How we work here says which skill does what, and docs/yay-workflow.md walks through one change with the exact prompts. Not sure where to start? Run /yay:go.
Keeping the harness current
- Kit-managed files (the managed block of
CLAUDE.md,.claude/rules/yay-*.md,.claude/settings.json, the PR template) come from the yay plugin. Don't edit them; run/yay:harness-update. - Project knowledge (the project block of
CLAUDE.mdanddocs/knowledge/) is written from the code. Each doc says when to update it;/yay:knowledge-updaterefreshes the stale ones. - Personal overrides are gitignored, and the harness must work without them:
.claude/settings.local.jsonandCLAUDE.local.md.
License
GPLv2 or later. See the plugin header in yayloyalty.php.