Skip to content

About / Uses

Uses

If you want to know what someone actually uses, read their configs. This is the /uses convention done files-first: every block below is excerpted from a real file in this site's repo — the toolchain, the content pipeline, and the AI setup that runs alongside it.

Node, pinned in the three places that must agree: .nvmrc, the CI matrix, and the Cloudflare Pages build image. Bump one, bump all three. Package manager is pnpm 10.

.nvmrc
22.12

One tool for lint + format — Biome, not ESLint + Prettier. The .astro override exists because Biome 2 false-positives unused imports across the frontmatter/template split; everything else is close to stock.

biome.json
{
"formatter": { "indentStyle": "space", "indentWidth": 2, "lineWidth": 100 },
"linter": {
"rules": {
"recommended": true,
"style": { "useBlockStatements": "error" }
}
},
"overrides": [
{
"includes": ["**/*.astro"],
"linter": {
"rules": {
"correctness": {
"noUnusedImports": "off",
"noUnusedVariables": "off"
}
}
}
}
]
}

The site is a pipeline before it's a page: precompute the concept-graph layout and labs telemetry, typecheck strictly, then build static. The reading and worker CLIs drive the content system from the same terminal.

package.json
{
"scripts": {
"dev": "astro dev",
"build": "pnpm constellation && pnpm labs:aggregate && astro check && astro build",
"check": "biome check --write",
"reading": "node scripts/reading.mjs",
"worker": "node scripts/worker.mjs",
"favicons": "node scripts/build-favicons.mjs"
}
}

The other half of the workflow: a Cloudflare Worker that drafts /now every Monday from active projects and queued phone inputs, commits /reading entries sent from an iOS Shortcut, and compiles /wiki syntheses. Content lands as commits and PRs, not CMS writes.

workers/site-ingest/wrangler.toml
[[routes]]
pattern = "ingest.elliottsencan.com"
zone_name = "elliottsencan.com"
custom_domain = true
# Weekly draft of /now: Mon 17:00 UTC = Mon 10:00 Pacific standard / 09:00
# Pacific daylight. Picks up the week's KV inputs and opens a PR Monday morning PT.
[triggers]
crons = ["0 17 * * 1"]
[[kv_namespaces]]
binding = "NOW_INPUTS"

AI tooling is Claude Code, configured per-repo rather than per-machine: CLAUDE.md carries the architecture notes, and .claude/skills/ teaches the agent the content system's query surfaces. Where AI does and doesn't fit the writing itself is a separate question, answered at /about/process.

.claude/skills/reading/SKILL.md
---
name: reading
description: Query Elliott's reading log — articles, essays, and books
he has saved via the site-ingest pipeline. Use when the user asks what
Elliott has read on a topic, wants recent reading, cross-references
between entries, or is exploring themes across the reading collection.
---

The rest of the answer lives on its own pages: the writing workflow — voice memo, Whisper, Claude, self-edit — is at/about/process; the fonts and hosting are at /about/colophon; and the content pipeline is documented end-to-end at/now/how-this-works.

back to /about