
Campaign detail
Campaign overview with the lead list and call states.
Does ChatGPT recommend your website, or your competitor?
AI Visibility CheckVoice AI · SaaS Platform
Organisations upload leads. An AI voice agent dials each one, holds the conversation, and records the outcome. Every call leaves an immutable compliance audit trail.
Category
Generative AI / Voice AI · SaaS Platform
Industry
Debt collection, insurance, banking, healthcare
Technology
Next.js 16, React 19, TypeScript, Tailwind v4, NestJS 11, Prisma 5, PostgreSQL, Python, ElevenLabs
Status
In development on staging. Production on GCP, EU only, planned.
Platforms
Web. Operator dashboard and marketing site.


Campaign overview with the lead list and call states.

A single call with transcript and compliance result.

Funnel, intent classification, and time series charts.
100%
EU data residency
3
Compliance gates before every call
30s
Dialer cycle
15 min
JWT token lifetime
2
Isolated databases
Evolution

Version 01 — Composed
The original design used Deepgram for speech to text, Cartesia for text to speech, and a separate telephony provider, each with its own API key and integration surface. It was designed but superseded before completion.

Version 02 — Single vendor
ElevenLabs now runs the full loop end to end behind one Python service: speech to text, an LLM driven conversation, text to speech, and telephony. Chosen to cut latency and integration surface. The call status model was simplified accordingly.
Foundation
Multi tenant single database architecture with org scoping and soft deletes. JWT auth with rotated refresh tokens and MFA.
Calling domain
Lead and call state machines settled. The voice pipeline consolidated on ElevenLabs end to end.
Security and infra
Signed webhooks, error tracking, AdminJS excluded from production. Hosting locked to GCP EU only on GKE with CMEK.
MVP service model
Internal facing managed service for the first year. Astos staff operate orgs, credits, and campaigns for clients.
The Problem
Outbound calling in regulated industries carries strict duties: consent, do not call lists, allowed calling windows, and recording disclosures.
Compliance proof cannot be editable. Astos writes immutable check and audit records that are never updated or deleted.
The dialer automates lead selection and call placement per campaign, honouring schedule windows, attempt limits, and lead state.
GDPR and EU data residency are a locked architecture decision, not an afterthought added later.
The Product

Step 1
Create a campaign with agent persona, script, caller number, schedule window, and retry rules. Upload leads via CSV. Columns become dynamic variables that fill placeholders in the script.

Step 2
The dialer picks due leads every 30 seconds. Before each call it validates consent, do not call status, and the calling window. Blocked calls never dial. Passed calls run live on ElevenLabs.

Step 3
The AI service returns status, duration, transcript, intent, and sentiment via webhooks. Dashboards show funnel, intent, and time series. Customers can receive signed outbound webhooks.
What makes Astos special
Outbound calling with configurable agent persona, script, voice, schedule, and retry rules, across a clear draft to archived lifecycle.
Consent records, do not call suppression, calling windows, and recording disclosures. Immutable audit trail with CSV export.
Async CSV upload, a full lead state machine, do not call protection, and dynamic variables for script personalisation.
A scheduler that selects and places due calls every 30 seconds, honouring schedule, attempt limits, and lead state.
Overview KPIs plus per campaign funnel, intent classification, and time series charts.
Signed outbound webhooks with retries, phone number provisioning with a KYC flow, and a prepaid credits system.
Architecture & Technology
A cross service architecture: a Next.js operator dashboard, a NestJS multi tenant API as the source of truth, and a separate Python AI voice service. Each service runs its own database and integrates over HTTP and webhooks only. EU hosted throughout.
Next.js 16, React 19
TypeScript, Tailwind v4, TanStack Query & Form, Zod, Radix UI, Recharts
NestJS 11
Node.js 22, Prisma 5, JWT & MFA auth, throttling, Helmet
PostgreSQL 15+
Two isolated databases, soft deletes, immutable audit tables
Python + ElevenLabs
Speech to text, LLM, text to speech end to end
Hetzner DE + Railway EU
Production target: GCP GKE, Cloud SQL with CMEK, EU only
Every row carries an org id and every query is scoped to it from the JWT, so there is no cross tenant access. Soft deletes everywhere. Audit and compliance logs are immutable.
Isolation
Org-scoped · soft deletes
No call is placed without passing consent, do not call, and calling window checks. Results are written as immutable records, with recording disclosures per jurisdiction.
Gate
Consent · DNC · window
Staging on Hetzner Falkenstein and Railway Amsterdam. Production locked to GCP EU only with CMEK and private Cloud SQL, with no US failover.
Region
EU only · no US failover
Learnings
01
GDPR and data residency drove the stack from day one. EU only hosting is locked, soft deletes and immutable audit tables are schema level, and the compliance gate runs in the call path itself, not as a reporting afterthought.
02
The original multi vendor design was superseded by ElevenLabs end to end. Fewer integration seams and lower latency. The old adapters remain as a failover seam.
03
Lead status stays empty until a call completes, and contacted is derived rather than stored. This avoids denormalised flags and phantom states.
04
The voice API exposes no per call training opt out, so that requirement is bound contractually in the data processing agreement. Vendor limits shape legal posture.
What this means for your business
At Astos
becomesfor you
becomes for you
For Your Business
The same engine fits any high volume calling team that has to stay inside the rules.
At Astos
becomesfor you
becomes for you
For Your Business
You can show exactly which checks ran on each call, with records that cannot be altered.
At Astos
becomesfor you
becomes for you
For Your Business
Data and processing stay inside the EU by design, not by configuration.
Frequently Asked
On staging, the backend, frontend, and database run on a Hetzner server in Falkenstein, Germany. The AI service and its database run on Railway EU West in Amsterdam. Production is locked to GCP, EU region only, with CMEK encryption and no US failover.
15 minutes. Free. No strings attached.
Not a sales pitch. Promised.

More Projects

AI Chatbot
An AI assistant for customer support – trained on company data, deployed in under 2 weeks.

D2C E-Commerce
Children's drawings become unique 3D figures to paint — powered by a multi-model AI pipeline.

Marketplace
Tattoo marketplace for discovering and booking artists. Google Maps integration, real-time search.