An AI forward-deployed engineer that helps non-technical PMs clarify technical requirements with clients in real time.
Traditional PM workflows create a disconnect between clients and the development process. Requirements are gathered in meetings, translated by PMs, and only shared with developers later—often leading to miscommunication, rework, and delayed feedback cycles. Clients are kept out of the feedback loop until it's too late to make meaningful changes.
Together with @PenTest-duck, we built OnCall which is an AI forward-deployed engineer that helps non-technical PMs clarify technical requirements with clients in real time. By the end of the call, you have outlined tickets and actual mockups ready to hand off to developers. It challenges the traditional PM workflow by putting the client directly in the feedback loop from the start.
- Real-time transcript streaming via ElevenLabs Agents Platform (browser WebSocket)
- Intent detection using AI SDK to identify UI/design requests from conversation
- AI-powered mockup generation creating HTML/CSS variants based on detected intents
- Ticket queue for managing detected UI requirements
- Linear integration via ElevenLabs Agent webhook tool for seamless issue creation
Browser ──────► Hono Server ──────► ElevenLabs (signed URL)
│ │
│ ▼
└──────► ElevenLabs WebSocket (transcript streaming)
│
├──────► POST /api/intent ──────► AI SDK (Gemini)
│
├──────► POST /api/mockup ──────► AI SDK (Gemini)
│
└──────► sendContextualUpdate ──► ElevenLabs Agent ──► Linear Webhook
- Bun runtime
- ElevenLabs account with API key and Agent configured
- Google Gemini API key (for AI SDK)
- Linear account with API key and Team ID
# Server
cd server && bun install
# Client
cd client && bun installCreate a .env file in the server/ directory:
# ElevenLabs Agents Platform
# Get your API key from: https://elevenlabs.io/app/settings/api
ELEVENLABS_API_KEY=your_api_key_here
# Your ElevenLabs Agent ID
# Create an agent at: https://elevenlabs.io/app/conversational-ai
ELEVENLABS_AGENT_ID=your_agent_id_here
# Google Gemini API Key (for AI SDK intent detection and mockup generation)
# Get your API key from: https://aistudio.google.com/app/apikey
GOOGLE_GEMINI_API_KEY=your_gemini_api_key_here
# Linear API Key and Team ID (for issue creation)
# Get your API key from: https://linear.app/settings/api
# Get your Team ID from your Linear workspace settings
LINEAR_API_KEY=your_linear_api_key_here
LINEAR_TEAM_ID=your_linear_team_id_hereNo additional configuration is needed for the ElevenLabs Agent. Simply create or select an Agent in the ElevenLabs Conversational AI dashboard - the agent will work out of the box with OnCall.
# Terminal 1: Start the server (port 3000)
cd server && bun run dev
# Terminal 2: Start the client (port 5173)
cd client && bun run devOpen http://localhost:5173 in your browser.
- Click Start Call to connect to the ElevenLabs agent
- Speak naturally - the transcript will appear in real-time
- When you mention UI/design requirements, the system will:
- Detect the intent automatically
- Generate HTML/CSS mockup variants
- Create a ticket in the queue
- Select your preferred mockup variant
- Click Export to Linear to send the ticket to the agent, which will create a Linear issue
| Endpoint | Method | Description |
|---|---|---|
/api/signed-url |
GET | Get ElevenLabs signed URL for WebSocket |
/api/intent |
POST | Detect UI intent from transcript text |
/api/mockup |
POST | Generate HTML/CSS mockup variants |
├── client/ # Vite + React frontend
│ ├── src/
│ │ ├── components/ # React components
│ │ │ ├── CallPanel.tsx
│ │ │ ├── TranscriptFeed.tsx
│ │ │ ├── MockupPreview.tsx
│ │ │ └── TicketQueue.tsx
│ │ ├── hooks/ # Custom React hooks
│ │ │ └── useConversationTranscription.ts
│ │ ├── lib/ # Utilities & API client
│ │ ├── types/ # TypeScript types
│ │ └── App.tsx # Main application
│ └── package.json
│
├── server/ # Bun + Hono backend
│ ├── src/
│ │ ├── services/ # Business logic
│ │ │ ├── elevenlabs.ts
│ │ │ ├── intentDetector.ts
│ │ │ └── mockupGenerator.ts
│ │ └── index.ts # API routes
│ └── package.json
│
└── README.md
- Frontend: React 19, Vite, Tailwind CSS 4, Lucide React
- Backend: Bun, Hono, AI SDK, Zod
- Voice: ElevenLabs Agents Platform (@elevenlabs/react)
