You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Refresh README + dev docs to match current collection layout
- README: add npm run dev:admin to local quickstart; correct the
src/assets, src/components and src/content trees (drop stale
testimonials/, add docs/, add admin/, add the five
*-section-visibility collections, fix testimonials as flat list.mdx);
move testimonials to the language-neutral list with quoteEn/quoteDe.
- docs/dev/architecture.mdx, docs/dev/content-collections.mdx: document
the *-section-visibility collections.
- docs/guides/managing-media.mdx: rename the singleton reference to
"Media categories" (the categories list is now its own per-locale
singleton).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: README.md
+17-5Lines changed: 17 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -26,6 +26,14 @@ npm install
26
26
npm run dev
27
27
```
28
28
29
+
Dev server runs at `localhost:4321`. To work on the admin UI locally, use:
30
+
31
+
```sh
32
+
npm run dev:admin
33
+
```
34
+
35
+
Then visit `localhost:4321/keystatic` to open the Keystatic editor.
36
+
29
37
## Deployment
30
38
31
39
The repo produces **two separate deploys** from the same source tree. The public pages are pure static HTML/CSS/JS, which GitHub Pages serves for free — but the admin UI's `/keystatic` and `/api/keystatic/*` routes need server-side rendering (OAuth callback + GitHub commit handler), and GitHub Pages doesn't support that. The admin therefore runs on Cloudflare Pages with an SSR adapter, while the public site stays on GitHub Pages.
@@ -77,6 +85,7 @@ The site rebuilds from the previous state within a few minutes. See the [If Some
77
85
│ ├── assets/ # Images organized by content type
78
86
│ │ ├── about-us/ # About page section images (our-mission/)
│ │ ├── testimonials/ # Single list.mdx; quotes inline as quoteEn / quoteDe
140
152
│ │ └── config.ts # Collection schemas (Zod)
141
153
│ │
142
154
│ ├── keystatic/ # MDX component registry for the Keystatic editor
@@ -170,7 +182,7 @@ The site supports two languages: **English** (default) and **German**.
170
182
- English pages live at the root URL (e.g., `/about-us`)
171
183
- German pages live under `/de/` (e.g., `/de/about-us`)
172
184
173
-
Localized content collections (`events`, `projects`, `page-text`, `testimonials`) use `en/` and `de/` subfolders. Collections that are language-neutral (`people`, `sponsors`, `instagram`, `hero-slides`) stay flat — `people` keeps role translation inline via `roleEn` / `roleDe`. If a German translation is missing, the English version is shown as fallback.
185
+
Localized content collections (`events`, `projects`, `page-text`) use `en/` and `de/` subfolders. Collections that are language-neutral (`people`, `sponsors`, `instagram`, `hero-slides`, `testimonials`) stay flat — `people` keeps role translation inline via `roleEn` / `roleDe`, and `testimonials` keeps quote translation inline via `quoteEn` / `quoteDe`. If a German translation is missing, the English version is shown as fallback.
174
186
175
187
The language switcher in the header toggles between locales. Locale utilities live in `src/utils/i18n.ts`.
Copy file name to clipboardExpand all lines: src/content/docs/dev/architecture.mdx
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -36,6 +36,8 @@ Content is managed through Astro's content collections, defined in `src/content/
36
36
37
37
Localized collections (`events`, `projects`, `page-text`) use `en/` and `de/` subfolders. Language-neutral collections (`sponsors`, `instagram`, `hero-slides`, `docs`, `people`, `testimonials`, `social-platforms`) stay flat — `people` carries both role translations inline (`roleEn`/`roleDe`), and `testimonials` carries both quote translations inline (`quoteEn`/`quoteDe`).
38
38
39
+
A second class of collections — `landing-section-visibility`, `about-section-visibility`, `sponsors-section-visibility`, `contact-section-visibility`, `media-section-visibility` — store per-page section-toggle YAML (`settings.yaml`) rather than rendered content. Pages read them to skip entire sections at render time, and editors flip the toggles through the **\<page\> — segments** singletons in Keystatic.
40
+
39
41
## Internationalization (i18n)
40
42
41
43
The site supports English (default, no URL prefix) and German (`/de/` prefix). Configured via Astro's built-in i18n in `astro.config.mjs`.
Copy file name to clipboardExpand all lines: src/content/docs/dev/content-collections.mdx
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -20,6 +20,7 @@ All website content is managed through [Astro content collections](https://docs.
20
20
|`hero-slides`|`src/content/hero-slides/`| No | order, alt, shownText (corner overlay on homepage hero AND /media caption when surfaced), media (conditional: `{discriminant: image\|video, value}`), displayInMedia |
21
21
|`instagram`|`src/content/instagram/`| No | url, date, isDraft |
22
22
|`docs`|`src/content/docs/`| No | title, description, order, group |
23
+
|`landing-section-visibility`, `about-section-visibility`, `sponsors-section-visibility`, `contact-section-visibility`, `media-section-visibility`|`src/content/<page>-section-visibility/settings.yaml` (one YAML file each) | No | Boolean `show*` toggles per page, edited via the **\<page\> — segments** singletons. Pages read these to skip whole sections at render time. |
23
24
24
25
**Localized collections** use `en/` and `de/` subfolders with identical filenames in each. Content queries filter by locale and fall back to English if a German translation is missing.
Copy file name to clipboardExpand all lines: src/content/docs/guides/managing-media.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -47,7 +47,7 @@ Each per-image source has a checkbox you can flip off:
47
47
48
48
Event and project covers always appear on /media — to keep an event/project off the page entirely, mark its `isDraft: true` (which hides it everywhere).
49
49
50
-
To hide an entire category, edit the **Media — page header + categories** singleton in the admin and remove that category from the `mediaCategories` list.
50
+
To hide an entire category, edit the **Media categories** singleton in the admin (one per locale) and remove that category from the `mediaCategories` list.
0 commit comments