CLAUDE.md@.claude/apps/dev-tools-help-docs · git:20261006.8052ed0 · 2026-10-06 · sha256 a62607781da0b88f
CLAUDE.md@.claude/apps/dev-tools-help-docs git:20261006.8052ed0A
Immutable. This exact content never changes and is served at /api/v1/blob/a62607781da0b88f.
# CLAUDE.md — `apps/dev-tools-help-docs` The documentation site (1computer.online): Next.js + Fumadocs, with AI chat, full-text search, and an auto-generated API reference built from TypeScript types and OpenAPI specs. ## The one rule everyone trips on **This is the only Biome workspace in the repo.** `check`, `lint`, `format` and `check:write` here are Biome; nothing outside `apps/dev-tools-help-docs` is formatted by it and there is no repo-wide formatter. Never run Biome over the rest of the monorepo — it will rewrite files that nobody formats that way. It also carries its own `commitlint.config.ts`, `cspell` config and `bunfig.toml`, all scoped to this app. ## Content comes from two places - `content/docs/` — pages written here. - Package READMEs, pulled in by `bun run docs:sync` (root) or `bun ./scripts/sync-readme-docs.ts`. **Synced pages are generated** — edit the package README, then re-sync. Editing the synced copy is lost on the next run. Every `packages/*` folder with a README is synced; add new packages to the `PACKAGES` list in the script for a proper title / icon / category, or they land under "Other" with the `Package` icon. `.github/workflows/docs-sync.yml` runs the sync on every push to `master` that touches a README and commits the result. Hand-written pages in the synced folders (no generated banner) are left alone. Remember the package README's own header is itself generated by `bun run readmes`, so the chain is: `package.json` → `.github/scripts/sync-package-readmes.mjs` → `README.md` → `docs:sync` → this site. ## Build is staged ```bash bun run dev bun run build # bun --bun next build bun run build:full # build:pre → next build → build:post bun run typecheck # runs typegen (fumadocs-mdx + next typegen) first ``` `postinstall` runs `fumadocs-mdx`. A missing content type or a "cannot find `.source`" error after a fresh clone almost always means that did not run — re-run `bun install` or `bunx fumadocs-mdx` rather than hand-writing the type. ## Renders `code-tree-graph` The dependency graphs, file trees and type tables on this site come from `packages/code-tree-graph`. A change to that package's props breaks the docs build, not its own tests. ## Sections and search `content/docs/meta.json` lists three root folders, each a separate tab with its own sidebar: `(index)` (Docs), `api-reference` and `changelog`. A new top-level section needs `"root": true` in its `meta.json` and an entry in the root `meta.json`. Search results are tagged by that first path segment, so update `src/lib/constants/tags.ts` and `category.ts` too. API Reference pages render `<APIPage document="…" />`; the schema IDs are registered in `src/lib/openapi/index.ts` (currently `verify-phone-sms`, read straight from the package's `openapi.json`). The search bar lives in the sidebar, not the navbar, using `src/components/fumadocs/layout/sidebar-search.tsx` — a copy of the same file in `starter-templates/template-fumadocs`. Keep the two in sync. ## Homepage package catalog The homepage (`src/app/(home)/`) is driven by `packages-data.ts`: each entry has a short `description` (cards, search), a `longDescription` (hover text in the `HeroParallax` showcase), an `href` and an `image`. The images in `public/packages/*.svg` are **generated** — after changing a package's name, description, icon or commands, run `bun ./scripts/generate-package-covers.tsx` and commit the output.