b3a7f98e5a
CI / E2E Cloudflare (4/8) (push) Failing after 0s
CI / E2E Cloudflare (8/8) (push) Failing after 1s
CI / Lint (push) Failing after 1s
Auto Extract / Extract (push) Failing after 4s
CI / Version Check (push) Failing after 9s
CI / Integration Tests (push) Failing after 1s
CI / E2E tests (1/8) (push) Failing after 1s
CI / E2E tests (2/8) (push) Failing after 2s
CI / E2E tests (3/8) (push) Failing after 2s
CI / Browser Tests (push) Failing after 1s
CI / E2E tests (5/8) (push) Failing after 1s
CI / E2E Cloudflare (2/8) (push) Failing after 2s
CI / Typecheck (push) Failing after 1s
CI / Changeset Validation (push) Failing after 2s
CI / E2E Cloudflare (5/8) (push) Failing after 1s
CI / E2E Cloudflare (6/8) (push) Failing after 1s
CI / E2E Cloudflare (7/8) (push) Failing after 1s
CodeQL / Analyze (javascript-typescript) (push) Failing after 1s
Format / Format (push) Failing after 0s
CodeQL / Analyze (actions) (push) Failing after 4s
CI / E2E tests (4/8) (push) Failing after 1s
CI / E2E tests (6/8) (push) Failing after 1s
CI / E2E tests (7/8) (push) Failing after 2s
CI / E2E tests (8/8) (push) Failing after 1s
CI / E2E Cloudflare (1/8) (push) Failing after 1s
CI / E2E Cloudflare (3/8) (push) Failing after 2s
Preview Releases / Publish Preview (push) Failing after 0s
zizmor / Run zizmor (push) Failing after 1s
Release / Release (push) Failing after 2s
CI / Smoke Tests (push) Failing after 5m36s
CI / Tests (push) Failing after 6m36s
Release / Sync Templates (push) Has been skipped
CI / E2E Tests (push) Has been cancelled
44 lines
2.8 KiB
Markdown
44 lines
2.8 KiB
Markdown
This is an EmDash site -- a CMS built on Astro with a full admin UI.
|
|
|
|
## Commands
|
|
|
|
```bash
|
|
npx emdash dev # Start dev server (runs migrations, seeds, generates types)
|
|
npx emdash types # Regenerate TypeScript types from schema
|
|
```
|
|
|
|
The admin UI is at `http://localhost:4321/_emdash/admin`.
|
|
|
|
## Key Files
|
|
|
|
| File | Purpose |
|
|
| ------------------------ | ---------------------------------------------------------------------------------- |
|
|
| `astro.config.mjs` | Astro config with `emdash()` integration, database, and storage |
|
|
| `src/live.config.ts` | EmDash loader registration (boilerplate -- don't modify) |
|
|
| `seed/seed.json` | Schema definition + demo content (collections, fields, taxonomies, menus, widgets) |
|
|
| `emdash-env.d.ts` | Generated types for collections (auto-regenerated on dev server start) |
|
|
| `src/layouts/Base.astro` | Base layout with EmDash wiring (menus, search, page contributions) |
|
|
| `src/pages/` | Astro pages -- all server-rendered |
|
|
|
|
## Skills
|
|
|
|
Agent skills are in `.agents/skills/`. Load them when working on specific tasks:
|
|
|
|
- **building-emdash-site** -- Querying content, rendering Portable Text, schema design, seed files, site features (menus, widgets, search, SEO, comments, bylines). Start here.
|
|
- **creating-plugins** -- Building EmDash plugins with hooks, storage, admin UI, API routes, and Portable Text block types.
|
|
- **emdash-cli** -- CLI commands for content management, seeding, type generation, and visual editing flow.
|
|
|
|
## Documentation
|
|
|
|
The EmDash docs are available as an MCP server at `https://docs.emdashcms.com/mcp`. When you need to verify an API, hook, config option, field type, or pattern, call `search_docs` against the live documentation rather than relying on training-data recall. The docs reflect current behaviour; assumptions may not.
|
|
|
|
This template ships with `.mcp.json`, `.cursor/mcp.json`, and `.vscode/mcp.json` so Claude Code, Cursor, and VS Code auto-discover the docs server. Other tools (OpenCode, Windsurf, etc.) need a manual one-time setup -- see [docs.emdashcms.com/docs-mcp](https://docs.emdashcms.com/docs-mcp).
|
|
|
|
## Rules
|
|
|
|
- All content pages must be server-rendered (`output: "server"`). No `getStaticPaths()` for CMS content.
|
|
- Image fields are objects (`{ src, alt }`), not strings. Use `<Image image={...} />` from `"emdash/ui"`.
|
|
- `entry.id` is the slug (for URLs). `entry.data.id` is the database ULID (for API calls like `getEntryTerms`).
|
|
- Always call `Astro.cache.set(cacheHint)` on pages that query content.
|
|
- Taxonomy names in queries must match the seed's `"name"` field exactly (e.g., `"category"` not `"categories"`).
|