Skip to content

Commit 8893ad1

Browse files
leopoldblumclaude
andcommitted
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>
1 parent 6e0a690 commit 8893ad1

4 files changed

Lines changed: 21 additions & 6 deletions

File tree

README.md

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@ npm install
2626
npm run dev
2727
```
2828

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+
2937
## Deployment
3038

3139
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
7785
│ ├── assets/ # Images organized by content type
7886
│ │ ├── about-us/ # About page section images (our-mission/)
7987
│ │ ├── default-images/ # Placeholder/fallback images
88+
│ │ ├── docs/ # Images embedded in /docs MDX content
8089
│ │ ├── events/ # Event cover images
8190
│ │ ├── footer/ # Footer logo variants
8291
│ │ ├── header/ # Header logo variants
@@ -85,11 +94,11 @@ The site rebuilds from the previous state within a few minutes. See the [If Some
8594
│ │ ├── projects/ # Project cover images
8695
│ │ ├── social-icons/ # Social platform icons (per-platform subfolder)
8796
│ │ ├── sponsors/ # Sponsor logos by tier (diamond/, gold/, etc.)
88-
│ │ ├── testimonials/ # Testimonial portraits
8997
│ │ └── whatIsBears/ # "What is BEARS" section images
9098
│ │
9199
│ ├── components/ # Astro components
92100
│ │ ├── about/ # About page sections
101+
│ │ ├── admin/ # Admin dashboard (admin build only)
93102
│ │ ├── contact/ # Contact page components
94103
│ │ ├── docs/ # Documentation page components
95104
│ │ ├── events/ # Events page components
@@ -103,14 +112,18 @@ The site rebuilds from the previous state within a few minutes. See the [If Some
103112
│ │ └── sponsors/ # Sponsors page components
104113
│ │
105114
│ ├── content/ # Astro content collections
115+
│ │ ├── about-section-visibility/ # Per-section show/hide toggles (singleton)
106116
│ │ ├── branding/ # Brand logos, favicon, OG default (singleton)
117+
│ │ ├── contact-section-visibility/ # Per-section show/hide toggles (singleton)
107118
│ │ ├── default-images/ # Fallback cover images (singleton)
108119
│ │ ├── docs/ # Documentation pages (guides/, dev/)
109120
│ │ ├── events/ # Event entries (.md/.mdx)
110121
│ │ │ ├── en/ # English (default)
111122
│ │ │ └── de/ # German translations
112123
│ │ ├── hero-slides/ # Landing page hero carousel slides
113124
│ │ ├── instagram/ # Instagram feed entries
125+
│ │ ├── landing-section-visibility/ # Per-section show/hide toggles (singleton)
126+
│ │ ├── media-section-visibility/ # Per-section show/hide toggles (singleton)
114127
│ │ ├── page-text/ # Editable page copy by section
115128
│ │ │ ├── en/ # English (default)
116129
│ │ │ │ ├── 404/
@@ -134,9 +147,8 @@ The site rebuilds from the previous state within a few minutes. See the [If Some
134147
│ │ │ └── de/ # German translations
135148
│ │ ├── social-platforms/ # Social platforms (Instagram, LinkedIn, YouTube, …)
136149
│ │ ├── sponsors/ # Sponsor entries by tier (diamond/, gold/, etc.)
137-
│ │ ├── testimonials/ # Testimonial entries
138-
│ │ │ ├── en/ # English (default)
139-
│ │ │ └── de/ # German translations
150+
│ │ ├── sponsors-section-visibility/ # Per-section show/hide toggles (singleton)
151+
│ │ ├── testimonials/ # Single list.mdx; quotes inline as quoteEn / quoteDe
140152
│ │ └── config.ts # Collection schemas (Zod)
141153
│ │
142154
│ ├── keystatic/ # MDX component registry for the Keystatic editor
@@ -170,7 +182,7 @@ The site supports two languages: **English** (default) and **German**.
170182
- English pages live at the root URL (e.g., `/about-us`)
171183
- German pages live under `/de/` (e.g., `/de/about-us`)
172184

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.
174186

175187
The language switcher in the header toggles between locales. Locale utilities live in `src/utils/i18n.ts`.
176188

src/content/docs/dev/architecture.mdx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ Content is managed through Astro's content collections, defined in `src/content/
3636

3737
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`).
3838

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+
3941
## Internationalization (i18n)
4042

4143
The site supports English (default, no URL prefix) and German (`/de/` prefix). Configured via Astro's built-in i18n in `astro.config.mjs`.

src/content/docs/dev/content-collections.mdx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ All website content is managed through [Astro content collections](https://docs.
2020
| `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 |
2121
| `instagram` | `src/content/instagram/` | No | url, date, isDraft |
2222
| `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. |
2324

2425
**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.
2526

src/content/docs/guides/managing-media.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ Each per-image source has a checkbox you can flip off:
4747

4848
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).
4949

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.
5151

5252
## Hiding the whole page
5353

0 commit comments

Comments
 (0)