Curated list of good music https://blog.punkify.cc
  • Astro 59.5%
  • TypeScript 25.9%
  • CSS 9.7%
  • JavaScript 4.3%
  • Dockerfile 0.4%
  • Other 0.2%
Find a file
Tobias ca063cc5ed
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/cron/woodpecker Pipeline was successful
Update Post “obsessor-soul-repossession”
2026-06-13 21:51:29 +00:00
.vscode Initial commit from Astro 2025-03-28 14:49:05 -07:00
dev feat: add slug customization for posts and update related components 2026-06-03 23:47:29 +02:00
public Update config.yml 2026-06-13 23:10:39 +02:00
src Update Post “obsessor-soul-repossession” 2026-06-13 21:51:29 +00:00
.dockerignore feat: add Dockerfile and nginx configuration for application deployment 2026-06-01 22:24:37 +02:00
.env.example Add stats page and Umami Analytics configuration 2026-06-07 00:10:47 +02:00
.gitattributes Add gitattributes file 2025-07-16 12:24:34 -05:00
.gitignore Initial commit from Astro 2025-03-28 14:49:05 -07:00
.woodpecker.yml modified: .woodpecker.yml 2026-06-07 01:02:52 +02:00
astro.config.mjs feat: wrap headings with links instead of adding icon 2025-08-24 15:21:55 -05:00
Dockerfile feat: add Dockerfile and nginx configuration for application deployment 2026-06-01 22:24:37 +02:00
giscus.json feat: add giscus.json to limit valid origins 2025-08-22 12:06:00 -05:00
LICENSE.txt Add MIT license 2025-07-16 14:22:13 -05:00
nginx.conf feat: add Dockerfile and nginx configuration for application deployment 2026-06-01 22:24:37 +02:00
package-lock.json Add new band post for HOPE? and implement band and tag pages 2026-06-01 21:48:33 +02:00
package.json feat: improve katex math styling 2025-09-06 00:28:23 -05:00
pnpm-lock.yaml feat: add PostFilterBar component for filtering blog posts by year, month, country, and release year 2026-06-11 23:17:08 +02:00
prettier.config.js Format tree with Prettier 2025-07-15 19:57:14 -05:00
README.md fix: update GitHub icon import path in SocialLinks component 2026-06-04 03:25:43 +02:00
READMEold.md modified: README.md 2026-06-04 00:57:42 +02:00
tsconfig.json Normalize local imports with ~ prefix 2025-08-13 13:46:45 -05:00

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

Example website screenshot


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 slug frontmatter 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 /admin CMS 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

  1. Write or update a post in Sveltia CMS (or directly in the repo)
  2. Save → Forgejo commit → Coolify triggers a build and deploys the static site
  3. 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
  4. 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:

  1. Open bandcamp-dl-webui on mobile → trigger download of an album
  2. File lands directly in a NextExplorer-mounted directory
  3. Create a share link in NextExplorer and paste it into the post's downloadLink field
  4. 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.instanceUrl and fediverse.token (read token) in src/site.config.ts
  • fedi_write_token secret in Woodpecker CI for the announce pipeline

License

This project is licensed under the MIT License.

Upstream theme: MultiTerm Astro by @stelclementine