Monorepo for @intentface/chat — headless chat UI primitives for React — and the documentation site and playground at intentface.dev.
The package ships behavior, state, and wire formats with no styling of its own: a contenteditable composer with commands and chips, a thread with scroll auto-follow, message part segmentation, tool-call timelines. This is the Base UI model applied to chat — the package owns behavior, you own every class.
| Path | What it is |
|---|---|
packages/chat |
The published package. Namespace exports per primitive, built per-module by tsc. |
content/docs |
Documentation pages (MDX, via fumadocs). |
components/docs |
Docs-site chrome: previews, code blocks, tables. |
components/ai, components/ui |
The playground's own styled layer. App-private — it uses design tokens, Motion, and local icons, and is not published or supported for copying. |
app/(chat) |
The playground chat. |
app/docs |
The documentation site. |
bun install # also generates .source via fumadocs-mdx (postinstall)
bun dev # http://localhost:3000
bun run lint # biome check
bunx tsc --noEmit # typecheck
bun run build # production buildThe playground chat needs .env.local with OPENAI_API_KEY. The docs site renders without it.
Package tests and build:
cd packages/chat
bun test
bun run buildConventions, architecture, and patterns live in AGENTS.md — read it before opening a PR.
Changesets gate releases: run bunx changeset for any user-facing change to packages/chat.
MIT