Theme Education — Improvement & Growth Plan
Package: capell-app/theme-education · Kind: theme · Tier: premium · Product group: Capell Themes · Bundle: themes · Status: Complete
1. Snapshot
Section titled “1. Snapshot”theme-education registers theme key education via EducationThemeServiceProvider::definition() (a ThemeDefinitionData with 19 includedSections and one education preset) and a BladeThemeRenderer whose layout view is capell-theme-education::page. Section renderers are built by mapping includedSections to capell-theme-education::sections.<key> views, skipping navigation/footer (treated as foundation sections); events, admissions-checklist, enrolment-cta, and resources receive optional integration flags for Events / Form Builder / Blog. The demo command is capell:theme-education-demo {--url=} {--languages=} {--sites=} {--force}, delegating to InstallEducationThemeDemoAction → ThemeDemoPageInstaller::run($data, 'education', 'Education'); demo layouts are route-backed pages described in docs/screenshots.json. The theme overrides 17 section views + a page.blade.php shell + theme-education.css, and inherits navigation, footer, and demo plumbing from capell-app/foundation-theme. Marketplace and Composer copy are buyer-facing, capell.json promotes the extension card plus real route-backed homepage/enrolment captures, and the screenshot gallery is refreshed through the actual Education theme renderer.
Completed Improvement Slices
Section titled “Completed Improvement Slices”- 2026-06-03: Added buyer-facing marketplace and Composer copy, replaced the stub Diagnostics health check with real theme registration/view/vendor-asset probes, and limited marketplace screenshots to committed preview assets.
- 2026-06-06: Captured all 9
docs/screenshots.jsonroute-backed targets through the Capell runner, then demoted the gallery after verifying the route renders the generictheme-galleryfixture rather than the package theme shell. - 2026-06-06: Fixed the screenshot wrapper to seed/capture one theme package at a time, mark frontend theme entries anonymous, and suppress the Insights consent banner during screenshot runs;
/theme-educationnow captures the real styled Education shell and the homepage PNG is promoted into marketplace media. - 2026-06-04: Moved course catalogue, event, and instructor default card copy into translations, removed the non-functional hidden course carousel controls, replaced the theme-specific carousel selector with a generic public selector, and added tests for translated defaults plus manifest JSON shape handling.
- 2026-06-05: Verified the post-install asset contract: the theme preview publishes the committed marketplace card to
/vendor/capell/themes/education.jpg, while CSS resolves through Foundation Theme’s generated frontend Tailwind entrypoint fed byresources/css/theme-education.css. - 2026-06-06: Closed the remaining roadmap rows with tokenized colour handling, data-driven catalogue/event sections, real route-backed screenshots, WCAG/reduced-motion/dark-mode work, orphan-view cleanup, included-section render coverage, and the new
course-detail,faculty-directory, andadmissions-funnelsections.
2. Improvements (existing functionality)
Section titled “2. Improvements (existing functionality)”- Course catalogue defaults are translated. — The fixed course catalogue defaults now come from
capell-theme-education::generic.course_catalog_cards, so the multi-language demo can localise format, title, and summary copy. Full editor-provided catalogue data is still a separate row. —resources/views/sections/course-catalog.blade.php,resources/lang/en/generic.php,tests/Unit/EducationThemeDefinitionTest.php— M - Events defaults are translated. — Static event card titles, signal labels, and summaries now come from
capell-theme-education::generic.event_cards; the connected/static availability badge remains package-aware. Real Events package data remains a separate row. —resources/views/sections/events.blade.php,resources/lang/en/generic.php,tests/Unit/EducationThemeDefinitionTest.php— S - Instructor role defaults are translated. — The role list now comes from
capell-theme-education::generic.instructor_rolesinstead of an inline Blade array. —resources/views/sections/instructors.blade.php,resources/lang/en/generic.php,tests/Unit/EducationThemeDefinitionTest.php— S - Shipped 2026-06-06: Drive section colours from brand tokens, not arbitrary hex —
theme-education.cssnow sources--site-theme-primary,--site-theme-accent, surface, ink, and border colours from theme tokens and applies scoped overrides for the recurring arbitrary Tailwind colour utilities used by section views. Preset/brand changes now propagate through the Education shell chrome. —resources/views/sections/*.blade.php,resources/css/theme-education.css— L - Shipped 2026-06-06: Make
course-catalogdata-driven — the catalogue now prefers editor/renderer-provided$section->items, supports course URLs, keeps translated defaults as a fallback, and renders a translated empty state for intentionally empty data. —resources/views/sections/course-catalog.blade.php— M - Shipped 2026-06-06: Make
eventsdata-driven with an Events integration path — the section now prefers$section->items, supports event URLs/dates, keeps the Events connected/static badge meaningful, falls back to translated defaults, and renders a translated empty state for intentionally empty data. —resources/views/sections/events.blade.php— M - Shipped 2026-06-06: Remove orphan
navigationandfooterviews — the package now relies on Foundation for the two foundation sections and no longer ships dead Education section views or health-check requirements for them. —src/EducationThemeServiceProvider.php,src/Health/ThemeEducationHealthCheck.php— M - Shipped 2026-06-06: Add a
prefers-reduced-motionblock —theme-education.cssnow disables transforms, transitions, animations, and smooth scrolling inside.education-shellwhen the visitor requests reduced motion. —resources/css/theme-education.css— S - Shipped 2026-06-06: dark-mode variant —
.dark .education-shell/.education-shell.darknow define a dark Education token set with dark surfaces, borders, muted text, and card overrides. —resources/css/theme-education.css— L
3. Missing Features (gaps)
Section titled “3. Missing Features (gaps)”Declared capabilities[]: theme-education, theme-education-frontend — coarse, frontend-only. Against what an education/schools site actually needs:
Table-stakes coverage after this plan:
- Course/program detail layout shipped —
course-detailgives programmes a syllabus/module style section for fit, duration, and outcomes. - Faculty/staff directory shipped —
faculty-directorygives schools and course providers a data-driven teaching-team listing beyond the fixed instructor teaser. - Events/calendar partially covered —
eventsis now data-driven and can render dated editor-provided items, but full Events-package querying, term calendars, iCal, and structured data remain future product depth. - Admissions/enrolment funnel shipped —
admissions-funneladds a multi-step application pathway section; Form Builder remains the optional capture path for the existing enrolment CTA. - News/announcements —
resourcesleans on Blog, but there’s no school-news or term-bulletin pattern distinct from a generic blog feed. - Prospectus / downloads — no prospectus-download or document-library section (a near-universal schools ask).
Differentiators (would set it apart):
- Programme-comparison matrix —
pathway-comparisonis a start; a true side-by-side compare table (format / duration / level / price) would be a standout for course providers. - Student/parent portal links — a configurable “log in to portal / VLE / LMS” block.
- Campus/facilities — gallery + map section for physical schools.
- Term/cohort schedule — intake dates and application deadlines surfaced in the hero.
Vs siblings / cross-sell: the package already declares supports for blog, events, form-builder, seo-suite, layout-builder. The admissions funnel and data-driven event cards now make the Events/Form Builder cross-sell more credible, while true first-party Events querying and Form Builder application handoff remain future product depth.
4. Issues / Risks
Section titled “4. Issues / Risks”- Dead carousel controls removed.
course-catalog.blade.phpkeeps native horizontal scroll-snap on mobile, removes the hidden/unwired prev/next buttons, and usesdata-carousel="course-catalog"instead of the theme-specificeducation-course-catalogselector. —resources/views/sections/course-catalog.blade.php,tests/Unit/EducationThemeDefinitionTest.php - Health check shipped.
ThemeEducationHealthChecknow probes Theme Studio registration, required views, and vendor asset registration; tests cover passing diagnostics and an unregistered theme failure. —src/Health/ThemeEducationHealthCheck.php,tests/Unit/ThemeEducationHealthCheckTest.php - Manifest contribution accepted.
ThemeManagementPageContributionis intentionally a compatibility marker for the shared Theme Extension page; the theme key is supplied throughcapell.jsonpage parameters. —src/Manifest/ThemeManagementPageContribution.php,capell.json— Done - Dual
extendsmeaning documented.definition()sets runtime inheritance todefault, whilecapell.jsonrecords the installable Foundation Theme package dependency ascapell-app/foundation-theme; README/overview now document that split. —src/EducationThemeServiceProvider.php,capell.json,README.md— Done - Surfaces aligned for renderer scope.
capell.json, README, and overview now treat Education as a frontend renderer package with a demo command rather than a package-owned console surface. —capell.json,README.md,docs/overview.md— Done - Shipped 2026-06-06: Screenshot contract refreshed with real renderer captures.
docs/screenshots.jsondeclares route-backed frontend entries and every path exists underpackages/theme-education/docs/screenshots/. The screenshot wrapper reaches the real Education renderer, the seven frontend PNGs have been recaptured after the CSS/accessibility work, andcapell.jsonpromotes the homepage plus enrolment CTA captures. Some directory/resource/event entries still share generic seeded content, so future demo-content work should differentiate those pages before promotion. —docs/screenshots.json,capell.json,docs/screenshots/— Done previewImage/assetspaths verified.definition()now publishes the committed marketplace card to/vendor/capell/themes/education.jpg, andassets['css']points at Foundation Theme’s generated frontend CSS entrypoint (resources/css/capell/frontend.css). The package-owned stylesheet remainsresources/css/theme-education.cssand is registered as aVendorAssetData::tailwindImport, so Tailwind generation, not a per-theme static CSS publish, is the source contract. —src/EducationThemeServiceProvider.php,tests/Unit/EducationThemeDefinitionTest.php— Done- Performance budget documented as residual risk.
capell.jsonsetsfrontendRenderBudgetMs: 20,adminQueryBudget: 0, andcacheSafety.cacheable: false. Pure-Blade sections with no DB access makeadminQueryBudget: 0correct; cacheability can be revisited in a future platform-wide theme caching pass. —capell.jsonperformance block — Future - Shipped 2026-06-06: WCAG pass for heading hierarchy, contrast, and carousel a11y — the hero heading now renders as the page
<h1>, muted/accent text routes through darker token-derived colours, and the earlier course-carousel cleanup leaves no visible dead controls when JavaScript is absent. Decorative blueprint blocks still usearia-hidden="true", and skip-link/focus-visible support remains in CSS. — section views +resources/css/theme-education.css— (M) - Included-section coverage shipped.
tests/covers theme definition contract, translated default education layouts, manifest requirements, package-aware rendering (events connected/static), public-output safety, health diagnostics, demo-command delegation/idempotency, and now iteratesdefinition()->includedSectionsso every non-foundation key resolves to an existing renderable view. Full content-listing/resources variant matrices, real Events data, and automated accessibility scanning remain future depth. —tests/Unit/— Done - Changelog started. Release notes exist for the marketplace/health-check and translated default-copy slices; future package waves should continue adding entries. —
CHANGELOG.md
Public-output safety is otherwise well-handled: page.blade.php emits only brand tokens + {!! $content !!}, no DB queries in Blade, and PublicOutputSafetyTest asserts the absence of capell-app/theme-education, data-theme-key, wire:, signed, DB::, loadMissing(, model_id, permission, etc. Keep that test green for any new section.
5. Marketplace & Selling
Section titled “5. Marketplace & Selling”Marketplace and Composer copy now use the improved buyer-facing positioning below, and composer keywords include education, courses, enrolment, academy, bootcamp, curriculum, instructors, admissions, and learning-pathway terms.
Improved 1-sentence summary:
A polished, course-first theme for schools, academies, and training providers — turning programme discovery, faculty trust, open days, and enrolment into one coherent learner journey.
Improved 3–4 sentence description:
Theme Education gives schools, course providers, and training teams a complete learning-pathway frontend without commissioning a custom build. Purpose-shaped sections cover course catalogues, instructor and mentor profiles, learning outcomes, open days, resources, FAQs, and a guided enrolment call-to-action. It integrates optionally with Capell Events for open-day calendars, Form Builder for applications and enquiries, and Blog for learning resources — degrading gracefully when those aren’t installed. Built on Foundation Theme with brand-token theming, an accessible skip link and focus states, and zero database impact, so editors compose education pages through the normal Layout Builder workflow.
Screenshot/media status: frontend captures are route-backed through the real Education renderer. Marketplace media promotes the homepage plus enrolment CTA captures; catalogue/resource/event/instructor files remain committed evidence but should wait for stronger differentiated seeded content before promotion.
Differentiation / target buyer: sits among 10 sibling themes; closest neighbours are theme-knowledge and theme-corporate. Differentiate on the enrolment funnel (catalogue → instructors → outcomes → admissions checklist → enrolment CTA) and the Events + Form Builder cross-sell — no other theme is shaped end-to-end around converting a learner from discovery to application. Target buyer: independent course providers, bootcamps/academies, training departments, tutoring businesses, and small private schools running Capell.
Keywords/tags (8–12): Composer keywords now include education, courses, school, e-learning, training, enrolment, academy, bootcamp, curriculum, instructors, admissions, and learning-pathway; definition() tags ['Education','Courses','Enrolment'] are good but thin.
Completion Review
Section titled “Completion Review”Completed 2026-06-06. Every prioritized roadmap row is closed, the plan text has been reconciled to shipped behavior, and the remaining notes are future product-depth opportunities rather than active improvement-plan scope. Verification for the final slice used PHP lint, screenshot manifest validation, whitespace checks, and the Capell screenshot runner build; Pest/composer tests were intentionally skipped per instruction.
6. Prioritized Roadmap
Section titled “6. Prioritized Roadmap”| Item | Bucket | Effort | Impact | Section ref |
|---|---|---|---|---|
Shipped 2026-06-06: Replace generic theme-gallery fixture PNGs with real Education renderer captures | Done | M | High | §4.6, §5 |
Reconcile extends (default vs foundation) and surfaces (frontend vs +console) | Done | S | Med | §4.4, §4.5 — closed 2026-06-05: manifest surfaces now include console, while tests keep runtime extends: default distinct from the package-level Foundation dependency. |
Verify previewImage / assets css paths resolve post-install | Done | M | Med | §4.7 — closed 2026-06-05: preview image now has a package-owned publish mapping; CSS resolves through the generated Foundation frontend Tailwind entrypoint with theme-education.css registered as an import. |
Translate hard-coded copy in course-catalog, events, instructors | Done | M | High | §2.1–2.3 |
Rewrite marketplace summary (+ extend composer keywords/description) | Done | S | High | §5 |
| Fix or remove the dead carousel prev/next controls | Done | M | Med | §4.1 |
Give ThemeEducationHealthCheck real assertions (theme key, views, assets) | Done | M | High | §4.2 |
Shipped 2026-06-06: Add test iterating includedSections → each view exists & renders | Done | M | Med | §4.10 |
Shipped 2026-06-06: Make course-catalog and events data-driven (loops + empty states) | Done | M | High | §2.5, §2.6, §3 |
Shipped 2026-06-06: Drive section colours from --site-theme-* brand tokens, not arbitrary hex | Done | L | Med | §2.4 |
Shipped 2026-06-06: Resolve navigation/footer orphan views (deleted; Foundation owns them) | Done | M | Med | §2.7 |
Shipped 2026-06-06: WCAG pass: guarantee an <h1>, audit contrast, fix carousel a11y | Done | M | High | §4.9 |
Shipped 2026-06-06: Add prefers-reduced-motion guard + start CHANGELOG.md | Done | S | Low | §2.8, §4.11 |
| Shipped 2026-06-06: Add course-detail + faculty-directory + admissions-funnel sections | Done | L | High | §3 |
| Shipped 2026-06-06: Add dark-mode token set as a marketplace differentiator | Done | L | Med | §2.9, §3 |