diff --git a/wp-content/plugins/matthew-lms-mvp/matthew-lms-mvp.php b/wp-content/plugins/matthew-lms-mvp/matthew-lms-mvp.php
index a971af0..0456749 100644
--- a/wp-content/plugins/matthew-lms-mvp/matthew-lms-mvp.php
+++ b/wp-content/plugins/matthew-lms-mvp/matthew-lms-mvp.php
@@ -264,6 +264,13 @@ body.page-id-49 #wp--skip-link--target{margin-block-start:0!important}body.page-
.mlms-course-launch-hub{grid-template-columns:1fr}.mlms-course-page-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.mlms-course-page-card{position:relative;overflow:hidden;border-radius:26px;border:1px solid rgba(10,37,64,.09);background:rgba(255,255,255,.92);box-shadow:var(--mlms-shadow-soft);padding:22px;display:grid;gap:14px;align-content:start}.mlms-course-page-card:before{content:"";position:absolute;inset:0 0 auto 0;height:3px;background:linear-gradient(90deg,var(--mlms-primary),#21C58E);opacity:.75}.mlms-course-page-card h4{margin:0;color:var(--mlms-ink);font-size:22px;letter-spacing:-.035em}.mlms-course-page-card p{margin:0;color:var(--mlms-muted);line-height:1.5}.mlms-course-page-card .mlms-btn{width:max-content;text-decoration:none}.mlms-course-page-meta{display:flex;flex-wrap:wrap;gap:8px}.mlms-course-page-meta span{border-radius:999px;background:#F2F6FA;border:1px solid #DDE6F0;color:#4D5F75;padding:7px 10px;font-size:12px;font-weight:900}.mlms-course-standalone-page{background:var(--mlms-bg)}.mlms-course-standalone{padding:0 0 84px}.mlms-course-standalone-hero{position:relative;overflow:hidden;border-radius:34px;padding:28px;background:linear-gradient(135deg,#07182D 0%,#132747 58%,#251A56 100%);color:#fff;box-shadow:var(--mlms-shadow);margin:28px 0 24px}.mlms-course-standalone-hero h1{margin:0;color:#fff;font-size:clamp(38px,5vw,64px);line-height:.98;letter-spacing:-.06em;max-width:860px}.mlms-course-standalone-hero p{color:#D7E3F1;max-width:760px}.mlms-course-standalone-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px}.mlms-course-standalone-actions .mlms-btn-secondary{background:rgba(255,255,255,.11);border-color:rgba(255,255,255,.16);color:#fff;box-shadow:none}.mlms-course-route-shell{display:grid;gap:22px}.mlms-course-backlink{display:inline-flex;align-items:center;gap:8px;color:#C9C4FF!important;font-weight:900;text-decoration:none!important;margin-bottom:14px}.mlms-course-route-pill{display:inline-flex;width:max-content;border-radius:999px;background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.14);color:#E7E3FF;padding:8px 11px;font-weight:950;font-size:12px;text-transform:uppercase;letter-spacing:.08em;margin-bottom:12px}@media (max-width:900px){.mlms-course-page-grid{grid-template-columns:1fr}.mlms-course-standalone-hero{border-radius:26px;padding:22px}}
+
+.mlms-lesson-path-page{display:grid;gap:24px}.mlms-lesson-path-card{position:relative;overflow:hidden;border-radius:30px;background:rgba(255,255,255,.94);border:1px solid rgba(10,37,64,.09);box-shadow:var(--mlms-shadow-soft);padding:26px}.mlms-lesson-path-card:before{content:"";position:absolute;inset:0 0 auto 0;height:5px;background:linear-gradient(90deg,var(--mlms-primary),#A7B6FF,var(--mlms-green))}.mlms-lesson-path-head{display:flex;justify-content:space-between;gap:18px;align-items:flex-start;flex-wrap:wrap;margin-bottom:22px}.mlms-lesson-path-head h2{margin:0;color:var(--mlms-ink);font-size:clamp(30px,3.6vw,48px);line-height:1.02;letter-spacing:-.055em}.mlms-lesson-path-head p{margin:8px 0 0;color:var(--mlms-muted);max-width:720px}.mlms-lesson-path-list{position:relative;display:grid;gap:14px;margin:0;padding:0;list-style:none}.mlms-lesson-path-list:before{content:"";position:absolute;left:25px;top:28px;bottom:28px;width:3px;border-radius:99px;background:#E2EAF3}.mlms-lesson-path-task{position:relative;display:grid;grid-template-columns:52px minmax(0,1fr) auto;gap:16px;align-items:center;border-radius:22px;border:1px solid #E2EAF3;background:#fff;padding:16px;box-shadow:0 10px 26px rgba(50,50,93,.06)}.mlms-lesson-path-marker{position:relative;z-index:1;width:52px;height:52px;border-radius:18px;display:grid;place-items:center;background:#F2F6FA;color:var(--mlms-muted);font-weight:950;border:1px solid #E2EAF3}.mlms-lesson-path-task.is-complete .mlms-lesson-path-marker{background:#ECFBF6;color:#08785B;border-color:rgba(33,197,142,.28)}.mlms-lesson-path-task.is-current{border-color:rgba(99,91,255,.28);background:linear-gradient(135deg,#fff,#F8F7FF);box-shadow:0 16px 36px rgba(99,91,255,.10)}.mlms-lesson-path-task.is-current .mlms-lesson-path-marker{background:var(--mlms-primary);color:#fff;border-color:transparent;box-shadow:0 0 0 7px rgba(99,91,255,.12)}.mlms-lesson-path-task.is-quiz{border-color:rgba(10,37,64,.16);background:linear-gradient(135deg,#07182D,#132747);color:#fff}.mlms-lesson-path-task.is-quiz .mlms-lesson-path-marker{background:#fff;color:var(--mlms-primary);border-color:rgba(255,255,255,.24)}.mlms-lesson-path-task h3{margin:0;color:var(--mlms-ink);font-size:21px;letter-spacing:-.03em}.mlms-lesson-path-task p{margin:5px 0 0;color:var(--mlms-muted);line-height:1.45}.mlms-lesson-path-task.is-quiz h3{color:#fff}.mlms-lesson-path-task.is-quiz p{color:#D7E3F1}.mlms-lesson-path-status{display:inline-flex;align-items:center;justify-content:center;border-radius:999px;background:#F2F6FA;color:#56657D;padding:8px 11px;font-size:12px;font-weight:950;text-transform:uppercase;letter-spacing:.08em;white-space:nowrap}.mlms-lesson-path-task.is-complete .mlms-lesson-path-status{background:#ECFBF6;color:#08785B}.mlms-lesson-path-task.is-current .mlms-lesson-path-status{background:#EFEDFF;color:var(--mlms-primary)}.mlms-lesson-path-task.is-quiz .mlms-lesson-path-status{background:rgba(255,255,255,.12);color:#E7E3FF}.mlms-lesson-content-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.mlms-lesson-task-card{border-radius:24px;background:rgba(255,255,255,.94);border:1px solid rgba(10,37,64,.09);box-shadow:var(--mlms-shadow-soft);padding:22px}.mlms-lesson-task-card h3{margin:0 0 8px;color:var(--mlms-ink);font-size:23px;letter-spacing:-.035em}.mlms-lesson-task-card p{margin:0;color:var(--mlms-muted);line-height:1.55}.mlms-lesson-task-card ul{margin:12px 0 0;padding-left:20px;color:var(--mlms-muted)}.mlms-lesson-task-card li+li{margin-top:6px}@media (max-width:780px){.mlms-lesson-path-task{grid-template-columns:46px 1fr;align-items:start}.mlms-lesson-path-marker{width:46px;height:46px;border-radius:16px}.mlms-lesson-path-status,.mlms-lesson-path-task .mlms-btn{grid-column:2;justify-self:start}.mlms-lesson-content-grid{grid-template-columns:1fr}.mlms-lesson-path-list:before{left:23px}}
+
+
+
+.mlms-proof-modal{position:fixed;inset:0;z-index:9999;display:none;align-items:center;justify-content:center;padding:24px}.mlms-proof-modal.open{display:flex}.mlms-proof-backdrop{position:absolute;inset:0;background:rgba(7,24,45,.62);backdrop-filter:blur(8px)}.mlms-proof-dialog{position:relative;z-index:1;width:min(640px,100%);max-height:92vh;overflow:auto;background:#fff;border:1px solid rgba(10,37,64,.10);border-radius:30px;box-shadow:0 28px 80px rgba(7,24,45,.28);padding:26px}.mlms-proof-dialog:before{content:"";position:absolute;inset:0 0 auto 0;height:5px;background:linear-gradient(90deg,var(--mlms-primary),var(--mlms-green));border-radius:30px 30px 0 0}.mlms-proof-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:20px}.mlms-proof-head h3{margin:0;color:var(--mlms-ink);font-size:28px;letter-spacing:-.04em;line-height:1.08}.mlms-proof-head p{margin:7px 0 0;color:var(--mlms-muted);line-height:1.45}.mlms-proof-close{width:42px;height:42px;border:0;border-radius:15px;background:#F2F6FA;color:var(--mlms-ink);font-size:24px;line-height:1;cursor:pointer}.mlms-proof-close:hover{background:#E7EDF5}.mlms-proof-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.mlms-proof-dialog .mlms-field.full{grid-column:1/-1}.mlms-proof-file{border:1px dashed #C9D6E5;border-radius:18px;background:#F8FAFD;padding:14px}.mlms-proof-actions{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-top:18px}.mlms-proof-status{margin:0;color:#08785B;font-weight:850}.mlms-portfolio-card.proof-attached{border-color:rgba(33,197,142,.36);box-shadow:0 18px 42px rgba(33,197,142,.12)}.mlms-portfolio-card.proof-attached:after{content:"Proof attached";position:absolute;top:14px;right:14px;border-radius:999px;background:#ECFBF6;color:#08785B;border:1px solid rgba(33,197,142,.26);padding:7px 10px;font-size:12px;font-weight:950}.mlms-portfolio-link.is-attached{color:#08785B}@media (max-width:640px){.mlms-proof-dialog{padding:22px;border-radius:24px}.mlms-proof-grid{grid-template-columns:1fr}.mlms-proof-actions{display:grid}.mlms-proof-actions .mlms-btn{width:100%;justify-content:center}.mlms-proof-head h3{font-size:24px}}
+
CSS;
}
@@ -1057,10 +1064,111 @@ function matthew_lms_mvp_js(): string {
}
}
+
+ function initWaxProofModal(){
+ var modal=document.getElementById('mlms-proof-modal');
+ var triggers=[].slice.call(document.querySelectorAll('[data-proof-trigger]'));
+ if(!modal || !triggers.length){return;}
+ var form=modal.querySelector('[data-proof-form]');
+ var artifactInput=modal.querySelector('#mlms-proof-artifact');
+ var title=modal.querySelector('#mlms-proof-title');
+ var copy=modal.querySelector('#mlms-proof-copy');
+ var status=modal.querySelector('[data-proof-status]');
+ var url=modal.querySelector('#mlms-proof-url');
+ var notes=modal.querySelector('#mlms-proof-notes');
+ var file=modal.querySelector('#mlms-proof-file');
+ var storageKey='waxPortfolioProofs:v1';
+ var activeTrigger=null;
+
+ function readProofs(){
+ try{return JSON.parse(window.localStorage.getItem(storageKey)||'{}')||{};}catch(error){return {};}
+ }
+ function writeProofs(proofs){
+ try{window.localStorage.setItem(storageKey, JSON.stringify(proofs));}catch(error){}
+ }
+ function markAttached(trigger, proof){
+ if(!trigger){return;}
+ var card=trigger.closest('.mlms-portfolio-card');
+ if(card){card.classList.add('proof-attached');}
+ trigger.classList.add('is-attached');
+ trigger.textContent='Edit proof →';
+ if(proof && proof.url){trigger.setAttribute('data-proof-url', proof.url);}
+ }
+ function restoreProofState(){
+ var proofs=readProofs();
+ triggers.forEach(function(trigger){
+ var artifact=trigger.getAttribute('data-artifact')||'';
+ if(artifact && proofs[artifact]){markAttached(trigger, proofs[artifact]);}
+ });
+ }
+ function openModal(trigger){
+ activeTrigger=trigger;
+ var artifact=trigger.getAttribute('data-artifact')||'Portfolio artifact';
+ var proofs=readProofs();
+ var saved=proofs[artifact]||{};
+ if(artifactInput){artifactInput.value=artifact;}
+ if(title){title.textContent='Attach proof for '+artifact;}
+ if(copy){copy.textContent='Add a public source, short evidence notes, or an optional local reference for this portfolio artifact.';}
+ if(url){url.value=saved.url||'';}
+ if(notes){notes.value=saved.notes||'';}
+ if(file){file.value='';}
+ if(status){status.textContent=saved.url ? 'Existing proof loaded. Update it or save again.' : '';}
+ modal.classList.add('open');
+ modal.setAttribute('aria-hidden','false');
+ document.body.style.overflow='hidden';
+ setTimeout(function(){if(url){url.focus();}},80);
+ }
+ function closeModal(){
+ var returnFocus=activeTrigger;
+ if(returnFocus){try{returnFocus.focus({preventScroll:true});}catch(error){returnFocus.focus();}}
+ modal.classList.remove('open');
+ modal.setAttribute('aria-hidden','true');
+ document.body.style.overflow='';
+ if(status){status.textContent='';}
+ }
+
+ triggers.forEach(function(trigger){
+ trigger.addEventListener('click',function(event){
+ event.preventDefault();
+ openModal(trigger);
+ });
+ });
+ modal.querySelectorAll('[data-proof-close]').forEach(function(close){
+ close.addEventListener('click',function(event){event.preventDefault();closeModal();});
+ });
+ document.addEventListener('keydown',function(event){
+ if(event.key==='Escape' && modal.classList.contains('open')){closeModal();}
+ });
+ if(form){
+ form.addEventListener('submit',function(event){
+ event.preventDefault();
+ if(!form.checkValidity()){
+ form.reportValidity();
+ return;
+ }
+ var artifact=(artifactInput && artifactInput.value) || (activeTrigger && activeTrigger.getAttribute('data-artifact')) || 'Portfolio artifact';
+ var proofs=readProofs();
+ proofs[artifact]={
+ type:(modal.querySelector('#mlms-proof-type')||{}).value||'',
+ url:(url && url.value.trim())||'',
+ notes:(notes && notes.value.trim())||'',
+ file_name:(file && file.files && file.files[0]) ? file.files[0].name : '',
+ saved_at:new Date().toISOString()
+ };
+ writeProofs(proofs);
+ markAttached(activeTrigger, proofs[artifact]);
+ if(status){status.textContent='Proof saved for '+artifact+'.';}
+ setTimeout(closeModal,900);
+ });
+ }
+ restoreProofState();
+ }
+
function initAll(){
initWaxOnboarding();
initWaxCourseDashboard();
initWaxTutor();
+ initWaxProofModal();
}
if(document.readyState==='loading'){
document.addEventListener('DOMContentLoaded', initAll);
@@ -1411,7 +1519,6 @@ function matthew_lms_mvp_render_course_route_page(string $view): string {
@@ -1424,9 +1531,9 @@ function matthew_lms_mvp_render_course_route_page(string $view): string {
Complete the quiz on its own page. Your score is saved to your profile and unlocks the build task when you pass.
-
Lesson: build a practical AI workflow brief.
-
Read the lesson on a focused page, use the tutor if you get stuck, then move to the quiz page when you’re ready.
-
+
Lesson path: build a practical AI workflow brief.
+
Follow the lesson tasks as a path. The final unfinished task is the quiz, and its Start Quiz button opens a separate quiz page.
+
@@ -1434,12 +1541,7 @@ function matthew_lms_mvp_render_course_route_page(string $view): string {
-
-
Lesson page
Focused lesson and build task
The quiz opens on a separate page, so this page stays focused on reading, examples, and the final deliverable.
-
-
-
-
+
@@ -1492,7 +1594,7 @@ function matthew_lms_mvp_render_course_dashboard(array $profile): string {
Course Overview
Phase 1 builds the practical AI workflow pattern: source inputs, prompt structure, review rubric, and human handoff.
Lesson 2 of 5Step of 5+20 skill points
-
+
2Next
@@ -1625,6 +1727,84 @@ function matthew_lms_mvp_render_course_lesson_component(array $context, array $p
return ob_get_clean();
}
+
+function matthew_lms_mvp_render_lesson_path_component(array $context, array $progress): string {
+ $quiz_url = matthew_lms_mvp_course_url('quiz');
+ ob_start();
+ ?>
+
+
+
+
+
Lesson path
+
Complete each lesson task in order.
+
Use this path to move from concept to practice. The quiz is intentionally the final unfinished task, and it opens on its own page.
+
+
+
+
+ -
+ ✓
+
1. Understand the workflow goal
Learn how AI workflow fluency turns messy work inputs into a repeatable process.
+ Complete
+
+ -
+ ✓
+
+ Complete
+
+ -
+ 3
+
3. Map the prompt and review loop
Connect source inputs, AI drafting, human review, and the final handoff.
+ In progress
+
+ -
+ 4
+
4. Prepare your mini build task
Choose one real work process and define the input, output, owner, and review checklist.
+ Task
+
+ -
+ 5
+
5. Quiz checkpoint
This is the last uncompleted task. Start the quiz when you are ready to check understanding on a separate page.
+ Start Quiz
+
+
+
+
+
+
+ Lesson 1
+ Source inputs
+ Start with . Good inputs make the AI output easier to trust and review.
+
+
+ Lesson 2
+ Prompt structure
+ Ask AI for structure, assumptions, a first draft, and clear gaps instead of asking for a finished answer immediately.
+
+
+ Lesson 3
+ Human review
+
+ - Check accuracy against the source.
+ - Flag risks, tone issues, and missing context.
+ - Decide what needs human approval before sharing.
+
+
+
+ Lesson 4
+ Handoff
+ Your finished lesson task is . After the quiz, use the build section to package it as evidence.
+
+
+
+
@@ -1893,15 +2073,9 @@ add_shortcode('matthew_user_profile', function () {
Profile
Your WAX profile and skill proof.
-
This page is now profile-only: profile header, five-node skill indicator, course progress, portfolio artifacts, and external skills feed.
-
-
- Profile layer
- Course dashboard separated
- Profile header
Credential evidence and course progress in one profile view.
Use the course progress card to jump into the separate course dashboard.
Profile Header · Skills · Progress
@@ -1977,9 +2151,9 @@ add_shortcode('matthew_user_profile', function () {
Showcase-ready
-
AI Brief Builder
Turns messy campaign notes into structured briefs, acceptance criteria, and review prompts.
ChatGPTSheetsNotion
Attach proof →
-
Persona Synthesizer
Combines research snippets into reusable buyer personas with documented assumptions.
ClaudeDocsPerplexity
Attach proof →
-
Weekly Ops Agent
Automates recurring updates, flags blockers, and drafts stakeholder-ready summaries.
ZapierGeminiSlack
Attach proof →
+
AI Brief Builder
Turns messy campaign notes into structured briefs, acceptance criteria, and review prompts.
ChatGPTSheetsNotion
Attach proof →
+
Persona Synthesizer
Combines research snippets into reusable buyer personas with documented assumptions.
ClaudeDocsPerplexity
Attach proof →
+
Weekly Ops Agent
Automates recurring updates, flags blockers, and drafts stakeholder-ready summaries.
ZapierGeminiSlack
Attach proof →
@@ -2011,6 +2185,30 @@ add_shortcode('matthew_user_profile', function () {
+
+
+
+
+
+
+
Attach proof
Add artifact evidence
Link a public source, upload a local reference, or add notes that explain what this artifact proves.
+
+
+
+
+