Guides: Development Setup · Building an Integration · Translations
Torqvoice is source-available under the Elastic License 2.0. Every contributor accepts the CLA once: read it, then write I agree to the CLA in the description of your first pull request. You keep copyright; the CLA lets Torqvoice license your code on the same terms as the rest of the project. Pull requests from contributors who have not agreed are not merged.
Contributing for an employer or a client who owns the work? They sign the Corporate CLA as well and send it to post@torqvoice.com before the pull request.
Dev Container in .devcontainer/ (recommended), or Node.js 22 and PostgreSQL:
docker-compose up -d db
cp .env.example .env # DATABASE_URL, BETTER_AUTH_SECRET, NEXT_PUBLIC_APP_URL
npm install
npx prisma migrate dev
npm run dev # http://localhost:3000
| Path | What |
|---|---|
src/app |
Next.js App Router; API under src/app/api |
src/features/<domain> |
Domain code (quotes, inspections, sms, ...) |
src/components, src/lib |
Shared UI, utilities |
src/integrations/<id> |
One connector per folder: manifest.ts + server.ts, listed in registry.ts |
src/__tests__, e2e/ |
Vitest, Playwright |
prisma/ |
Schema and migrations |
messages/<locale>/ |
Translations; English is the source |
npm run format && npm run lint && npm test must pass; CI runs the same.@/.next-intl. Add English under messages/en/; other locales welcome, not required.src/lib/timezone.ts and src/lib/workshop-datetime.ts. No setHours/getDay on raw Date server-side.npx prisma migrate dev --name <change>, migration folder in the PR. Wrap data migrations in BEGIN/COMMIT.src/__tests__/**, *.test.ts(x)..env.example with a comment.A connector is src/integrations/<id>/{manifest.ts,server.ts}, registered in src/integrations/registry.ts, with a logo in public/images/integrations/. The docs page on torqvoice.com is written by the maintainer; include the text in the PR description. A test fails if a folder is not registered. Copy the closest existing one: quickbooks (accounting), vegvesen or rdw (registry), stripe (payments), twilio-sms (messaging). Agree the category and any new capability in an issue first.
main. One change per PR.Add PartsTech parts ordering connector.