GitHub Pages is a free static hosting service built into every GitHub repository. Combined with a custom domain and a handful of DNS records, you can serve a production site with HTTPS for nothing beyond the cost of the domain name.
This note covers the full path: repo setup, Pages configuration, DNS records, and TLS enforcement.
Prerequisites # A GitHub account and a repository containing your static site output (HTML/CSS/JS) A registered domain name managed at any DNS registrar (examples use Porkbun) gh CLI installed and authenticated (gh auth login) 1. Prepare the repository # Your repo needs to end up with built HTML at a known location. Two options:
Overview # The Hugo dev server worked on localhost but was unreachable on the Mac’s LAN IP (<mac-ip>), even with the correct --bind flag. Root cause: the macOS application firewall identifies apps by code signature, and Homebrew’s hugo binary is shipped completely unsigned — so even an explicit firewall allow rule could not attach to it. Fix: ad-hoc sign the binary.
Overview # A private Docker registry running on the Synology NAS at <nas-ip>, used by the Jenkins CI/CD pipeline to store built images and available for pulling to any LAN machine. Includes the joxit/docker-registry-ui browse interface.
Compose file lives at /volume1/docker/registry/docker-compose.yml on the NAS.
Why This Is Useful # For CI/CD: Jenkins builds The Moment, pushes the image here, then pulls it on the ARM64 production node (Odroid N2+) to deploy. No GitHub or internet dependency in the build/deploy loop — the pipeline runs entirely on the LAN.
Overview # Investigation into whether the Prusa Buddy3D Camera can be used to capture print-end snapshots locally via PrusaLink for The Moment print history. Triggered by implementing a camera snapshot feature that correctly handled the API response but produced no images on a real print.
Overview # Notes for setting up Jenkins build agents across all three lab nodes (Oroid N2+/arm64, Beelink/Windows, MiniMac/macOS). Covers Go installation per platform, MinGW gcc on Windows for CGO builds, and running the Jenkins agent as a persistent Windows service via NSSM.
Installing Go # Windows — beelink # winget install -e --id GoLang.Go Open a new cmd prompt after install (PATH won’t update in the existing window).
Overview # This note documents the process for initializing and writing NFC tags for use with The Moment and Prusa Core One filament tracking. It covers the correct tag types, apps required, and the initialization workaround needed for blank NFC-V stickers on iOS.
Tag Types # Two tag types have been confirmed working:
docker-compose.dev.yml — added build: context: . so Compose can rebuild the image itself with --build, no separate docker build needed.
.vscode/tasks.json — 5 new tasks added:
Task What it does Docker: Build Dev Image Standalone build + prune dangling Docker: Start Dev Stack Start stack using existing local image Docker: Build and Restart Dev Stack Primary task — rebuild, restart, prune Docker: Stop Dev Stack Bring the whole dev stack down Docker: Logs Stream the-moment logs in a dedicated panel Daily driver: Terminal → Run Task → Docker: Build and Restart Dev Stack. This is the replacement for your manual docker build command — it rebuilds the image, prunes the dangling old one, and restarts the container in one step.
Option A — Squash all commits into one before pushing # git checkout --orphan release git add -A git commit -m "Beta_1.0.1" git branch -D main git branch -m main git push origin main --force This replaces the entire history with a single clean commit.
Option B — GitHub Releases (tag-based, history stays) # If the goal is just to publish a versioned release ZIP for users to download (not hide commits), use GitHub Releases:
User scope # ~/.claude/settings.json (user scope — applies to all projects)
<project_folder>/.claude/settings.local.json (user scope — applies only to the project_folder)
Why it’s there # It’s an explicit override you (or /model) set at some point — it is not a default. Without that line, Claude Code picks a model based on your plan/account. With it, every session in every project starts on Opus.
Use a Shell function (recommended — zero dependencies) # Add this to ~/.zshrc:
labnote() { local slug="${1:-}" if [[ -z "$slug" ]]; then read "slug?Lab note slug: " fi slug="${slug// /_}" # spaces → underscores (cd ~/code/thetasigma-site && hugo new "lab-notes/${slug}.md" && code "content/lab-notes/${slug}.md") } Then labnote thetasigma_labs_setup or just labnote and it prompts you. Opens it in VSCode immediately. This is almost certainly what you want — it’s a 30-second setup and you never leave the terminal.