- Astro 75.3%
- TypeScript 11.7%
- JavaScript 7.3%
- CSS 5.3%
- Dockerfile 0.4%
|
All checks were successful
Build and deploy / build (push) Successful in 20m28s
The CMS moves to cms.ramlajay.com, its only address once payload.grinvalsky.com is retired. The build fetches from there, and the share images point there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| .claude | ||
| .forgejo/workflows | ||
| .roo | ||
| deploy | ||
| fonts-src | ||
| public | ||
| scripts | ||
| src | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| astro.config.mjs | ||
| CONVENTIONS.md | ||
| DEPLOY-HETZNER.md | ||
| Dockerfile | ||
| Dockerfile.serve | ||
| IMAGES.md | ||
| NOTES.md | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
grdelina-astro
This is the production Grdelina site. Fully static Astro, pre-rendered from
Payload CMS (cms.ramlajay.com, the Grdelina site) at build time, built by
Forgejo Actions and served by nginx on one Hetzner box. Editors
publish with the "Publish site" button in Payload's Grdelina sidebar (~1 min
to live). See DEPLOY-HETZNER.md.
Content moved from Directus to Payload in October 2026. src/lib/resources.ts
still hands pages the shapes the Directus API returned (translations[0],
directus_files_id, …), so pages and components didn't change; file ids are
the Directus UUIDs kept on each imported Payload file.
History: originally built in Webstudio, then migrated to this repo. Webstudio
and the earlier Netlify deployment are both retired — do not use either.
NOTES.md has the migration record; inline // … Webstudio … comments are
kept only as lineage notes for where a layout/behaviour came from.
Requirements
- Node 20+ (CI/prod uses Node 22)
- Network access to Payload (
cms.ramlajay.com) at build time. Its Grdelina content is publicly readable, so no token is needed.
Setup
npm install
cp .env.example .env # PUBLIC_PAYLOAD_URL defaults to the live instance
Commands
npm run dev # dev server (fetches Payload per request)
npm run build # static build → dist/ (pre-renders sk / en / hr + / redirect)
npm run preview # serve dist/
npx astro check # type-check
How it works
- Content: fetched from Payload's REST API (
grdelina-*collections and globals) at build time.src/lib/resources.tshas one function per data source;src/lib/directus.ts(name kept) is the small Payload client. CMS changes only go live on the next build. An editor triggers one with the "Publish site" button in Payload (it runs the Forgejo workflow); a push tomainalso builds. SeeDEPLOY-HETZNER.md. - Languages:
src/pages/[lang]/…routes enumeratelanguageswhereactive = true(currentlysk,en,hr,pl) viagetStaticPaths./redirects to/sk. - Images: no runtime image service.
src/lib/image.ts(cdnImage()) records the widths each<img>needs;src/integrations/local-images.mjsgenerates the.webpfiles with Sharp intodist/img/at build. - Design tokens:
src/styles/tokens.css— CSS custom properties. - Custom code: idiomatic reimplementations (CSS marquee, native
<details>FAQ, native<dialog>mobile menu, …); trade-offs noted inNOTES.md §2.
Layout
src/lib/ directus.ts · resources.ts · i18n.ts
src/styles/ tokens.css · global.css
src/layouts/ BaseLayout.astro
src/components/ Navbar · Footer · CtaBanner · LanguageSwitcher · MobileMenu
Marquee · FaqAccordion · HeroBadge · WhyUsSlider · Rail
ApartmentCard · VillaCard · Icon
src/pages/ index.astro (→ /sk) · [lang]/index.astro (Home)