Training Videos System
Two-repo product for delivering branded training-video libraries to G&M clients. WordPress plugin (the product) phones home daily to a registry tab on the G&M Maintenance Portal (the operator side).
Repos
| Plugin | ericdowns/gm-training-videos — ~/Projects/gm-training-videos/ |
| Portal (registry tab + license endpoints) | ericdowns/gm-maintenance — ~/Projects/gm-maintenance/ |
| Plugin master CLAUDE.md | ~/Projects/gm-training-videos/CLAUDE.md |
| Plugin architecture (canonical system overview) | ~/Projects/gm-training-videos/docs/ARCHITECTURE.md |
| Portal CLAUDE.md | ~/Projects/gm-maintenance/CLAUDE.md |
| Portal Training Videos integration doc | ~/Projects/gm-maintenance/docs/TRAINING-VIDEOS.md |
Production URLs
| Service | URL |
|---|---|
| Plugin GitHub | https://github.com/ericdowns/gm-training-videos |
| Plugin Releases | https://github.com/ericdowns/gm-training-videos/releases |
| Portal admin tab | https://maintenance.grainandmortar.com/admin/training-videos |
| Heartbeat endpoint | POST https://maintenance.grainandmortar.com/api/training-videos/heartbeat |
| License validate endpoint | POST https://maintenance.grainandmortar.com/api/training-videos/license/validate |
Local dev site (plugin)
| Local Path | /Users/edowns/Local Sites/gm-training-videos-dev/app/public/wp-content/plugins/training-videos (symlink → master repo) |
| Local URL | http://gm-training-videos-dev.local |
| WP admin | admin / admin |
Project Status
2026-04-28 — v1.4.x stack shipped: onboarding wizard, auto-updates, license + heartbeat, central registry
Major release wave. Five point-releases tonight closed the major architectural cards:
- v1.4.0 — Onboarding wizard, 2-color brand auto-derivation, font auto-detection, Loom paste-list bulk import
- v1.4.1 — Custom Fields panel hidden, Featured Image as thumbnail override path
- v1.4.2 — Edit-screen UX critique fixes (block reorder, single banner, combined Re-sync button)
- v1.4.3 — Loom URL helper noise stripped, obsolete
loom-helper.phpdeleted - v1.4.4 — GitHub Releases + plugin-update-checker wired in. Repo flipped to public. Tag-driven release pipeline live (
.github/workflows/release.yml). Existing installs will auto-pick-up future updates. - v1.4.5 — License key + daily heartbeat client. Soft-fail with 7-day grace. License section in Settings with status badge. License server URL configurable via
TRAINING_VIDEOS_LICENSE_SERVERconstant.
Portal side (gm-maintenance PR #3, merged): TrainingVideosSite + TrainingVideosHeartbeat Prisma models, POST /api/training-videos/heartbeat, POST /api/training-videos/license/validate, /admin/training-videos tab with license management UI. Schema applied via prisma db push. Endpoints verified live in prod.
End-to-end smoke-tested: heartbeats from 3 test sites land in the registry, license validate returns the right {valid, tier, expires_at} for active / wrong-key / unknown-site / expired / revoked paths. Admin dashboard renders correctly.
Cards closed: plugin #4 (brand theming), plugin #5 (Loom paste-list — deferred folder enum to #29), plugin #9 (license/heartbeat plugin side), plugin #10 (moved to portal as #2), plugin #11 (releases + update flow), portal #2 (registry server side).
Open: plugin #29 (folder enum, blocked needs-decision on cookie-vs-proxy), plugin #26 (Flywheel prod for demo site, blocked needs-credential).
Status: Live and operational. Plugin auto-updates pull from GitHub Releases. Heartbeat + license live at maintenance.grainandmortar.com/api/training-videos/*. Existing client installs (older versions in docs/SITES.md) will need a one-time cp -r to ≥v1.4.4 before they self-update from there.
2026-04-27 — v1.3.x stack: theme-independent CSS + Loom integration
Pre-license-system polish. Self-contained styles so plugin renders correctly on any client theme. Loom oEmbed integration for descriptions + thumbnails. Header/footer redesigns.
Status: Foundation ready for v1.4 architecture work.
Open Cards (across both repos)
| Repo | # | Title | State |
|---|---|---|---|
| gm-training-videos | #26 | Spin up Flywheel production for demo site | blocked, needs-credential |
| gm-training-videos | #29 | Loom folder-URL enumeration (deferred from v1.4.0) | blocked, needs-decision |
Docs
| File | Purpose |
|---|---|
| (this file) | Status timeline + cross-repo index |
(For implementation docs see the two repos' docs/ folders — paths above.)