# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## What This Is A Homebrew tap for custom fonts. Users `brew tap` and then `brew install font-`. The repo contains font assets in `font_files/` and generated Ruby formulae in `Formula/`. ## Commands ```bash # Add or update a font (cleanup + formula generation + tests + brew audit) uv run add-font uv run add-font --no-test --no-audit # Run tests uv run pytest tests/ -v --tb=short # Run a single test file uv run pytest tests/test_font_structure.py -v # Run tests for a specific font uv run pytest tests/ -v -k "font-acrylic-hand" # Regenerate all formulae (without the full add-font flow) python3 .fontfoldercleanup/create_homebrew_formula.py # Reorganize font folders only python3 .fontfoldercleanup/cleanup_font_folders.py --path font_files ``` ## Architecture - **`font_files/font-/`** — Each font has exactly 4 subdirs: `ttf/`, `otf/`, `web/`, `other_files/`. No other top-level files allowed. - **`Formula/font-.rb`** — Generated Ruby formulae. **Never edit by hand.** Edits go in `.fontfoldercleanup/create_homebrew_formula.py`. - **`tap_cli/main.py`** — The `add-font` CLI entry point. Copies font to `font_files/`, runs cleanup script, runs formula generator, then runs tests and `brew audit`. - **`.fontfoldercleanup/cleanup_font_folders.py`** — Sorts loose font files into `ttf/`, `otf/`, `web/`, `other_files/` subdirs. - **`.fontfoldercleanup/create_homebrew_formula.py`** — Scans `font_files/font-*` and writes one `.rb` per font. Contains `HomebrewFormulaGenerator` class and `formula_name_to_class()` for Ruby PascalCase conversion. - **`tests/`** — Parametrized pytest suite. Tests validate: folder structure, formula existence, formula content (paths, class name), no orphan formulae, no duplicates. - **`To Sort/`** — Staging area for new downloads not yet processed. ## Formula Naming Convention `font-` → Ruby class `Font`. Split on hyphens/underscores, capitalize each part: - `font-acrylic-hand` → `FontAcrylicHand` - `font-graham_hand` → `FontGrahamHand` ## Key Constraints - Python 3, standard library only (pathlib, shutil, argparse, re). pytest is the sole dependency. - Formulae download from `http://clancy.genet-godzilla.ts.net:8085/Fonts/homebrew-fonts/archive/main.tar.gz` and expect the archive to unpack as `homebrew-fonts-main/`. - CI runs `uv run pytest` on push/PR to main, plus `brew audit` on macOS (non-blocking). - `PROJECT.md` is the canonical project description. When updating project rules, update `PROJECT.md` first, then sync `.cursorrules`, `.github/copilot-instructions.md`, and `.claude/skills/project-context/SKILL.md`.