Skip to content

Commit 2f55cb9

Browse files
chore: sync templates from emdash v0.14.0
1 parent 0175b71 commit 2f55cb9

26 files changed

Lines changed: 590 additions & 58 deletions

File tree

blog-cloudflare/.agents/skills/building-emdash-site/references/configuration.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,12 +113,12 @@ Requires a `wrangler.jsonc` with D1 and R2 bindings:
113113
Register plugins in `astro.config.mjs`:
114114

115115
```javascript
116-
import { auditLogPlugin } from "@emdash-cms/plugin-audit-log";
116+
import auditLog from "@emdash-cms/plugin-audit-log";
117117

118118
emdash({
119119
database: sqlite({ url: "file:./data.db" }),
120120
storage: local({ directory: "./uploads", baseUrl: "/_emdash/api/media/file" }),
121-
plugins: [auditLogPlugin()],
121+
plugins: [auditLog],
122122
}),
123123
```
124124

blog-cloudflare/AGENTS.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,64 @@ This template ships with `.mcp.json`, `.cursor/mcp.json`, and `.vscode/mcp.json`
4141
- `entry.id` is the slug (for URLs). `entry.data.id` is the database ULID (for API calls like `getEntryTerms`).
4242
- Always call `Astro.cache.set(cacheHint)` on pages that query content.
4343
- Taxonomy names in queries must match the seed's `"name"` field exactly (e.g., `"category"` not `"categories"`).
44+
45+
## This Template
46+
47+
A blog with posts, pages, categories, tags, full-text search, and RSS. Designed for personal writing, technical writing, indie newsletters, and anything where the writing is the product. Editorial-tech aesthetic: confident sans-serif, restrained accent, real article structure with bylines and reading time.
48+
49+
## Pages
50+
51+
| Page | Path | What it shows |
52+
| ----------- | ------------------ | ------------------------------------------------------------------------------------------------------ |
53+
| Home | `/` | Featured post hero (large image + excerpt), latest posts grid |
54+
| All posts | `/posts` | Article count, full post list with excerpts and tag chips |
55+
| Post detail | `/posts/[slug]` | Featured image, title, body, left meta column (authors + date), right TOC + search + categories gutter |
56+
| Search | `/search` | Full-text search UI |
57+
| Page | `/pages/[slug]` | Static page content (Portable Text) |
58+
| Category | `/category/[slug]` | Posts filtered by category |
59+
| Tag | `/tag/[slug]` | Posts filtered by tag |
60+
| RSS | `/rss.xml` | Generated feed |
61+
62+
## Schema
63+
64+
- `posts` collection: `title`, `featured_image`, `content` (Portable Text), `excerpt` (text).
65+
- `pages` collection: `title`, `content` (Portable Text). Used for `/about` etc.
66+
- Taxonomies: `category`, `tag`.
67+
- Single `primary` menu (Home, About, Posts by default).
68+
69+
Site settings have `title` and `tagline` -- both render in the header / footer.
70+
71+
## Visual character
72+
73+
Single typeface: **Inter** on `--font-sans`, used for everything including headings (with tighter letter-spacing on h1/h2). **JetBrains Mono** on `--font-mono` for inline code and code blocks. Body and headings share the same family; weight and size carry the hierarchy.
74+
75+
The accent is `#0066cc` -- used for links, the post-card title hover, and the search input focus ring. There's also a secondary text colour (`--color-text-secondary`) and a `--color-muted` for meta info. Don't add a second accent.
76+
77+
The article layout is the standout feature: a three-column reading view with a left meta column (author bylines, date), centred 680px body column, and a right gutter for search, table of contents, and categories. Don't flatten that into one column on desktop -- the layout signals "this is something to read".
78+
79+
## Customisation
80+
81+
`src/styles/theme.css` is the only file to edit for visual changes. Every CSS variable from `Base.astro` is listed there as a commented default -- uncomment and change to override. The dark mode palette is defined inside `Base.astro` itself; light-mode overrides in `theme.css` won't affect dark mode. To customise dark mode, add `@media (prefers-color-scheme: dark)` and `:root.dark` rules in `theme.css`.
82+
83+
Fonts are configured in `astro.config.mjs` under `fonts:`. To swap the body face, change the `name:` for the entry bound to `cssVariable: "--font-sans"`. Good alternatives: Geist, IBM Plex Sans, Söhne (if you have a licence), Public Sans. If you want a serif-bodied blog, swap to a humanist serif like Source Serif, Crimson Pro, or Lora -- but then also raise `--font-size-base` to `1.0625rem` for readability.
84+
85+
CSS variables worth knowing:
86+
87+
- `--color-accent`, `--color-accent-hover`, `--color-on-accent`, `--color-accent-ring`
88+
- `--color-bg`, `--color-bg-subtle`, `--color-surface`, `--color-text`, `--color-text-secondary`, `--color-muted`, `--color-border`, `--color-border-subtle`
89+
- `--font-sans`, `--font-mono`
90+
- `--tracking-tight` / `--tracking-snug` / `--tracking-wide` / `--tracking-wider` -- letter-spacing tokens used across headings and meta labels
91+
- `--content-width` (680px) -- article body column
92+
- `--wide-width` (1200px) -- max container
93+
- `--gutter-width` (200px) -- right sidebar (TOC) on article pages
94+
- `--meta-col-width` (180px) -- left meta column on article pages
95+
- `--avatar-size-{xs,sm,md,lg}` -- byline avatar sizes at different scales
96+
97+
## What not to do
98+
99+
- Don't add a second accent colour or coloured section backgrounds. The page should be black, white, and one blue.
100+
- Don't replace Inter with a display sans (Bebas, Anton, etc.). Headings rely on weight contrast, not novelty faces.
101+
- Don't collapse the article gutter on desktop -- it's part of the reading experience.
102+
- Don't use stock blog copy ("Welcome to my blog", "Stay tuned for more"). Write a real tagline that says what this blog is about.
103+
- Don't seed the home page with three identical placeholder posts. If you only have one real post, show one real post.
104+
- Don't enable comments without a plan to moderate them. The template doesn't ship a comments system by default for a reason.

