Serving static websites from small Docker containers built on BusyBox httpd, coming in at around 4MB each. I walk through the Dockerfile setup, cross-platform builds from an M1 Mac to linux/amd64, pushing to the GitHub Container Registry, and deploying via docker-compose behind Nginx Proxy Manager, including DNS and SSL configuration...
I explain my move from Docker Hub to GitHub’s Container Registry for container images running on my VPSs, motivated by Docker Hub’s single-private-image free tier and the eventual possibility of CI/CD rebuilds. It walks through generating a Personal Access Token, logging in to ghcr.io, and pushing and pulling images with the registry included in the container name...
I walk through deploying a Vite/React app on GitHub Pages using the branch-based setup. I cover pointing Pages at a /docs directory, setting Vite’s base path to the repo name, building and copying the output to /docs, and an optional vite.config change to build directly into it...
A guide to pushing a single git repository to two remotes, prompted by my running a private Gogs instance alongside GitHub. I cover naming remotes meaningfully rather than relying on the convention of origin, pushing to each remote explicitly, and using the -u flag to set a default remote, which becomes the source of truth for both pushing and pulling. My typical setup treats Gogs as the source of truth, with manual pushes to GitHub when code needs to be shared...
A step-by-step walkthrough of my routine for starting new Node/Express SSR web projects with HTMX, covering directory setup, npm and git initialization, GitHub repo creation, and my ongoing dilemma about committing htmx.min.js versus using a CDN. In the second half, I describe an Express starter skeleton with EJS views and partials, basic routing with 404 handling, and some starter CSS...
While setting up a small cron-driven script to cache a weather API’s JSON output for serving over Nginx, I run into trouble getting git to preserve the script’s executable bit between macOS and an Ubuntu VPS. After git update-index –chmod=+x fails and toggling the filemode config setting only seems to work by accident, the root cause turns out to be a forgotten fact: macOS does support Unix file permissions, so a plain chmod before committing solves it...
A reflective look at my GitHub commit graph, noting that Tuesday nights are unexpectedly my most productive coding time and expressing my appreciation for git and GitHub’s free tier. My first commits date to July 10, the same month I started blogging daily, a streak now at 154 days. I’m on day 64 of 100 Days of SwiftUI, admitting the hour-per-day pace hasn’t held, but I’m pleased with my overall commitment...
I explain how to fix Xcode failing to push to GitHub after GitHub stopped accepting RSA keys that use SHA-1. My solution, based on an Apple Developer forum answer, is to switch to a new ECDSA SSH key — with the one step the forum post missed being a restart of Xcode to make it take effect...
I share a quick tip for downloading an individual file from GitHub without cloning the repository: use the Raw button to get a direct link to the file, then save it via the browser as you would any other web resource...
While working through the 100 Days of SwiftUI, I needed to download a single directory of flag images from a GitHub repo, but found that neither git nor GitHub’s web interface offers a simple way to do that. In this post, I cover a workaround using GitHub’s web-based VSCode: change github.com to github.dev in the repo URL, then right-click the folder to download it...
A beginner-oriented cheat sheet I put together for using git from the command line on macOS, aimed at people working with Xcode and GitHub. I walk through setting up a new repository and pushing it to GitHub, then cover basic commands for status, add, commit, push, and tagging, along with .gitignore notes and cloning from a tag. I include a short list of git learning resources at the end...
GitHub’s web interface has no way to create an empty folder directly, but adding a file with a slash in its path (such as new-folder/README.md) creates the folder automatically, after which files can be dragged in as normal. The tip comes from a Zack West article on Alpharithms, which I link for a fuller explanation with pictures...
I set up Git and GitHub for the first time by following a video tutorial, working on a Mac. I cover the basic workflow of cloning, staging, committing, and pushing, along with minor troubleshooting around the default branch name, unset git config, and a first encounter with Vim. Generating an SSH key was the only real complexity...