build-fountain-applisted
Install: claude install-skill BinaryBourbon/fountain
# Build an app on Fountain
Fountain's own UI is a console. Every product surface that talks to a person
is a separate app on `/api`, on its own origin, with no privileged access.
Three of them are the reference implementations — clone their shape rather
than inventing one:
| Example | Shape | Study it for |
|---|---|---|
| [fountain-team](https://github.com/jhgaylor/fountain-team) | static SPA, raw `fetch` (predates the SDK) | roster + thread + queue, team stream, PKCE sign-in (`src/lib/oauth.ts`) |
| [fountain-workbench](https://github.com/BinaryBourbon/fountain-workbench) | SPA **plus a Bun server** (`server/`) | when an app needs its own backend: shared projects, a member never holds the owner's key, project-scoped proxy of `/api`, an MCP surface for the agent |
| [fountain-demos](https://github.com/jhgaylor/fountain-demos), an index of [briefing-room](https://github.com/jhgaylor/briefing-room), [table-talk](https://github.com/jhgaylor/table-talk), [repo-sage](https://github.com/jhgaylor/repo-sage), [mission-control](https://github.com/jhgaylor/mission-control), [watchtower](https://github.com/jhgaylor/watchtower), [arena](https://github.com/jhgaylor/arena), [mend](https://github.com/jhgaylor/mend), [rounds](https://github.com/jhgaylor/rounds) | one static app per repo, all cloned from [dns-desk](https://github.com/jhgaylor/dns-desk); Mend and Rounds add a Bun `server/` because a GitHub App private key cannot live in a browser | a container recipe (Dockerfile + nginx + b