Skip to content

Repository files navigation

NHARC Website (W3EXW)

Build & Deploy Site Built with Astro

Website for the North Hills Amateur Radio Club, built with Astro. It's a static site, served by Caddy.

Live at https://nharc.org.


Editing content

There are two ways to edit content.

In the browser. Club volunteers edit at https://nharc.org/admin/ using Sveltia CMS. Sign in with GitHub, make your changes, and saving publishes on its own. No code involved. Getting someone editor access means adding their GitHub account to the repo (see OPERATIONS.md section 3).

In the files. Everything is plain text and can be edited directly:

What Where
Club info, schedule, contact, dues src/data/site.json
Home page (intro, "Around the club" blurb, raffle on/off) src/data/home.json
Repeater list src/data/repeaters.json
Net schedule src/data/nets.json
Officers roster src/data/officers.json
PA D-STAR reference table src/data/padstar.json
Page prose (About, Membership, VE Testing, D-STAR, Raffle) src/content/pages/*.md
News / announcements src/content/news/*.md
Meeting minutes src/content/minutes/*.md
Activities presentations src/content/presentations/*.md
Events / calendar src/content/events/*.md
PDFs, images public/files/, public/images/, public/uploads/

Local development

npm install
npm run dev      # http://localhost:4321
npm run build    # output to dist/
npm run preview  # serve the built site

Deploying

Push to main and GitHub Actions builds and deploys it (.github/workflows/deploy.yml). CMS edits are just commits, so they trigger the same thing. That's the normal path.

If you need to push something out by hand, ./deploy/deploy.sh builds locally and rsyncs dist/ to the server. It refuses to run if your checkout is behind origin/main, which is deliberate: the rsync uses --delete, so deploying from a stale tree would wipe files that were added since (images uploaded through the CMS, usually).

How it's served

Caddy serves /var/www/nharc with automatic HTTPS from Let's Encrypt. Config is deploy/Caddyfile, and the installed copy lives at /etc/caddy/Caddyfile.

Caddy also writes a JSON access log that feeds a nightly traffic report at /stats. See deploy/stats/README.md.

Project layout

src/
  components/   Header, Footer, TowerMark, Icon, PageHeader, ClubSlideshow
  content/      Markdown: pages/, news/, minutes/, presentations/, events/  (+ content.config.ts schemas)
  data/         JSON data files (repeaters, nets, officers, site, padstar)
  layouts/      BaseLayout.astro
  pages/        One .astro file per route
  styles/       global.css  (green & gold theme, self-hosted webfonts)
public/
  admin/        Sveltia CMS (index.html + config.yml)
  files/        PDFs (membership form, etc.)
  fonts/        Self-hosted webfonts (Barlow Semi Condensed, Public Sans)
  images/       Images (club seal, ARRL badge, and the club/ photo set)
  uploads/      CMS-uploaded media
deploy/         Caddyfile, deploy.sh, oauth-relay.py, stats/

OPERATIONS.md has the rest: GitHub and CI setup, how CMS login actually works, the DNS cutover, the traffic stats, and the content that still needs somebody to verify it.

About

Astro static site for the North Hills Amateur Radio Club (W3EXW), edited in-browser via Sveltia CMS

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages