Where Thought, Code, and Craft Converge
Personal blog about programming, technology, and engineering insights. Topics include Rust, DevOps, Linux, and software craftsmanship.
Live Site: noos.blog
- 🎨 Modern Design: Clean and responsive design using the Radion theme
- ⚡ Fast Performance: Static site generation with Zola
- 🌓 Dark/Light Mode: Toggle between light and dark themes
- 🔍 Search Functionality: Built-in search for easy content discovery
- 💬 Comments: Giscus integration for post discussions
- 🎨 AI-Generated Covers: Automatic cover image generation using Replicate
- 📱 Mobile Responsive: Optimized for all device sizes
- 🔗 RSS Feed: Atom feed for subscribers
- 📊 Analytics: Google Analytics (GA4) integration
- Static Site Generator: Zola (written in Rust)
- Theme: Radion
- Deployment: GitHub Pages with GitHub Actions
- Content: Markdown with TOML front matter
- Comments: Giscus
- Cover Generation: Replicate (SDXL)
- Zola (v0.19.2 or later)
# Clone the repository
git clone [email protected]:nooscraft/personal-blog.git
cd personal-blog
# Start the development server
zola serve
# The site will be available at http://127.0.0.1:1111# Build the static site
zola build
# Output will be in the `public/` directorypersonal-blog/
├── content/ # Blog posts and pages
│ ├── posts/ # Blog posts (Markdown)
│ ├── about.md # About page
│ └── _index.md # Homepage content
├── templates/ # Custom templates
├── themes/ # Radion theme
├── static/ # Static assets (images, CSS, JS)
├── scripts/ # Build scripts (cover generation, etc.)
├── config.toml # Site configuration
└── .github/ # GitHub Actions workflows
└── workflows/
└── deploy.yml # Build and deployment workflow
All posts are written in Markdown with TOML front matter. Create a new file in content/posts/:
+++
title = "Your Post Title"
date = 2025-01-28
description = "A brief description for SEO and listings"
[taxonomies]
categories = ["Category"]
tags = ["tag1", "tag2"]
[extra]
cover_image_static = "images/covers/your-slug.png"
+++
Your post content in Markdown...title- Post titledate- Publication date (YYYY-MM-DD)description- Brief description (used for SEO and listings)
taxonomies.categories- Post categoriestaxonomies.tags- Post tagsextra.cover_image_static- Cover image pathdraft = false- Set totrueto hide from listings
The site is automatically deployed to GitHub Pages using GitHub Actions whenever changes are pushed to the main branch.
- Push to
mainbranch - GitHub Actions triggers the build workflow
- Zola builds the static site
- AI covers are generated for posts without covers (if configured)
- Built site is pushed to
gh-pagesbranch - GitHub Pages serves the site
No manual deployment steps needed! Just push to main and GitHub Actions handles everything.
You can manually trigger the workflow with optional parameters:
force_regenerate: Force regeneration of all AI covers (ignores existing)
Key configuration is in config.toml:
- Site Info:
base_url,title,description - Theme:
theme = "radion" - Taxonomies: Categories and tags
- Comments: Giscus configuration
- Analytics: Google Analytics ID
See config.toml for all available options.
Cover images are automatically generated for posts missing a PNG at static/images/covers/{slug}.png. Uses Replicate (SDXL) to generate 1200×630 PNG images.
Script: scripts/generate-ai-covers.mjs
CI Step: Runs during GitHub Actions build
Config: Requires REPLICATE_API_TOKEN secret in GitHub
Comments powered by Giscus (GitHub Discussions). Configured in config.toml:
[extra]
comments = true
giscus_repo = "nooscraft/personal-blog"
giscus_repo_id = "R_kgDOQJ_XNg"
# ... more configAtom feed automatically generated at /atom.xml. Includes all posts with full content.
This is a personal blog, but if you find a bug or have a suggestion, feel free to open an issue!
This project is open source and available under the MIT License.
Oshadha G
- Blog: noos.blog
- GitHub: @nooscraft
- Zola - Static site generator
- Radion Theme - Blog theme
- Giscus - Comments system
- Replicate - AI cover generation