Technology stack

Runtime and tooling

Concern Choice Notes

Node runtime

Node 20

Pinned in .nvmrc

Package manager

pnpm

.npmrc configures the store

Language

TypeScript 5

strict mode; no any in new code

Framework

Next.js 16 (App Router)

Server components by default, "use client" opt-in

UI runtime

React 19

Build

next build

pnpm build:prod runs prisma generate first

Hosting

Vercel

No Vercel crons; scheduled jobs are Inngest cron functions

Frontend

  • Tailwind CSS 4 with @tailwindcss/postcss; tokens defined in app/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 + zodResolver for 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.ts serves them).

  • Redis (redis client) 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 prisma/schema.prisma

Supabase Auth

User identity, sessions, HTTP-only session cookies

Supabase Realtime

Live campaign/broadcast notifications to the dashboard

Supabase Edge Functions

lib/supabase/functions/ — event logger and campaign scheduler helpers

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

Retell AI

Resend

Campaign and transactional email, delivery webhooks, topics

Resend

HubSpot

CRM contacts, engagements, tasks, deal stages

HubSpot

Nooks

Human-dialer call outcomes

Carriers, MessagingApp, Nooks and JustCall

Twilio / Plivo

Carrier numbers imported into Retell via SIP trunks

Carriers, MessagingApp, Nooks and JustCall

MessagingApp

Internal microservice that purchases and releases numbers

Carriers, MessagingApp, Nooks and JustCall

Vercel AI Gateway

Single endpoint fronting OpenAI, Anthropic, xAI and Google models

AI Gateway

Sentry

Error and performance monitoring across client, server and edge

Sentry

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.