Personal monorepo for active projects, learning, and archived work.
- homelab — Kubernetes homelab (
torvalds): Talos, cdk8s, OpenTofu, ArgoCD app-of-apps - temporal — Temporal worker running the repo's scheduled automation: agent tasks, homelab audits, and PR-opening refresh jobs
- scout-for-lol — Discord bot that tracks friends' League of Legends matches and posts rich post-game reports
- tasknotes — the Facet task app family: shared Rust core, macOS app, Windows app, sync server, and the iOS app
- toolkit — CLI developer tools (
pr,alerts,bugsink,grafana,discord, …) - birmel — AI-driven Discord bot on an explicit agent runtime
- monarch — AI transaction categorization pipeline for Monarch Money
- sjer.red — personal website (Astro)
- astro-opengraph-images and webring — published npm packages
See packages/README.md for the complete package list.
| Directory | Description |
|---|---|
| sandbox/poc/ | Proof-of-concept experiments |
| sandbox/practice/ | Learning projects - books, courses, coding challenges |
| sandbox/archive/ | Archived projects - completed or superseded |
mise install # install pinned toolchain (bun, node, tofu, …)
mise lock --platform linux-x64,macos-arm64 # after editing .mise.toml; CI installs --locked
bun install --frozen-lockfile # one workspace-wide install
bunx turbo run generate # codegen: Prisma clients, etc.
bunx lefthook install # arm git hooks
# Day-to-day: run only the tasks for the package you touched
bunx turbo run typecheck test lint --filter=<pkg>
bunx lefthook run pre-commit # staged-file checks + package typecheck/lint
bun run verify # exhaustive whole-repo gate — what CI runsbun run verify is the CI entry point, not part of the everyday loop; run it
locally only to reproduce a CI failure or when changing the verification
machinery itself.
The three root shard checks (prettier-root, line-endings-root, and
large-files-root) get a semantic Git-input fingerprint from verify.ts before
Turbo calculates their cache keys. This preserves staged content, tracked file
membership, effective line-ending attributes and changed-file selection without
hashing checkout timestamps, refs or logs. Use bun run verify for cached
verification; for an uncached individual check, use bun run <check>-root directly. Direct Turbo
execution without the generated fingerprint fails. Do not set or reuse
CI_ROOT_CHECK_INPUTS_SHA256 manually.
Root dependency overrides include temporary security fixes for upstream exact
pins: Prisma 7's deepmerge-ts (CVE-2026-40345) and mysql2
(GHSA-3f6p-5ww8-9rcr), and Mermaid's Chevrotain dependency on lodash-es
(CVE-2026-4800). Remove each override once its upstream dependency resolves a
patched version without it. The deepmerge 8 migration changes recursive Map
merging; repository Prisma configurations use ordinary objects and are verified
through config loading, schema validation, and client generation.
See AGENTS.md for always-on repository constraints and
packages/README.md for the current package catalog.