No description
Find a file
Sami Samhuri 6eec569358
Rename spec suite to test and remove RSpec-era traces
Move Minitest files from spec/ to test/ and update bake tasks

to discover and run tests from test/**/*_test.rb.

Update README and AGENTS guidance to reference test/ and tests,

and drop the obsolete spec/examples.txt ignore entry.
2026-02-07 21:15:29 -08:00
.github/workflows Limit CI triggers to PRs and main pushes 2026-02-07 19:55:53 -08:00
.zed Update readme, actually render drafts, and add scripts to manage drafts 2025-06-06 12:28:35 -07:00
bin Trim redundant Bake tasks and improve bootstrap 2026-02-07 17:30:43 -08:00
images new favicon 2014-03-02 15:58:36 -08:00
lib Derive site metadata from posts and config 2026-02-07 21:05:59 -08:00
posts Normalize post Tags frontmatter format 2026-02-07 18:44:31 -08:00
public Remove unused Font Awesome assets and nokogiri 2026-02-07 20:09:45 -08:00
test Rename spec suite to test and remove RSpec-era traces 2026-02-07 21:15:29 -08:00
wayback wat? 2014-04-06 22:14:56 -07:00
.gitignore Rename spec suite to test and remove RSpec-era traces 2026-02-07 21:15:29 -08:00
.ruby-version Ruby 4.0.1, update gems, fix lint warnings 2026-02-07 17:56:14 -08:00
AGENTS.md Rename spec suite to test and remove RSpec-era traces 2026-02-07 21:15:29 -08:00
bake.rb Rename spec suite to test and remove RSpec-era traces 2026-02-07 21:15:29 -08:00
Gemfile Update minitest to 6.0.1 2026-02-07 20:45:48 -08:00
Gemfile.lock Update minitest to 6.0.1 2026-02-07 20:45:48 -08:00
projects.toml Load site and projects from TOML files 2026-02-07 16:20:27 -08:00
Readme.md Rename spec suite to test and remove RSpec-era traces 2026-02-07 21:15:29 -08:00
site.toml Derive site metadata from posts and config 2026-02-07 21:05:59 -08:00

samhuri.net

Source code for samhuri.net, powered by a Ruby static site generator.

Overview

This repository contains the Ruby static-site generator and site content for samhuri.net.

If what you want is an artisanal, hand-crafted, static site generator for your personal blog then this might be a decent starting point. If you want a static site generator for other purposes then this has the bones you need to do that too, by ripping out the bundled plugins for posts and projects and writing your own.

  • Generator core: lib/pressa/ (entrypoint: lib/pressa.rb)
  • Build tasks and utility workflows: bake.rb
  • Tests: test/
  • Config: site.toml and projects.toml
  • Content: posts/ and public/
  • Output: www/

Requirements

  • Ruby (see .ruby-version)
  • Bundler
  • rbenv recommended

Setup

bin/bootstrap

Or manually:

rbenv install -s "$(cat .ruby-version)"
bundle install

Build And Serve

bake debug   # build for http://localhost:8000
bake serve   # serve www/ locally

Configuration

Site metadata and project data are configured with TOML files at the repository root:

  • site.toml: site identity, default scripts/styles, and a plugins list (for example ["posts", "projects"]), plus projects_plugin assets when that plugin is enabled.
  • projects.toml: project listing entries using [[projects]].

Pressa.create_site loads both files from the provided source_path and supports URL overrides for debug, beta, and release builds.

Customizing for your site

If this workflow seems like a good fit, here is the minimum to make it your own:

  • Update site.toml with your site identity (author, email, title, description, url) and any global scripts / styles.
  • Set plugins in site.toml to explicitly enable features ("posts", "projects"). Safe default if omitted is no plugins.
  • Define your projects in projects.toml using [[projects]] entries with name, title, description, and url.
  • Configure project-page-only assets in site.toml under [projects_plugin] (scripts and styles) when using the "projects" plugin.
  • Add custom plugins by implementing Pressa::Plugin in lib/pressa/ and registering them in lib/pressa/config/loader.rb.
  • Adjust rendering and layout in lib/pressa/views/ and the static content in public/ as needed.

Other targets:

bake mudge
bake beta
bake release
bake watch target=debug
bake clean
bake publish_beta
bake publish

Draft Workflow

bake new_draft "Post title"
bake drafts
bake publish_draft public/drafts/post-title.md

Published posts in posts/YYYY/MM/*.md require YAML front matter keys:

  • Title
  • Author
  • Date
  • Timestamp

Tests And Lint

bake test
standardrb

Or via bake:

bake test
bake lint
bake lint_fix

Notes

  • bake watch is Linux-only and requires inotifywait.
  • Deployment uses rsync to host mudge (configured in bake.rb):
    • production: /var/www/samhuri.net/public
    • beta: /var/www/beta.samhuri.net/public