blog-cloudflare/astro.config.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import cloudflare from "@astrojs/cloudflare";
22
import react from "@astrojs/react";
33
import { d1, r2, sandbox } from "@emdash-cms/cloudflare";
44
import { formsPlugin } from "@emdash-cms/plugin-forms";
5-
import { webhookNotifierPlugin } from "@emdash-cms/plugin-webhook-notifier";
5+
import webhookNotifier from "@emdash-cms/plugin-webhook-notifier";
66
import { defineConfig, fontProviders } from "astro/config";
77
import emdash from "emdash/astro";
88

@@ -19,7 +19,7 @@ export default defineConfig({
1919
database: d1({ binding: "DB", session: "auto" }),
2020
storage: r2({ binding: "MEDIA" }),
2121
plugins: [formsPlugin()],
22-
sandboxed: [webhookNotifierPlugin()],
22+
sandboxed: [webhookNotifier],
2323
sandboxRunner: sandbox(),
2424
marketplace: "https://marketplace.emdashcms.com",
2525
}),

blog-cloudflare/package.json

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,20 @@
1414
"typecheck": "astro check"
1515
},
1616
"dependencies": {
17-
"@astrojs/cloudflare": "^13.1.7",
17+
"@astrojs/cloudflare": "^13.5.3",
1818
"@astrojs/react": "^5.0.0",
19-
"@emdash-cms/cloudflare": "^0.12.0",
19+
"@emdash-cms/cloudflare": "^0.14.0",
2020
"@emdash-cms/plugin-forms": "^0.2.2",
21-
"@emdash-cms/plugin-webhook-notifier": "^0.1.3",
22-
"astro": "^6.0.1",
23-
"emdash": "^0.12.0",
21+
"@emdash-cms/plugin-webhook-notifier": "^0.2.0",
22+
"astro": "^6.3.0",
23+
"emdash": "^0.14.0",
2424
"react": "19.2.4",
2525
"react-dom": "19.2.4"
2626
},
2727
"devDependencies": {
2828
"@astrojs/check": "^0.9.7",
2929
"@cloudflare/workers-types": "^4.20260305.1",
3030
"wrangler": "^4.83.0"
31-
}
31+
},
32+
"packageManager": "pnpm@11.1.3+sha512.c85357fe17ca12dd23dd7071822666dfd7e3cb76fe214e3370b5ea2fb34f2a231185509b63e717f3cd0acb38dd3f8d82bcd5e8172400ae678b70ea4fbed0896d"
3233
}

