Skip to main content
Dynamo is an AI-powered assistant that lets you query your inventory and operational data using natural language — either by voice or text. It supports both SQL queries and RAG (Retrieval-Augmented Generation) for conversational data exploration.

Overview

The Dynamo voice agent provides hands-free access to your workshop data, making it easy for technicians and managers to get information without navigating through multiple screens or forms.

Voice queries

Ask questions naturally using your voice while working on repairs

Text interface

Type queries when voice input isn’t practical

SQL mode

Direct database queries for structured data retrieval

RAG mode

Conversational queries with context understanding

Accessing Dynamo

The Dynamo page is accessible at /dynamo route. Users can access it directly from the navigation sidebar.
The Dynamo feature requires the ElevenLabs API key to be configured for voice synthesis. See Environment Setup for configuration details.

Interface Modes

Voice Mode

Voice mode enables hands-free interaction with your data. How to use voice mode:
1

Enable microphone access

Grant browser permission to use your microphone when prompted
2

Start listening

Click the microphone button or use the voice activation trigger
3

Ask your question

Speak naturally: “Show me low stock items at the main warehouse”
4

Receive audio response

The system will process your query and respond with synthesized speech
Voice agent states:
StateDescription
IdleReady to accept input
ListeningRecording your voice input
ProcessingAnalyzing your query and fetching data
SpeakingPlaying back the audio response

Text Mode

Text mode provides a traditional chat-like interface for data queries. Features:
  • Type natural language queries
  • Review conversation history
  • Copy and share responses
  • Switch between SQL and RAG modes

Query Modes

SQL Mode

SQL mode translates natural language questions into database queries for precise data retrieval. Example queries:
  • “What parts have stock below minimum?”
  • “Show me all discontinued items”
  • “List inventory at the downtown location”
  • “What requests are pending approval?”
  • “Show me recent transfers to the north warehouse”
  • “Which requests were completed this week?”
  • “How many warranty claims are open?”
  • “Show me rejected warranties from last month”
  • “Which technician has the most warranty reports?”
  • “What parts did Juan load today?”
  • “Show me undischarged movements”
  • “List all movements for order #1234”

RAG Mode

RAG (Retrieval-Augmented Generation) mode provides conversational responses with context awareness. When to use RAG mode:
  • Exploratory questions: “Tell me about our inventory trends”
  • Multi-step reasoning: “Why are we running low on brake parts?”
  • Contextual queries: “Show me more details about that last warranty”
  • Complex analysis: “Compare stock levels across all locations”

Chat History

The chat panel maintains a conversation history that persists during your session. Chat panel features:

Message history

Review all queries and responses from your session

Unread indicator

See when new messages arrive while the panel is closed

Message selection

Select specific messages for follow-up or reference

Panel toggle

Open/close the history panel without losing context

Implementation Details

The Dynamo page is implemented using:
// From src/pages/dynamo/ui/DynamoPage.tsx

export function DynamoPage() {
  const {
    isListening,
    isProcessing,
    isSpeaking,
    isIdle,
    transcript,
    lastResponse,
    error,
    isSupported,
    startListening,
    stopListening,
    cancelSpeaking,
    processText,
  } = useVoiceAgent();

  const {
    messages,
    isPanelOpen,
    hasUnread,
    togglePanel,
    updateMessageSelection,
  } = useDynamoStore();
  
  // ... component logic
}

Voice Agent Hook

The useVoiceAgent() hook from src/pages/dynamo/lib/useVoiceAgent.ts manages:
  • Speech recognition for voice input
  • Text-to-speech synthesis for responses
  • API communication for query processing
  • Error handling and session management

State Management

The useDynamoStore() hook from src/pages/dynamo/model/useDynamoStore.ts handles:
  • Message history persistence
  • Chat panel state
  • Unread message tracking
  • Message selection

Browser Compatibility

Voice mode requires browser support for the Web Speech API. Supported browsers include:
  • Chrome/Edge (recommended)
  • Safari (macOS and iOS)
  • Firefox (with additional configuration)
Check for browser support:
const { isSupported } = useVoiceAgent();

if (!isSupported) {
  // Show fallback to text mode
}

Use Cases

For Technicians

While performing repairs:
  • “How many brake pads do we have in stock?”
  • “Did we receive the order for motor controllers?”
  • “Log a warranty claim for this faulty battery”

For Warehouse Staff

During stock management:
  • “Which parts need reordering?”
  • “Show me today’s incoming requests”
  • “What’s the location of reference AX-2045?”

For Managers

For operational oversight:
  • “Summary of open warranties this week”
  • “Which locations have critical stock levels?”
  • “Show me pending inter-location transfers”

Best Practices

Speak clearly and at a normal pace for best recognition accuracy
Be specific about locations, dates, and part references for precise results
Always verify critical information through the main interface before taking action
Use voice mode in relatively quiet areas for better recognition
Switch to text mode if voice recognition isn’t working reliably

Troubleshooting

Voice not recognized

  • Check microphone permissions in browser settings
  • Ensure microphone is not muted or used by another application
  • Try switching to text mode and back to reset the voice interface
  • Verify browser supports Web Speech API

No audio response

  • Check that ElevenLabs API key is configured in environment variables
  • Verify system volume is not muted
  • Check browser console for API errors
  • Ensure internet connection is stable

Incorrect query results

  • Rephrase your question with more specific details
  • Try using exact part references or location names
  • Switch between SQL and RAG modes for different query types
  • Check that your user role has permission to access the requested data

Build docs developers (and LLMs) love