This blog is generated by a custom Static Site Generator (SSG) built from scratch with Go.
It features a frontend pipeline and a fully automated deployment process using GitHub Actions.
Website link: https://chebread.github.io/
- Features
- Tech Stack
- How to Run
- How to Use devd
- How to Use localias
- How to Create Manual Anchor Links
- How to Deploy
- License
- Custom Go SSG
- Markdown-Based Content
- Build-Time Syntax Highlighting
- Image Zooming
- Manual Anchor Links for Headings
- Frontend Tooling
- Automated CI/CD Pipeline
- Static Site Generator (SSG): Go
- Content: Markdown with YAML Front Matter parsed with Goldmark
- Styling: SCSS compiled with Dart Sass
- JavaScript: TypeScript (bundled with esbuild)
- Image Zoom: medium-zoom
- Package Manager: pnpm
- Deployment: GitHub Actions
go install github.com/cortesi/devd/cmd/devd@latest
brew install chroma
chroma --html-styles --style=github > layout/styles/chroma.css
pnpm install
pnpm run build
pnpm run serve
pnpm run watch
This command checks for changes to layout directory files and executes pnpm run build
.
devd DIR_NAME # Run the server from the DIR_NAME directory
devd -l DIR_NAME # Run the server using livereload
devd -o DIR_NAME # Run the server and Open the browser
devd -ol DIR_NAME # Run the server and open a browser using livereload
killall devd # Kill devd process
localias set devd.test 8000
localias remove devd.test
localias clear
localias list
localias status
localias start
localias stop
localias run
You can create links that jump to specific headings within a page. This is useful for building a table of contents.
Append {#your-custom-id} directly after your heading text. This ID will be the target for your link.
## My Awesome Section {#section-1}
Use the standard Markdown link syntax. The URL part should be a # followed by the custom ID you created.
[Go to my awesome section](#section-1)
## Table of Contents
- [Go to Section 1](#section-1)
- [Go to Section 2](#section-2)
## My Awesome Section {#section-1}
Here is the content for the first section.
## Another Awesome Section {#section-2}
Here is the content for the second section.
It is recommended to use only letters, numbers, and hyphens (-) for IDs to ensure URL compatibility. Special characters (like ?, &) should be avoided. Korean characters are also supported.
To publish a new post or deploy changes, you must push a specially formatted Git tag. The deployment is handled automatically by GitHub Actions.
First, make sure all your new content and changes are committed to the main branch.
# Stage all changes
git add .
# Commit the changes
git commit -m "post: foo: boo"
# Push the commit to the main branch
git push origin main
The deployment workflow is triggered by a tag. Create a new tag based on the current date. The format is post/YYYY-MM-DD-XX, where XX is a two-digit number for posts on the same day (e.g., 01, 02).
# Example for the first post on September 23, 2025
git tag post/2025-09-23-01
Push the newly created tag to GitHub. This is the final step that will trigger the automatic build and deployment process.
git push origin post/2025-09-23-01
You can now go to the Actions tab in your GitHub repository to watch the deployment progress. Your site will be live with the new content in a few minutes.
MIT LICENSE © 2025 Cha Haneum