blog/.agents/skills/building-emdash-site/references/configuration.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,12 +113,12 @@ Requires a `wrangler.jsonc` with D1 and R2 bindings:
113113
Register plugins in `astro.config.mjs`:
114114

115115
```javascript
116-
import { auditLogPlugin } from "@emdash-cms/plugin-audit-log";
116+
import auditLog from "@emdash-cms/plugin-audit-log";
117117

118118
emdash({
119119
database: sqlite({ url: "file:./data.db" }),
120120
storage: local({ directory: "./uploads", baseUrl: "/_emdash/api/media/file" }),
121-
plugins: [auditLogPlugin()],
121+
plugins: [auditLog],
122122
}),
123123
```
124124

blog/AGENTS.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,64 @@ This template ships with `.mcp.json`, `.cursor/mcp.json`, and `.vscode/mcp.json`
4141
- `entry.id` is the slug (for URLs). `entry.data.id` is the database ULID (for API calls like `getEntryTerms`).
4242
- Always call `Astro.cache.set(cacheHint)` on pages that query content.
4343
- Taxonomy names in queries must match the seed's `"name"` field exactly (e.g., `"category"` not `"categories"`).
44+
45+
## This Template
46+
47+
A blog with posts, pages, categories, tags, full-text search, and RSS. Designed for personal writing, technical writing, indie newsletters, and anything where the writing is the product. Editorial-tech aesthetic: confident sans-serif, restrained accent, real article structure with bylines and reading time.
48+
49+
## Pages
50+
51+
| Page | Path | What it shows |
52+
| ----------- | ------------------ | ------------------------------------------------------------------------------------------------------ |
53+
| Home | `/` | Featured post hero (large image + excerpt), latest posts grid |
54+
| All posts | `/posts` | Article count, full post list with excerpts and tag chips |
55+
| Post detail | `/posts/[slug]` | Featured image, title, body, left meta column (authors + date), right TOC + search + categories gutter |
56+
| Search | `/search` | Full-text search UI |
57+
| Page | `/pages/[slug]` | Static page content (Portable Text) |
58+
| Category | `/category/[slug]` | Posts filtered by category |
59+
| Tag | `/tag/[slug]` | Posts filtered by tag |
60+
| RSS | `/rss.xml` | Generated feed |
61+
62+
## Schema
63+
64+
- `posts` collection: `title`, `featured_image`, `content` (Portable Text), `excerpt` (text).
65+
- `pages` collection: `title`, `content` (Portable Text). Used for `/about` etc.
66+
- Taxonomies: `category`, `tag`.
67+
- Single `primary` menu (Home, About, Posts by default).
68+
69+
Site settings have `title` and `tagline` -- both render in the header / footer.
70+
71+
## Visual character
72+
73+
Single typeface: **Inter** on `--font-sans`, used for everything including headings (with tighter letter-spacing on h1/h2). **JetBrains Mono** on `--font-mono` for inline code and code blocks. Body and headings share the same family; weight and size carry the hierarchy.
74+
75+
The accent is `#0066cc` -- used for links, the post-card title hover, and the search input focus ring. There's also a secondary text colour (`--color-text-secondary`) and a `--color-muted` for meta info. Don't add a second accent.
76+
77+
The article layout is the standout feature: a three-column reading view with a left meta column (author bylines, date), centred 680px body column, and a right gutter for search, table of contents, and categories. Don't flatten that into one column on desktop -- the layout signals "this is something to read".
78+
79+
## Customisation
80+
81+
`src/styles/theme.css` is the only file to edit for visual changes. Every CSS variable from `Base.astro` is listed there as a commented default -- uncomment and change to override. The dark mode palette is defined inside `Base.astro` itself; light-mode overrides in `theme.css` won't affect dark mode. To customise dark mode, add `@media (prefers-color-scheme: dark)` and `:root.dark` rules in `theme.css`.
82+
83+
Fonts are configured in `astro.config.mjs` under `fonts:`. To swap the body face, change the `name:` for the entry bound to `cssVariable: "--font-sans"`. Good alternatives: Geist, IBM Plex Sans, Söhne (if you have a licence), Public Sans. If you want a serif-bodied blog, swap to a humanist serif like Source Serif, Crimson Pro, or Lora -- but then also raise `--font-size-base` to `1.0625rem` for readability.
84+
85+
CSS variables worth knowing:
86+
87+
- `--color-accent`, `--color-accent-hover`, `--color-on-accent`, `--color-accent-ring`
88+
- `--color-bg`, `--color-bg-subtle`, `--color-surface`, `--color-text`, `--color-text-secondary`, `--color-muted`, `--color-border`, `--color-border-subtle`
89+
- `--font-sans`, `--font-mono`
90+
- `--tracking-tight` / `--tracking-snug` / `--tracking-wide` / `--tracking-wider` -- letter-spacing tokens used across headings and meta labels
91+
- `--content-width` (680px) -- article body column
92+
- `--wide-width` (1200px) -- max container
93+
- `--gutter-width` (200px) -- right sidebar (TOC) on article pages
94+
- `--meta-col-width` (180px) -- left meta column on article pages
95+
- `--avatar-size-{xs,sm,md,lg}` -- byline avatar sizes at different scales
96+
97+
## What not to do
98+
99+
- Don't add a second accent colour or coloured section backgrounds. The page should be black, white, and one blue.
100+
- Don't replace Inter with a display sans (Bebas, Anton, etc.). Headings rely on weight contrast, not novelty faces.
101+
- Don't collapse the article gutter on desktop -- it's part of the reading experience.
102+
- Don't use stock blog copy ("Welcome to my blog", "Stay tuned for more"). Write a real tagline that says what this blog is about.
103+
- Don't seed the home page with three identical placeholder posts. If you only have one real post, show one real post.
104+
- Don't enable comments without a plan to moderate them. The template doesn't ship a comments system by default for a reason.

