Skill Flow releasesself-updates
Per-user unlockable skill trees for real-life curricula in WordPress
by Harvey Meeker · github.com/rhialto74/skill-flow · website
Install
The author publishes release zips, so WP-CLI can install straight from GitHub:
wp plugin install https://github.com/rhialto74/skill-flow/releases/download/v1.1.1/skill-flow.zipShips its own WordPress updater (Plugin Update Checker), so new versions show up under Dashboard → Updates.
Per-user unlockable skill trees for real-life curricula in WordPress — built for long-term skill progressions like a martial arts belt system.
- Administrators author skills (rich training content + milestones), lay them out in skill trees with a drag-and-drop GUI builder (prerequisite edges, N-of-M groups, required/optional skills), and sequence trees into flows.
- Students are enrolled into flows and see their tree: locked skills show only a basic description; unlocked skills reveal training content and milestones; they can request validation when ready.
- Instructors validate mastery for the students assigned to them — from the same frontend view (student switcher) or a wp-admin validation queue. Mastering skills unlocks dependents; completing all required skills in a tree unlocks the next tree in the flow.
The domain vocabulary lives in CONTEXT.md; load-bearing design decisions live in docs/adr/.
How it fits together
| Concept | Storage |
|---|---|
Skill (sf_skill) |
CPT — excerpt = basic description, editor = gated training content, meta = milestones |
Skill Tree (sf_tree) |
CPT — _sf_graph meta: nodes (position, required flag) + prerequisite groups (N-of-M, ANDed) |
Flow (sf_flow) |
CPT — _sf_tree_order meta: ordered tree IDs |
| Validations, milestone checks | Custom tables (sf_validations, sf_milestone_checks) — append-only event logs |
| Enrollments, assignments | Custom tables (sf_enrollments, sf_assignments) |
Derived state (locked/unlocked/complete) is never stored; Skill_Flow_Progress_Engine recomputes it from mastery events on every read. Mastery is sticky — only an explicit instructor revocation reverts it.
Usage
- Activate the plugin (creates tables and the Instructor role).
- Skill Flow → Skills: create skills. Skill Trees: create tree posts, then open Tree Builder to add skills to the canvas, draw prerequisite edges, set N-of-M thresholds and required/optional flags, and edit milestones.
- Flows: create a flow post and give each tree a position in the Skill Trees in this Flow box.
- Enrollments: enroll students into the flow. Assignments: assign students to instructors.
- Put
[skill_flow id="123"](the flow post ID) — or the Skill Flow block — on a page.
REST API lives under skill-flow/v1 (cookie auth + nonce).
Theming
Typography is inherited from your theme. Every color and radius the plugin paints is an --sf-* CSS custom property (declared in src/common/theme.css with neutral defaults), so a theme restyles the whole plugin - student view and admin builder - with a few overrides:
.sf-app, .sf-builder {
--sf-accent: #7f1d1d; /* buttons, active states, unlocked nodes */
--sf-mastered: #b45309; /* mastered borders */
--sf-mastered-bg: #fef3c7; /* mastered fills */
--sf-surface: #111827; /* card background (dark theme) */
--sf-border: #374151;
--sf-text: #f9fafb;
--sf-text-muted: #9ca3af;
}
Sizing: the tree canvas defaults to 70vh and is user-resizable; embed wide with [skill_flow id="..." width="full"], the block wide/full alignment, or the built-in fullscreen button.
Development
npm install && npm run build # builds assets/dist (builder, frontend, block)
npm run plugin-zip # builds + packages skill-flow.zip for distribution
composer install
composer test # standalone PHPUnit for the pure domain logic
The graph model (Skill_Flow_Graph) and progress engine (Skill_Flow_Progress_Engine) are pure PHP with no WordPress dependencies, tested in tests/. Integration verification is easiest with wp-env — see docs/VERIFICATION.md.
License
GPL-2.0-or-later. Based on Hugh Lashbrooke's WordPress Plugin Template.
Releases
3 releases. Each count is every asset in that release; expand a row for the breakdown.