No description
Find a file
Sami Samhuri 007b1058b6
Migrate from Swift to Ruby (#33)
Replace the Swift site generator with a Ruby and Phlex implementation.
Loads site and projects from TOML, derive site metadata from posts.

Migrate from make to bake and add standardrb and code coverage tasks.

Update CI and docs to match the new workflow, and remove unused
assets/dependencies plus obsolete tooling.
2026-02-07 21:19:03 -08:00
.github/workflows Migrate from Swift to Ruby (#33) 2026-02-07 21:19:03 -08:00
.zed Update readme, actually render drafts, and add scripts to manage drafts 2025-06-06 12:28:35 -07:00
bin Migrate from Swift to Ruby (#33) 2026-02-07 21:19:03 -08:00
images new favicon 2014-03-02 15:58:36 -08:00
lib Migrate from Swift to Ruby (#33) 2026-02-07 21:19:03 -08:00
posts Migrate from Swift to Ruby (#33) 2026-02-07 21:19:03 -08:00
public Migrate from Swift to Ruby (#33) 2026-02-07 21:19:03 -08:00
test Migrate from Swift to Ruby (#33) 2026-02-07 21:19:03 -08:00
wayback wat? 2014-04-06 22:14:56 -07:00
.gitignore Migrate from Swift to Ruby (#33) 2026-02-07 21:19:03 -08:00
.ruby-version Migrate from Swift to Ruby (#33) 2026-02-07 21:19:03 -08:00
AGENTS.md Migrate from Swift to Ruby (#33) 2026-02-07 21:19:03 -08:00
bake.rb Migrate from Swift to Ruby (#33) 2026-02-07 21:19:03 -08:00
Gemfile Migrate from Swift to Ruby (#33) 2026-02-07 21:19:03 -08:00
Gemfile.lock Migrate from Swift to Ruby (#33) 2026-02-07 21:19:03 -08:00
projects.toml Migrate from Swift to Ruby (#33) 2026-02-07 21:19:03 -08:00
Readme.md Migrate from Swift to Ruby (#33) 2026-02-07 21:19:03 -08:00
site.toml Migrate from Swift to Ruby (#33) 2026-02-07 21:19:03 -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