blog/astro.config.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import node from "@astrojs/node";
22
import react from "@astrojs/react";
3-
import { auditLogPlugin } from "@emdash-cms/plugin-audit-log";
3+
import auditLog from "@emdash-cms/plugin-audit-log";
44
import { defineConfig, fontProviders } from "astro/config";
55
import emdash, { local } from "emdash/astro";
66
import { sqlite } from "emdash/db";
@@ -22,7 +22,7 @@ export default defineConfig({
2222
directory: "./uploads",
2323
baseUrl: "/_emdash/api/media/file",
2424
}),
25-
plugins: [auditLogPlugin()],
25+
plugins: [auditLog],
2626
}),
2727
],
2828
fonts: [

blog/package.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,17 @@
1414
"typecheck": "astro check"
1515
},
1616
"dependencies": {
17-
"@astrojs/node": "^10.0.0",
17+
"@astrojs/node": "^10.1.1",
1818
"@astrojs/react": "^5.0.0",
19-
"@emdash-cms/plugin-audit-log": "^0.1.3",
20-
"astro": "^6.0.1",
19+
"@emdash-cms/plugin-audit-log": "^0.2.0",
20+
"astro": "^6.3.0",
2121
"better-sqlite3": "^12.8.0",
22-
"emdash": "^0.12.0",
22+
"emdash": "^0.14.0",
2323
"react": "19.2.4",
2424
"react-dom": "19.2.4"
2525
},
2626
"devDependencies": {
2727
"@astrojs/check": "^0.9.7"
28-
}
28+
},
29+
"packageManager": "pnpm@11.1.3+sha512.c85357fe17ca12dd23dd7071822666dfd7e3cb76fe214e3370b5ea2fb34f2a231185509b63e717f3cd0acb38dd3f8d82bcd5e8172400ae678b70ea4fbed0896d"
2930
}

marketing-cloudflare/.agents/skills/building-emdash-site/references/configuration.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,12 +113,12 @@ Requires a `wrangler.jsonc` with D1 and R2 bindings:
113113
Register plugins in `astro.config.mjs`:
114114

115115
```javascript
116-
import { auditLogPlugin } from "@emdash-cms/plugin-audit-log";
116+
import auditLog from "@emdash-cms/plugin-audit-log";
117117

118118
emdash({
119119
database: sqlite({ url: "file:./data.db" }),
120120
storage: local({ directory: "./uploads", baseUrl: "/_emdash/api/media/file" }),
121-
plugins: [auditLogPlugin()],
121+
plugins: [auditLog],
122122
}),
123123
```
124124

0 commit comments

Comments
 (0)