Skip to content

Project Structure

.
├── public/
│ ├── _headers # Cloudflare Pages headers (security/CSP)
│ └── favicon.svg
├── functions/
│ └── api/
│ ├── cleanup.ts # Optional R2 media cleanup (secret-guarded)
│ └── instagram.ts # Optional legacy IG feed (KV); strip uses JSON feed
├── src/
│ ├── components/
│ │ ├── media/ # LiveVideoPlayer, ScheduleBoard (React islands)
│ │ ├── sections/ # LiveStream, ScheduleBoard, InstagramStrip, …
│ │ └── ui/ # Design-system primitives
│ ├── content/
│ │ ├── schedule/ # Weekly programming JSON (Mon–Sun)
│ │ ├── blog|pages|… # Other collections
│ ├── i18n/ # Routes, switcher, UI copy
│ ├── layouts/ # BaseLayout (Instagram strip + footer), marketing
│ ├── lib/ # schedule.ts, instagram.ts, SEO, site config, …
│ ├── pages/ # Routes (+ llms.txt, robots.txt, rss)
│ ├── styles/ # Tokens + global.css (@theme)
│ └── content.config.ts # Collection schemas (incl. schedule)
├── DESIGN.md # Visual SoT (La Clave)
├── .github/workflows/ # CI/CD
├── astro.config.ts
├── wrangler.jsonc # Pages + optional R2 / KV bindings
└── package.json
  • Home studio: LiveStream + ScheduleBoard on src/pages/index.astro; schedule height tracks the 16:9 player.
  • Instagram strip: JSON feed in InstagramStrip, mounted site-wide above the footer.
  • Locale routing: default-locale routes live at the root; add src/pages/[locale]/ when introducing more languages.
  • Content collections: Markdown/JSON in src/content/ with schemas in content.config.ts.
  • Content editing: pure Git — edit files and open a pull request.