backend/— Express server that holds your API key and calls Akapulu with@akapulu/serverfrontend/— React app (Vite) using@akapulu/reactand@akapulu/react-ui
Prerequisites
- Node.js 20+ and npm
- An Akapulu API key — akapulu.com/api-keys
- A scenario — akapulu.com/scenarios (guide)
Setup
Clone the repo:backend/.env.example to backend/.env.local and add your API key:
backend/server.ts:
record_conversation: true is required for the post-call review to have a recording to show.
Start the backend (localhost:3001) and leave it running:
How it works
The frontend (localhost:5173) calls your backend (localhost:3001), which calls Akapulu with your API key.
This demo does not authenticate users. Anyone who can reach /api/connect can start a conversation on your account. Before production, authenticate users on that route. Pass those headers with config.headers on AkapuluProvider (object or a function called when the request is sent).
The backend exposes four routes:
src/App.tsx— the styledAkapuluConversation(dark styles, custom tool toast, custom transcript rows, connect chime on by default) plus an event logger. A singlereviewIdstate switches to the review screen when the call ends (no router).src/customization.tsx— thedarkStylesobject and the custom tool toast renderer.src/ConversationReview.tsx— post-call screen; fetches details and polls until the recording is ready.
Related examples
- Prebuilt UI — minimal
AkapuluConversationdemo - Customized UI — custom hooks + Daily video UI + post-call review

