Website for the International Baccalaureate (MYP & DP) at Súkromné Gymnázium Česká in Bratislava, Slovakia. Built with Astro in hybrid mode: pages are statically prerendered, and a Cloudflare Worker backs the Keystatic CMS admin routes.
- DP subjects:
/dp/subjectscatalogue and detail pages with IB groups 1–6, HL/SL levels, syllabi, and teacher info - IB DP Core: CAS at
/dp/cas, TOK at/dp/tok(both with entry details), and Extended Essay guidance at/dp/ee - Diploma builder: interactive subject choices at
/dp/build-your-diploma - MYP curriculum: bilingual subject-group reference at
/myp/subjectsand four separate MYP core pages - News: exam schedules, announcements, events, with an RSS feed at
/rss.xml - Programme-first navigation: separate MYP and IB DP menus, each with its own overview, subjects, core, mission, team, and policies; desktop hover/click/keyboard support and expandable mobile sections
- Admissions: application steps, programme guidance, and direct school contact at
/admissions - Separate teams: MYP organisational chart at
/myp/teachers; DP leadership and staff portrait roster at/dp/teachers - Bilingual: English primary, full Slovak UI + optional Slovak content (English fallback)
- SEO: complete bilingual sitemap, canonical +
hreflang, social cards, and schema.org structured data - CMS: content edited visually through Keystatic at
/keystatic/, no code required
Public paths below are relative to /en or /sk.
| Programme | Routes |
|---|---|
| MYP | /myp, /myp/subjects, /myp/core/interdisciplinary-learning, /myp/core/approaches-to-learning, /myp/core/service-as-action, /myp/core/personal-project, /myp/mission, /myp/teachers, /myp/policies |
| IB DP | /dp, /dp/subjects, /dp/cas, /dp/tok, /dp/ee, /dp/build-your-diploma, /dp/mission, /dp/teachers, /dp/policies; subjects/CAS/TOK also have /[slug] details |
| Shared | /news, /gallery, /admissions, /search; news and event detail routes remain shared |
Legacy locale-prefixed /subjects, /cas, /tok, /ee, /build-your-diploma, /mission, /teachers, and /policies return HTTP 301 to the corresponding /dp routes, including subject/CAS/TOK details. Redirects preserve query strings and reject unsupported locales.
MYP is a candidate programme, not authorized. Keep its candidate-school disclaimer and text-only branding; candidacy does not guarantee authorization. DP authorization, official DP branding, and the certificate belong to DP, not MYP.
Developers maintain bilingual MYP curriculum reference data in src/data/myp-programme.ts, MYP chart data in src/data/myp-organisation.ts, and the separate DP portrait roster in src/data/teachers.ts. Programme school renderers live in src/components/programme/; src/pages/[locale]/[programme]/[section].astro statically generates each programme's mission, teachers, and policies pages. These are not new Keystatic collections.
pnpm install
pnpm run dev # → localhost:4321 (CMS admin at /keystatic/)| Command | Action |
|---|---|
pnpm run dev |
Dev server at localhost:4321 (incl. /keystatic/) |
pnpm run build |
Cloudflare Workers production build |
pnpm run preview |
Build and preview in the Workers runtime |
pnpm run deploy |
Build and deploy with Wrangler |
pnpm run check |
Type-check the project (astro check) |
- Astro 7: hybrid mode (static prerender + Cloudflare Workers runtime for CMS routes)
- Tailwind CSS 4: utility-first, CSS-based config (no
tailwind.config.js) - Keystatic CMS: visual editor + Reader API. Content stored as
.mdocfiles - MDX (
@astrojs/mdx): for.astrocomponents that use JSX - TypeScript: strict mode via
astro/tsconfigs/strict - Node 22.12.0 or newer
CMS content is not managed with Astro content collections. It is managed by Keystatic; programme reference content has the separate code ownership described above:
- Schemas live in
keystatic.config.ts(Keystaticfields.*API, not Zod). - Entries are
.mdocfiles (YAML frontmatter + Markdoc body) undersrc/content/. - Pages read content through the Reader API singleton in
src/lib/keystatic.ts.
| Collection | Path | Description |
|---|---|---|
subjects |
src/content/subjects/ |
DP subject offerings at /dp/subjects |
news |
src/content/news/ |
Shared announcements & updates |
cas |
src/content/cas/ |
DP CAS logs at /dp/cas |
tok |
src/content/tok/ |
DP TOK materials at /dp/tok |
Editors should use the CMS at /keystatic/ rather than touching .mdoc files by hand. See humans/CONTENT.md.
The programme-first URL change does not rename or move the existing DP subjects/CAS/TOK collection storage.
- URL:
/keystatic/athttp://localhost:4321/keystatic/in dev andhttps://ib.gymnaziumceska.sk/keystatic/on the live site; theworkers.devURL remains available. - Dev (
kind: 'local'): writes.mdocfiles straight to disk, no login. - Production (
kind: 'cloud'): Keystatic Cloud projectib-ceska/ib-ceskamanages editor accounts without requiring teachers to join GitHub. Saves commit tomainand trigger a Worker rebuild. No GitHub OAuth Worker secrets are needed. - See
humans/DEPLOY.mdfor hostname routing and CMS origin verification.
- Primary: English for all UI, content, and commit messages.
- Secondary: Slovak, full UI translation shipped. Content can be translated per-entry with English fallback.
- Do not write Czech in code or content.
See humans/ for onboarding, the content-editing guide, design decisions, and the original handover brief. New developers should also read the root AGENTS.md.
Production targets Cloudflare Workers with static assets. Current @astrojs/cloudflare versions do not support Pages SSR, so create a Worker rather than a Pages project.
pnpm run build
npx wrangler deployUse main as the production branch so code pushes and Keystatic content commits trigger the same production pipeline. Full dashboard, secrets, verification and DNS instructions are in humans/DEPLOY.md.
Private. Súkromné Gymnázium Česká.