# 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. A deployment job should install
dependencies, run the build, and publish the generated `dist/` directory:

```bash
npm ci
npm run build
```

Use `npm run start` only when you intentionally want Astro to serve the built
output in an environment such as a local or Nomad preview job.
