Technology stack
Runtime and tooling
| Concern | Choice | Notes |
|---|---|---|
Node runtime |
Node 20 |
Pinned in |
Package manager |
pnpm |
|
Language |
TypeScript 5 |
|
Framework |
Next.js 16 (App Router) |
Server components by default, |
UI runtime |
React 19 |
|
Build |
|
|
Hosting |
Vercel |
No Vercel crons; scheduled jobs are Inngest cron functions |
Frontend
-
Tailwind CSS 4 with
@tailwindcss/postcss; tokens defined inapp/globals.css. -
shadcn/ui on top of Radix primitives —
components/ui/is generated and must not be edited directly (extend by composition). -
TanStack React Query v5 for all server state; there is no Redux/Zustand layer.
-
React Hook Form +
zodResolverfor every form. -
Recharts for reporting charts, Mermaid for in-app diagrams, Lexical for the rich-text email editor, xlsx for spreadsheet import/export.
-
next-themes for light/dark switching.
Backend
-
Next.js route handlers under
app/api/are the only HTTP surface. -
Prisma 6 is the sole database client, generated into
prisma/generated. -
Zod 3 validates every inbound payload and every outbound response consumed by a hook.
-
Inngest provides durable, retryable workflows (
app/api/inngest/route.tsserves them). -
Redis (
redisclient) holds the in-flight call counter used to throttle broadcasts. -
AWS SQS carries CRM and email-categorisation messages to downstream services.
Data
| Store | Role |
|---|---|
Supabase PostgreSQL |
System of record for every model in |
Supabase Auth |
User identity, sessions, HTTP-only session cookies |
Supabase Realtime |
Live campaign/broadcast notifications to the dashboard |
Supabase Edge Functions |
|
Redis |
Ephemeral counters (in-flight calls per campaign) |
Google BigQuery |
Read-only mirror of CRM/engagement data, queried by sequence data gates |
Third-party services
| Service | Used for | Reference |
|---|---|---|
Retell AI |
AI voice calls, SMS chats, agent configuration |
|
Resend |
Campaign and transactional email, delivery webhooks, topics |
|
HubSpot |
CRM contacts, engagements, tasks, deal stages |
|
Nooks |
Human-dialer call outcomes |
|
Twilio / Plivo |
Carrier numbers imported into Retell via SIP trunks |
|
MessagingApp |
Internal microservice that purchases and releases numbers |
|
Vercel AI Gateway |
Single endpoint fronting OpenAI, Anthropic, xAI and Google models |
|
Sentry |
Error and performance monitoring across client, server and edge |
Documentation tooling
The in-app documentation site at /docs is built with Fumadocs (fumadocs-mdx,
fumadocs-ui) from the MDX files in docs/. This Antora component lives alongside it under
docs/modules/ and is consumed by an external Antora playbook — see
About this documentation.