Images and media referenced by the private Copper Chronicle section are no longer tracked by git. They live at /assets/copper-chronicle/ on the server (/srv/www/binning.net/assets/) and are managed independently. Updated all image links in src/private/copper-chronicle to use absolute paths rooted at /assets/. Added --filter='protect assets/' to all deploy rsync commands to prevent accidental deletion during deploys. |
||
|---|---|---|
| .forgejo/workflows | ||
| src | ||
| .gitignore | ||
| .gitmodules | ||
| book.toml | ||
| deploy.sh | ||
| README.md | ||
| www.code-workspace | ||
The Bin
My personal website, blog, and portfolio. Available at https://binning.net.
Architecture
This is an mdbook project. Source content lives in src/, and mdbook build produces the static site in book/, which is what gets deployed.
Directory structure
.
├── src/ # mdbook source (markdown content)
│ ├── SUMMARY.md # table of contents / navigation
│ ├── private/ # git submodule — see below
│ └── ...
├── book/ # build output (not tracked)
├── content/ # assets and media not tracked by git — see below
├── book.toml # mdbook configuration
└── .forgejo/workflows/ # CI/CD pipelines
Private content (git submodule)
src/private is a separate private git repository included here as a submodule. This keeps personal content out of the public repo history while still building into the same site. The submodule is hosted at https://forgejo.binning.net/www/private.
When working locally, the submodule URL can be overridden to SSH in .git/config:
git config submodule.src/private.url forgejo@forgejo.binning.net:/www/private.git
git submodule sync
CI uses HTTPS with an OAuth token via a URL rewrite (secrets.WWW_PRIVATE_TOKEN), so .gitmodules should always contain the HTTPS URL.
To update the submodule to the latest commit:
git submodule update --remote src/private
git add src/private
git commit -m "Update private submodule"
Assets
Images and media referenced by content in src/private/ are not tracked by this repo. They live on the server at /srv/www/binning.net/assets/ and are managed separately.
Markdown image links use absolute paths rooted at /assets/:

The deploy rsync uses --filter='protect assets/' to ensure the assets/ directory is never deleted during deployment.
CI/CD
Three Forgejo Actions workflows handle the build and deploy lifecycle:
- ci.yml — builds on every push and uploads the artifact
- cd.yml — manual workflow dispatch to deploy to staging or prod
- nightly.yml — scheduled nightly build and deploy
All workflows run on a self-hosted runner and deploy to /srv/www/binning.net/ via rsync.
History
- 2025-02-28: Restarted in mdbook after yet another data loss event.
- 2024-06-21: Migrated from cgit to Forgejo and from Kubernetes to nginx.
- 2023-10-07: Merged the deployment repository into this one and moved to self-hosting.
- 2022-01-05: Moved hosting to Vultr and switched to Cobalt.
- 2018-12-16: Started with Namecheap, Ruby, Jekyll, and Github Pages.