Project Info
Inspiration
I was on my high school's debate team for three years, and during that time I fell in love with debate. I love the complexity that debate can bring, but debate can also be hard to follow, both for non-debaters watching from the outside and for experienced debaters in high-level rounds. I wanted to build a tool that could quickly break down a debate into a visual format so people could understand it more clearly after it happened. The content and flow of a debate are often forgotten if no one writes them down in the moment, but with a recording, Deliberate can turn that debate into a fully fledged flow map.
What it does
Deliberate turns a debate into a map you can actually read. Upload an MP4 or audio file, point it at a YouTube video, browse to an article or PDF, or just talk, and Deliberate converts the argument into an Issue-Based Information System map. The map shows the central question, the competing positions, and the pros, cons, and evidence connected to each one. Every node is grounded in its source, whether that is a transcript quote, a timestamp, or a captured page, so you can trace any claim back to who said it and where it came from. Deliberate supports four modes: Upload mode turns an MP4 or audio file into a diarized, timestamped transcript and then a map. Browse mode turns a URL or PDF into a captured source with a screenshot and replay trail, then a map. Observe mode listens to a live debate through your mic and grows the map in real time. Argue mode lets you debate a spoken AI opponent that pushes back out loud, and the whole exchange becomes a map. The result is a living argument map that makes the shape of a disagreement legible at a glance. How I built it We built Deliberate with Next.js and React Flow for the app and editable 2D canvas, including pan, zoom, drag-to-connect, and IBIS node grammar. Deepgram powers the voice layer. We use Nova-3 for diarized, timestamped transcription across prerecorded and live audio, and Aura TTS for the AI opponent's spoken rebuttals. Anthropic Claude powers the reasoning layer. Claude Haiku extracts the IBIS graph through structured outputs, and Claude Sonnet acts as a judge that scores each map. A deterministic validation-and-repair layer enforces the IBIS grammar so every map is structurally correct by construction. Browserbase handles source capture. A recorded cloud browser pulls page text and PDF bytes, along with a screenshot and replayable session, so the map has an evidence and trust trail. Arize gives us observability. OpenTelemetry traces every pipeline run, including tokens, cost, latency, node counts, and evaluator results. An online evaluator automatically grades each map for IBIS correctness. Challenges I ran into One of the hardest parts was making an LLM obey strict IBIS structure. Models often want to attach a con directly to the central question instead of attaching it to a position. We built a deterministic repair pass that re-links every pro and con to its correct parent, giving us strict IBIS by construction instead of hoping the model gets it right. Another challenge was making the product feel useful instead of generic. Early versions looked and felt like a standard AI demo, but I had a specific vision for a clean, visual workspace that felt more like a debate flow tool than a chatbot. It took a lot of iteration to get the interface to that state. We also had to account for messy real-world inputs: unclear audio, multiple speakers, imperfect transcripts, long videos, PDFs, web pages, and live conversations. The app needed fallbacks, validation, and visible evidence links so users could trust but verify the generated map. Accomplishments that I'm proud of Built a clean UI and UX experience around visual debate mapping. Shipped four working input modes: upload, browse, observe, and argue. Created a live spoken debate mode where an AI opponent talks back out loud. Grounded every node in evidence, from claim to quote to timestamp or source. Added full observability so every run is traced and automatically evaluated. Enforced valid IBIS maps by construction rather than best effort. Shipped the project to production at usedeliberate.com with multiple sponsor technologies integrated. What I learned I learned that building a large project with AI still requires a lot of taste, direction, and iteration. The first versions had a very generic AI-generated feel, but I had a clear vision for how the app should look and feel, so I kept steering it toward that. I also learned that transcription alone is not the product. The valuable part is turning speech into something people can inspect, edit, and reason about. A debate map is only useful if every generated claim stays connected to the original evidence. Finally, I learned that IBIS is a strong format for AI-assisted debate mapping because it is structured enough to validate but lightweight enough for people to understand and edit.
What's next
Next, I want to turn Deliberate from a single-session demo into a real workspace. The biggest step is adding an account system with Supabase so users can sign in, keep a library of their maps, and return to debates they have already analyzed. I also want people to be able to save and share maps with others. A user should be able to generate a map from a debate, clean it up, and send a link to a teammate, classmate, or community so everyone can inspect the same claims, evidence, timestamps, and objections. Longer term, shared maps could support permissions, comments, collaborative editing, and public read-only views for making complex disagreements easier to understand together.
Deliberate
Deliberate turns debates into editable, evidence-linked argument maps.
It takes spoken debate, uploaded media, pasted transcripts, or captured web sources and converts them into an Issue-Based Information System (IBIS) map. The goal is not to declare a winner. The goal is to make the shape of a disagreement clear: the central question, the competing positions, the reasons for and against each position, and the evidence behind each claim.
Live app: https://usedeliberate.com
Repository: https://github.com/matthewcabrera/deliberate
Why It Exists
Debates move quickly. Even experienced debaters can lose track of how each argument relates to the others, and non-debaters often hear a fast exchange without seeing the underlying structure.
Deliberate was built to preserve that structure. With a recording, transcript, or source URL, it creates a visual flow map that can be inspected after the debate is over. Each generated claim stays connected to its source evidence, so the map is auditable instead of being an opaque AI summary.
What It Does
Deliberate converts messy argument sources into a clean IBIS map:
- Issues: central questions or decision points
- Positions: possible answers or proposals
- Pros: reasons supporting a position
- Cons: objections or risks against a position
- Evidence: source-backed references, quotes, timestamps, or page captures
- Decisions and notes: useful context or outcomes when present
Every node is grounded in the original source where possible:
- speaker
- transcript quote
- timestamp
- source URL or captured page
- confidence and review state
Input Modes
Upload
Upload an audio or video file. Deliberate sends the media to Deepgram for diarized, timestamped transcription, then converts the transcript into an editable IBIS map.
Browse
Paste a URL or PDF. Deliberate uses Browserbase to capture the source in a recorded cloud browser session, extracts readable text, stores a screenshot/replay trail, and maps the argument.
Observe
Use the microphone to observe a live debate. Deliberate listens through the mic and grows the argument map as the debate unfolds.
Argue
Debate a spoken AI opponent. The AI pushes back out loud, and the full exchange becomes a map you can inspect afterward.
Transcript Paste
Paste a written transcript directly. This is the fastest path for testing the IBIS extraction pipeline without media ingestion.
How It Works
source input
-> transcript or text capture
-> normalized utterances
-> Claude IBIS extraction
-> deterministic validation and repair
-> editable React Flow canvas
-> evidence-linked transcript/source inspection
-> optional Arize tracing and evaluation
The map is not just a drawing. It is a structured graph with typed nodes and typed edges. A repair layer enforces core IBIS rules, such as attaching pros and cons to positions rather than directly to the central issue.
Tech Stack
| Area | Technology |
|---|---|
| App framework | Next.js, React, TypeScript |
| Canvas | React Flow / @xyflow/react |
| Voice transcription | Deepgram Nova |
| Text-to-speech | Deepgram Aura |
| Reasoning and extraction | Anthropic Claude |
| Web source capture | Browserbase, Playwright Core |
| PDF text extraction | pdf-parse |
| Observability | OpenTelemetry, Arize |
| Deployment | Vercel |
Architecture
src/app/page.tsx
Main client app, menu flow, upload/browse/observe/argue screens
src/components/Workspace.tsx
Editable IBIS canvas, transcript dock, source/video panel, node editing
src/components/Observe.tsx
Live microphone observation mode
src/components/Argue.tsx
Spoken debate mode against an AI opponent
src/app/api/transcribe/route.ts
Upload and YouTube transcription endpoint
src/app/api/extract-ibis/route.ts
Transcript to IBIS graph endpoint
src/app/api/ingest-url/route.ts
Browserbase URL/PDF capture endpoint
src/app/api/tts/route.ts
Text-to-speech endpoint for spoken replies
src/lib/ibis-extract.ts
Claude prompt, schema, graph extraction, validation, and repair
src/lib/ibis-eval.ts
Deterministic and judge-based map quality evaluation
src/lib/deepgram.ts
Deepgram transcription normalization
src/lib/browserbase.ts
Source capture, PDF parsing, screenshot/replay metadata
src/lib/contracts.ts
Shared source, transcript, speaker, and IBIS graph contracts
src/lib/trace.ts
OpenTelemetry span helpers and Arize-compatible metadata
Environment Variables
Copy .env.example to .env.local for local development:
cp .env.example .env.local
Required for core AI functionality:
| Variable | Purpose |
|---|---|
DEEPGRAM_API_KEY | Speech transcription and TTS |
ANTHROPIC_API_KEY | IBIS graph extraction and argue mode |
Optional:
| Variable | Purpose |
|---|---|
ANTHROPIC_MODEL | Override the extraction model |
ANTHROPIC_ARGUE_MODEL | Override the spoken opponent model |
DEEPGRAM_TTS_MODEL | Override the Deepgram voice |
ARIZE_API_KEY | Enable tracing export to Arize |
ARIZE_SPACE_ID | Arize space for tracing |
ARIZE_PROJECT_NAME | Arize project name |
ARIZE_COLLECTOR_ENDPOINT | OTLP endpoint, defaults to Arize |
BROWSERBASE_API_KEY | Enable browse mode source capture |
BROWSERBASE_PROJECT_ID | Browserbase project for sessions |
BROWSERBASE_PROXIES | Optional paid proxy support for blocked sites |
Local Development
Install dependencies:
npm install
Start the dev server:
npm run dev
Open:
http://localhost:3000
Build for production:
npm run build
Run lint:
npm run lint
Run the IBIS evaluation script:
npm run eval
Deployment
The project is deployed on Vercel:
https://usedeliberate.com
Production needs the same environment variables configured in the Vercel project settings. Without the API keys, the static UI can load, but transcription, extraction, browse capture, TTS, and tracing features will not fully work.
Current Status
Implemented:
- production Next.js app
- branded Deliberate interface
- upload flow for media files
- pasted transcript flow
- URL/PDF browse capture through Browserbase
- Deepgram transcription
- Claude IBIS extraction
- deterministic graph validation and repair
- editable React Flow workspace
- source evidence display
- live observe mode
- spoken argue mode
- Arize/OpenTelemetry tracing hooks
- Vercel deployment and custom domain
Known limits:
- YouTube ingestion can be unreliable on cloud hosts because YouTube may block serverless/cloud requests.
- Account persistence is not implemented yet.
- Maps are currently session-oriented rather than stored in a user library.
- Shared map links and collaboration are planned but not implemented yet.
Roadmap
Next, Deliberate should become a real workspace rather than a single-session demo:
- add Supabase authentication
- save maps to user accounts
- build a personal map library
- support shareable map links
- add public read-only map views
- add permissions for private and team maps
- support comments and review workflows
- add collaborative editing
- improve speaker identity inference
- deepen Arize evaluation loops
- make live observation more robust for longer debates
Project Story
Deliberate started from a debate problem: arguments are often rich and complex, but the structure disappears as soon as the round ends. A traditional debate flow sheet solves this for trained debaters, but it is manual and hard for outsiders to read.
This project uses AI to create that flow automatically. The hard part is not just summarizing the debate. The hard part is preserving structure while keeping every generated claim traceable to evidence.
License
No open-source license has been added yet. Please contact the author before reusing this code outside the project.
Analysis
View
Metric
- 4
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- AnthropicIn code
- CSSIn code
- HTMLIn code
- Next.jsIn code
- ReactIn code
- SQLIn code
- SupabaseIn code
- TypeScriptIn code
8 of 8 appear in the indexed code.
AI coding agents
- Claude CodeCommits
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
289 KB
Source files
53
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
matthewcabrera/deliberate
66 files · 4.4 MB · @ dde5962
Structure
Interface
10 files · 15%Screens, components and styles rendered to the user.
API & routing
5 files · 8%Request entry points: routes, handlers and controllers.
Application logic
16 files · 24%Domain rules, services and shared utilities.
Data & schema
5 files · 8%Schema definitions, migrations and data access.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript48%
- Markdown31%
- CSS13%
- HTML5%
- SQL3%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm · 14- @anthropic-ai/sdk
- @supabase/ssr
- @supabase/supabase-js
- @xyflow/react
- lucide-react
- next
- react
- react-dom
- +6 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.