- Astro 59.5%
- TypeScript 25.9%
- CSS 9.7%
- JavaScript 4.3%
- Dockerfile 0.4%
- Other 0.2%
| .vscode | ||
| dev | ||
| public | ||
| src | ||
| .dockerignore | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| .woodpecker.yml | ||
| astro.config.mjs | ||
| Dockerfile | ||
| giscus.json | ||
| LICENSE.txt | ||
| nginx.conf | ||
| package-lock.json | ||
| package.json | ||
| pnpm-lock.yaml | ||
| prettier.config.js | ||
| README.md | ||
| READMEold.md | ||
| tsconfig.json | ||
blog.punkify.cc
A punk music review blog built on MultiTerm Astro — a terminal-aesthetic Astro theme. This fork extends the upstream theme with Fediverse comment support, an automated CI/CD posting pipeline, Sveltia CMS integration, a FAQ section, and a fully mobile-friendly media workflow.
Live at blog.punkify.cc
Features
From upstream MultiTerm
- Theme Selection: Full Shiki theme support — dark/light/auto or multi-theme picker via CSS variables
- Markdown Extensions: Admonitions, sticky TOC, emoji shortcodes, KaTeX math, MDX, reading time
- RSS Feed and Sitemap: Zero-config
- Social Cards: Auto-generated OG images per post via Satori
- Responsive Design: Tailwind v4, optimized for all screen sizes
Added in this fork
- GoToSocial / Fediverse comments: Each post links to a GoToSocial status and renders live replies as a comment section — no GitHub account required
- Auto-announce via CI: Woodpecker CI detects new posts on push, creates a GoToSocial status automatically, and writes the URL back into the post frontmatter — all hands-free
- Enhanced post previews: Date pill, author icon, live comment count fetched from the Fediverse API at build time
- Custom URL slugs: Optional
slugfrontmatter field so folder names with special characters (en-dashes etc.) don't break URLs - FAQ section: Accordion-style FAQ page backed by a JSON content collection — editable directly in Sveltia CMS
- Sveltia CMS: Full
/adminCMS for managing posts, FAQ, and home content via a Gitea/Forgejo backend — works on mobile
Infrastructure Stack
This blog runs entirely on self-hosted infrastructure with a low-friction publish workflow.
Blog & Hosting
| Layer | Tool |
|---|---|
| Framework | Astro (SSG) |
| Hosting / CI-CD | Coolify (self-hosted PaaS) |
| Git remote | Forgejo (self-hosted, homelab) |
| CI pipeline | Woodpecker CI |
| Fediverse instance | GoToSocial |
| CMS | Sveltia CMS |
Publish flow
- Write or update a post in Sveltia CMS (or directly in the repo)
- Save → Forgejo commit → Coolify triggers a build and deploys the static site
- Woodpecker CI also triggers on the push, scans posts for any missing
fediverse:frontmatter, creates a GoToSocial status for each new post, and writes the status URL back into the frontmatter with a[CI SKIP]commit - The deployed post now has a live comment section powered by the Fediverse reply thread
Music media stack
A note on music and purpose All music on this blog streams at 128kbps — perfectly fine for listening on the go. But this blog exists for one reason: promotion and passion. Punk music deserves to be heard. I played in punk bands for years and I know first-hand the effort, time, and heart that goes into recording. There is something genuinely special about someone holding a physical copy of music you made with your band. So use this blog as a starting point — explore, discover new bands, get inspired. And when something hits you: buy the record, buy the merch, support the artists.
Music is sourced from Bandcamp and flows through a fully mobile-friendly pipeline:
| Tool | Purpose |
|---|---|
| bandcamp-dl + webui fork | Download 128kbps Bandcamp streams via a mobile-friendly web UI |
| NextExplorer | File manager / share server — mounts the download folder and generates direct share links |
Workflow:
- Open bandcamp-dl-webui on mobile → trigger download of an album
- File lands directly in a NextExplorer-mounted directory
- Create a share link in NextExplorer and paste it into the post's
downloadLinkfield - Write the review in Sveltia CMS, save → CI handles the rest
Getting Started
Clone the Repository:
git clone --depth 1 https://git.steltner.cloud/2tap2b/blog-punkify my-new-blog && cd my-new-blog
Install Dependencies:
npm install
Start the Development Server:
npm run dev
Build Your Site and View the Results:
npm run build && npm run preview
Configuration
All configuration is done from src/site.config.ts.
To add your own content, check out the src/content directory. Remove the example content and replace it with your own.
For the Fediverse comment/announce feature, set up:
- A GoToSocial (or Mastodon-compatible) instance
fediverse.instanceUrlandfediverse.token(read token) insrc/site.config.tsfedi_write_tokensecret in Woodpecker CI for the announce pipeline
License
This project is licensed under the MIT License.
Upstream theme: MultiTerm Astro by @stelclementine
