Shipped
Stripe Checkout for self-serve card payments
Teachers and small schools can now buy any edition with a card without waiting on an invoice. Invoice / PO flow remains available for districts. Receipts are emailed automatically by Stripe; the dashboard unlocks the moment payment confirms.
Security
PDF + PPTX downloads now buyer-watermarked
Every page footer of every downloaded artifact now includes the buying account's email and short order reference, so accidental redistribution is traceable. Free preview downloads remain unwatermarked.
Security
Same-origin enforcement on public POST endpoints
Lead capture, review-copy, and service-inquiry endpoints now reject cross-origin POSTs in addition to existing rate limiting.
Shipped
Trust & security page
Public sub-processor list, authentication model, incident-response process, and student-data forward-looking statement. Built so districts can do their IT review without a phone call.
Shipped
Virginia CTE alignment matrix
Per-unit mapping of Cybersecurity I to Virginia CTE 8602 competencies, EHE credential domains, and NICE Framework work roles. Signed alignment letters available on request.
Shipped
FAQ, comparison, and free-pack pages
/faq for K-12 buyer objections, /compare against the major alternatives, and /free-pack to gate the free preview pack behind a quick lead-capture form.
Shipped
Schema.org structured data + dynamic OG images
Organization, WebSite, Course, OfferCatalog, and FAQPage JSON-LD across the site. Per-module Open Graph images so module links unfurl with edition / minutes / difficulty.
Improved
Standards alignment matrix expanded to all 25 cyber units
Cyber I (10 units) and Cyber II (15 units) are now individually mapped to CSTA K-12 and NICE work roles, mirroring the AI Fluency matrix.
Fixed
Module count inflation
getAllModules() was loading flat .md files alongside their canonical folder versions, double-counting modules. Folder versions are now preferred and flat files are deduplicated by slug.
Fixed
/teach 404
Visiting /teach without a slug now redirects to the curriculum dashboard instead of returning a 404.