Almanack Root https://almnck.com/
  • Python 55.4%
  • JavaScript 28.2%
  • CSS 6.8%
  • Shell 4%
  • HTML 3.5%
  • Other 2.1%
Find a file
Danny O'Brien b35538c70f
All checks were successful
verify / verify (push) Successful in 1m32s
a@almnck.com: rel=me and fediverse:creator in every page's head
rel=me back to https://social.almnck.com/@a gives the profile's
almnck.com link Mastodon's verified tick; fediverse:creator credits
shared Almanack links to @a@almnck.com.
2026-11-01 20:50:59 -08:00
.claude Add a ledger skill 2026-09-12 22:17:05 -07:00
.forgejo/workflows CI: fetch LFS objects in the verify checkout 2026-09-11 21:08:36 -07:00
.pi Add pi agent config pointing to .claude/skills 2026-03-09 23:27:56 -07:00
api Tests: assert each signed literal matches its route 2026-07-26 23:10:49 -07:00
assets a@almnck.com: a static webfinger file naming its actor at social.almnck.com 2026-11-01 20:50:59 -08:00
bin Re-anchor only citations that need it, and accept sub-entry answers 2026-11-01 14:36:03 -08:00
doc Document paragraph ids and the index tools 2026-11-01 14:11:28 -08:00
docs Remove the justif A/B toggle; justif just runs on load 2026-07-25 22:49:33 -07:00
editorial Point index citations at their passages 2026-11-01 17:56:01 -08:00
llc Restore redacted tax filings 2026-09-12 23:26:48 -07:00
src a@almnck.com: rel=me and fediverse:creator in every page's head 2026-11-01 20:50:59 -08:00
.age-recipients Kropotkin article: FQA margin box, woodcut portraits, footnotes 2026-02-16 23:24:09 -08:00
.crates.toml fix: wait for noble crypto libs before initializing identity 2026-01-17 16:29:32 -08:00
.crates2.json fix: wait for noble crypto libs before initializing identity 2026-01-17 16:29:32 -08:00
.gitattributes Encrypt EIN filing 2026-09-12 23:15:45 -07:00
.gitignore Add .superpowers/ to .gitignore 2026-03-20 16:12:48 -07:00
CLAUDE.md Move dallas's configuration out of this repository 2026-10-31 02:22:52 -07:00
CONSENSX.md CONSENSX: add driftkeeping and echo-proof 2026-11-01 14:42:23 -08:00
Makefile Give the indexer a locate tool for paragraph links 2026-11-01 13:38:23 -08:00
pyproject.toml Add layout-invariants test harness with tunable thresholds 2026-03-10 01:53:38 -07:00
README.md Add missing trailing newlines at end of files 2026-07-15 23:10:08 -07:00
uv.lock chore: update uv.lock for skyfield dependency 2026-02-18 15:48:59 -08:00

Directory structure

bin -- small scripts for managing the stuff below
src -- codebase for generating website or conducting process. Anything bigger than a (small) script.
assets -- IP, including incoming articles, images, currently edited work, final products.
web -- the contents of our (static, public) website.
secrets -- passwords, PII, etc. Assume everything else could be made public. If it would be existentially bad for it to leak, encrypt it, and put it here.
doc -- documentation of processes, ideas, memos, etc.
llc -- corporate documents, financial ledger, business running.
.venv -- python environment for this whole kiboodle.

Quick Start

From a fresh clone:

make bootstrap        # Create venv, install deps, run migrations
source bin/a-activate # Activate the environment
make serve            # Start Django dev server on port 1969

Requires uv for dependency management.

Working Environment

To reactivate an existing environment:

. bin/a-activate

Editor-Only Content

Some content in editorial/inbox/ is encrypted so only editors can read it. This is for unpublished drafts and works-in-progress—not for secrets or confidential information (those belong in secrets/).

Why encrypt drafts?

  • Upcoming articles shouldn't be publicly visible before publication
  • Contributors may share work that isn't ready for the world yet
  • The rest of the repo can remain public without leaking unfinished writing

How it works

We use md-age for transparent encryption. Files with this frontmatter are automatically encrypted in git:

---
age-encrypt: yes
age-recipients:
  - git:assets/keys/editors
---
Your markdown content here...

The git:assets/keys/editors reference points to a file listing editor public keys. When you check out the file, it's automatically decrypted (if you have a matching private key). When you commit, it's re-encrypted.

Setup

Run bin/a-setup-key to configure everything automatically:

bin/a-setup-key

This script:

  • Creates an Ed25519 keypair (~/.ssh/almanack-age) compatible with both SSH and age
  • Configures git to use md-age filters for transparent decrypt/encrypt
  • Adds SSH config for the almnck git server alias
  • Adds your public key to assets/keys/editors and commits it

After running, add the printed public key to your Forgejo account at https://code.almnck.com/user/settings/keys to complete git server access.

Adding a new editor

When a new editor runs a-setup-key, their key is added to assets/keys/editors. Then run md-age git rekey to re-encrypt all protected files with the new recipient.

Current editors

See assets/keys/editors for the list of public keys with access.