# familyfedie-website Local static website files built with Astro. `content/` is the future source of truth for editable blog and speech content. `archive-source/` keeps the legacy exported HTML used by the current static archive routes while the migration continues. ## Project Structure - `content/` - future source of truth for editable speeches and blog posts - `archive-source/` - legacy exported HTML pages and archive pages - `src/content/pages/` - preserved HTML body fragments for migrated public pages - `src/pages/` - Astro routes for migrated public pages plus the static archive catch-all - `src/components/` - Astro components for shared page layout - `dist/` - generated static output from `npm run build` - `src/pages/index.astro` - homepage route generated from migrated content - `src/pages/about.astro` - about page route generated from migrated content - `src/pages/contact.astro` - contact page route generated from migrated content - `archive-source/index.html`, `archive-source/about.html`, `archive-source/contact.html` - original exported source for migrated public pages - `archive-source/blog/YYYY/MM/DD/` - legacy dated blog post pages - `archive-source/blog/categories/` - legacy blog category archive pages - `archive-source/blog/tags/` - legacy blog tag archive pages - `archive-source/speeches/` - legacy speech archive indexes and speech category pages - `archive-source/PAGES.md` - map from the old folder URLs to the current HTML paths - `css/` - site-level stylesheets - `css/theme.css` - extracted Parabola inline theme settings - `css/site.css` - extracted site fixes and homepage/frontpage rules - `js/` - site-level scripts - `assets/` - images, PDFs, fonts, theme files, uploads, and vendor files - `docs/` - maintainer notes - `scripts/components.mjs` - shared nav/sidebar/footer components - `scripts/render-shared-layout.mjs` - updates repeated layout across HTML files - `scripts/organize-content.mjs` - organizes exported blog and speech pages - `scripts/extract-content.mjs` - extracts posts into `content/` - `scripts/extract-theme-css.mjs` - extracts repeated inline theme CSS into files ## Maintenance Run Astro locally while editing: ```bash npm run dev ``` Check that the generated site builds successfully: ```bash npm run check ``` Run the static link and media audit against the generated `dist/` output: ```bash npm run audit:links ``` Regenerate Markdown content from the legacy exported post HTML: ```bash npm run extract:content ``` The important public pages are now Astro routes that reuse shared layout components. The large blog and speech archive is still served from legacy exported HTML in `archive-source/` through `src/pages/[...route].ts`. The repeated exported inline styles have been moved into `css/theme.css` and `css/site.css`. Tiny one-page WordPress block-support styles may still remain inline when they only apply to a single page. After changing shared navigation, sidebar, or footer markup in `scripts/components.mjs`, run: ```bash npm run render:layout ``` ## Local Preview Run Astro locally while editing: ```bash npm run dev ``` Then open Astro's local URL, usually: ```text http://localhost:4321/ ``` For a production-style Astro preview, build the static output first: ```bash npm run build ``` Then serve `dist/` with Astro preview: ```bash npm run preview ``` Then open: ```text http://localhost:4321/ ``` ## Deployment This project deploys as a static Astro build through Forgejo Actions. Every branch push installs dependencies, builds the complete site, audits its links, and prepares the separate public and protected-admin bundles. Feature branches never receive Garage publishing credentials and never change production. Only commits on `main` synchronize the validated bundles to `familyfed.ie` and `admin.familyfed.ie` in Garage. A manual workflow dispatch is subject to the same branch guard: dispatching a feature branch builds it but cannot publish it. The equivalent local validation is: ```bash npm ci npm run check ```