Loop AI turns customer feedback into voice conversations run by an AI interviewer, and turns those conversations into insight you can actually act on.
This is a Le Wagon coding bootcamp final project.
Getting real feedback from users is slow and expensive: scheduling calls, taking notes, re-reading transcripts, and trying to spot patterns across dozens of conversations. Loop AI automates the whole cycle:
- You describe what you want to learn and write a handful of questions — a Loop.
- Loop AI provisions a voice AI agent for it and gives you a shareable link.
- Respondents click the link and have a real spoken conversation with the agent — no scheduling, no forms.
- When the call ends, the transcript comes back automatically, gets scored for sentiment, and is queued for analysis.
- An AI pipeline reads every transcript in the loop and rolls them up into themes, feature requests, and a summary — each backed by a verbatim quote and a link to the interview it came from.
- Loops (
Loop) belong to anOrganization(a workspace — every account gets one, and can invite teammates into it). Each loop has ordered questions and a goal description. - Activating a loop provisions a real conversational voice agent via the ElevenLabs Conversational AI API, built from the loop's questions and goal.
- Respondents talk to that agent through the browser (no app, no login) at a shareable
/i/:sluglink. - When a conversation ends, ElevenLabs POSTs the finished transcript back to Loop AI via a signed webhook. It's recorded as a
Feedback, along with a per-conversation sentiment score and the AI's stated reasoning for it. - A two-stage OpenAI pipeline then turns raw transcripts into structured insight:
- Stage 1 extracts themes and feature requests (with verbatim quotes) from each individual transcript.
- Stage 2 clusters those extractions across every response in a loop into one loop-level
Insight— an overall sentiment, a narrative summary, and quote-backed themes and feature requests you can browse and click through to the source interview.
- An Analyze dashboard shows all of this: response volume over time, sentiment, and the generated insight, per loop or across your whole organization.
- Ruby on Rails 8.1 / PostgreSQL
- Solid Queue / Solid Cache / Solid Cable for background jobs, caching, and websockets — all database-backed, no Redis
- ElevenLabs Conversational AI for the voice-interview agent and its post-call webhook
- OpenAI (structured outputs) for the two-stage feedback-analysis pipeline
- Devise for authentication (with email confirmation)
- Turbo + Stimulus + importmap-rails on the frontend (no Node build step), styled with Bootstrap 5.3 + custom SCSS
- Deployed on Heroku, file uploads on S3, transactional email via Postmark
bin/setup # install dependencies, prepare the database
bin/dev # start the dev serverYou'll need a .env file with at least:
ELEVENLABS_API_KEY=
ELEVENLABS_WEBHOOK_SECRET=
OPENAI_API_KEY=
(POSTMARK_API_TOKEN and AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY are only required in production, for email and file uploads respectively.)
Since ElevenLabs can't reach localhost, testing the full respondent → webhook round trip locally requires tunneling your dev server (e.g. with ngrok) — see CLAUDE.md for the details.
bin/rails test # unit + integration tests
bin/rails test:system # browser-driven system tests
bin/ci # the full CI pipeline: lint, security audit, testsSee CLAUDE.md for an in-depth architecture guide, and docs/ for design specs behind individual features.