CONTRIBUTING.md
1,667 bytes
| 1 | # VoiceTask |
|---|---|
| 2 | |
| 3 | Voice-first Socratic spec interviewer. You talk about what you want to build, an AI interviewer asks one targeted question at a time, and the tool emits a coding-agent-ready spec pack where every requirement traces back to what you actually said. |
| 4 | |
| 5 | All product and implementation decisions live in `spec/`. Read `spec/SPEC.md`, `spec/PLAN.md`, and `spec/TASKS.md` before writing any code. Do not invent requirements that are not in the spec. |
| 6 | |
| 7 | ## Commands |
| 8 | |
| 9 | ``` |
| 10 | npm install # install dependencies |
| 11 | npm run dev # start server + client in dev mode |
| 12 | npm run typecheck # tsc --noEmit for server, client, shared |
| 13 | npm test # vitest run (all tests use mock providers, no network) |
| 14 | npm run build # production build of client + server |
| 15 | ``` |
| 16 | |
| 17 | ## Conventions |
| 18 | |
| 19 | - TypeScript strict mode everywhere. No `any` unless interfacing with an untyped external API, and then wrap it immediately in a typed boundary. |
| 20 | - Layout: `server/` (Fastify), `client/` (Vite + React), `shared/` (types used by both). Shared types are the single source of truth for API payloads. |
| 21 | - Tests live next to the code they test (`foo.ts` and `foo.test.ts`). |
| 22 | - All external providers (STT, LLM) go through the interfaces in `server/providers/`. Application code never imports `@anthropic-ai/sdk` or calls `fetch` to a provider directly. |
| 23 | - Tests and CI run with `MOCK_PROVIDERS=1`. Never write a test that needs a real API key or network access. |
| 24 | - API keys come from environment variables only. Never write a key to disk, to logs, or to a session file. |
| 25 | - Comments: only where the code cannot explain itself. No decorative comments, no docstrings on trivial functions. |
| 26 | |