From b940e647fb91afc0cf350c7e0d05952dacfd2116 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Mon, 8 Jun 2026 07:20:40 +0000 Subject: [PATCH] Autosave: 20260608-072048 --- .../matthew-lms-mvp/matthew-lms-mvp.php | 238 ++++++++++++++++-- 1 file changed, 218 insertions(+), 20 deletions(-) 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.

+
+
+
Step of 5%
+
+
+
+
    +
  1. + +

    1. Understand the workflow goal

    Learn how AI workflow fluency turns messy work inputs into a repeatable process.

    + Complete +
  2. +
  3. + +

    2. Review your example

    + Complete +
  4. +
  5. + +

    3. Map the prompt and review loop

    Connect source inputs, AI drafting, human review, and the final handoff.

    + In progress +
  6. +
  7. + +

    4. Prepare your mini build task

    Choose one real work process and define the input, output, owner, and review checklist.

    + Task +
  8. +
  9. + +

    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 +
  10. +
+
+ +
+
+

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 () { + + +