@akapulu/react hooks plus Daily primitives. You build the call surface yourself — video tiles, mic/cam/end controls, transcript, loading and error states, and tool toasts — and end with a post-call review screen (recording + transcript). Use it when you need full control over markup and state wiring.
Two folders:
backend/— Express server that holds your API key and calls Akapulu with@akapulu/serverfrontend/— React app (Vite); no@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.
The backend exposes four routes:
src/App.tsx—AkapuluProvider(points at the backend) plus a singlereviewIdstate that decides which screen shows (live call UI or conversation review).src/CustomConversation.tsx— the custom call surface:useAkapuluSessionfor lifecycle, Daily hooks (useDaily,useVideoTrack,DailyVideo) for video,useAkapuluMediaControlsfor mic/cam,useAkapuluEventsfor tool toasts, andAkapuluBotAudiofor audio.src/ConversationReview.tsx— post-call screen; fetches details and polls until the recording is ready.src/styles.css— the call surface styling.
Related examples
- Prebuilt UI — minimal
AkapuluConversationdemo - Prebuilt UI (styled) — styled prebuilt UI + post-call review

