The source for emdashlearn.com, the official website of the community-maintained EmDash Learn plugin.
EmDash Learn adds open-source learning infrastructure to EmDash CMS. The released plugin supports self-guided Courses, ordered Lessons, Knowledge Checks, browser-local progress, and privacy-conscious aggregate reporting.
Anonymous learning is the starting point, not the ceiling.
The long-term goal is a capable, open LMS for the EmDash ecosystem, including learner identity, enrollments, roles, cross-device progress, completion records, instructor tools, richer assessments, and integrations.
The website deliberately separates three stages:
- Available today: dependable self-guided learning without learner accounts.
- As EmDash enables it: identified learning built on stable core extension points for identity, roles, durable records, and background workflows.
- The full vision: a complete, portable, community-owned LMS.
Roadmap features are not presented as released capabilities or assigned timelines before the underlying platform guarantees exist.
- Astro with TypeScript
- Tailwind CSS
- Cloudflare Workers
- Responsive, accessible HTML and CSS
- Open Graph, X Card, JSON-LD, sitemap, and crawler metadata
- Node.js 22 or newer
- npm
git clone https://github.com/emdash-learn/emdashlearn.git
cd emdashlearn
npm install
npm run devThe development server is available at http://localhost:4321.
No local environment variables are required for the public landing page.
| Command | Purpose |
|---|---|
npm run dev |
Start the local Astro development server |
npm run typecheck |
Validate Astro and TypeScript source |
npm run build |
Create the production Cloudflare Worker build |
npm run preview |
Preview the production build locally |
npm run deploy |
Build and deploy with Wrangler |
Before opening a pull request, run:
npm run typecheck
npm run buildpublic/
├── favicon.svg
├── og-image.png
├── robots.txt
└── sitemap.xml
src/
├── layouts/
│ └── Base.astro
├── pages/
│ └── index.astro
└── styles/
└── global.css
astro.config.mjs
wrangler.toml
The site is intentionally small: the landing page owns product content and structured FAQ data, the base layout owns document and social metadata, and the global stylesheet owns the visual system.
The production site includes:
- A canonical URL and search-focused title and description
WebSite,SoftwareApplication, andFAQPagestructured data- Open Graph and X Card metadata
- A 1200 × 630 social preview image
robots.txtsitemap.xml
Keep visible product claims and structured data synchronized when changing features, FAQs, the package version, or the project roadmap.
Production runs on Cloudflare Workers at emdashlearn.com.
The repository is connected to Cloudflare for production builds. Maintainers can also deploy the current checkout directly after authenticating Wrangler:
npm run deployDo not commit Cloudflare credentials or local environment files.
Issues and pull requests are welcome. Use a short-lived feature or fix branch, write Conventional Commit messages, and keep changes focused.
When changing product copy:
- Describe only functionality available in the released plugin.
- Label future capabilities as vision or roadmap work.
- Preserve the distinction between anonymous aggregate activity and learner-level analytics.
- Keep the project’s independent, community-maintained status visible.
MIT.
EmDash Learn is an independent, community-maintained project. It is not published by or affiliated with the EmDash CMS organization.
