Google Chrome Built-in AI Challenge 2025 Submission
An intelligent travel activity search assistant that leverages Chrome's Built-in AI APIs to help travel agents quickly understand customer needs and find personalized activity recommendations.
https://chrome-built-in-ai-challenge-2025.vercel.app/ (Requires Chrome Canary/Dev with AI flags enabled)
AI Travel Activity Planning Assistant empowers travel agents with on-device AI intelligence, enabling privacy-first customer consultations through Chrome's Built-in AI.
β Privacy-First Conversation Processing: All AI analysis runs entirely on-device using Gemini Nano (Prompt API / Summarizer API). Conversation data never leaves the device, ensuring full GDPR compliance.
β Real-Time Staff Guidance: The Prompt API instantly analyzes ongoing dialogues, extracting key travel requirements and suggesting the next best question (e.g., "Ask about activity level" or "Confirm dietary restrictions").
β Intelligent Mentoring: The AI functions as a digital mentor, helping even junior agents deliver expert-level consultations from day one β eliminating missed questions and overlooked details.
β Human-AI Collaboration: The system balances human strengths β empathy and relationship building β with AI capabilities in data processing and coverage. Staff stay focused on meaningful conversations while the AI handles the rest.
β Smart Activity Search: The Summarizer API converts natural dialogue into structured data for our backend API. Gemini 2.5 Flash, enhanced with Google Search Grounding, finds personalized travel activities complete with images and references from platforms like Klook, Trip.com, and Expedia.
The inspiration came from a long-standing challenge in retail and customer service β balancing AI innovation with privacy protection. Many companies wanted to leverage customer interactions for insight, yet real-world conversations often contain personal information that cannot safely be sent to the cloud.
When Chrome Built-in AI was announced, we saw a turning point. For the first time, we could process conversations on-device, keeping sensitive data secure while enabling real-time understanding. That sparked our idea: to build a solution that empowers front-line sales reps through human-AI collaboration β using Chrome's built-in intelligence to make every customer interaction smarter, faster, and more personal.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Frontend (Vanilla JS) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Prompt API β β Summarizer β β Audio Input β β
β β β β API β β (Web Speech) β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β AI Assistant (Prompt API) β β
β β - Analyze conversation β β
β β - Extract travel requirements β β
β β - Suggest missing information β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Summarizer (Summarizer API) β β
β β - Generate structured summary β β
β β - 12-item travel requirement format β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β HTTPS
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Backend (Node.js + Express) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Gemini 2.5 Flash + Google Search Grounding β β
β β - Multi-platform activity search β β
β β - Real-time web search (Klook, Trip.com, Expedia) β β
β β - OG image extraction β β
β β - Mock mode for development/demo β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Live transcription using Web Speech API
- Instant AI-powered analysis of customer needs
- Dynamic suggestion generation for missing information
- Automatic extraction of 12 key travel requirements:
- Destination
- Travel Dates / Duration
- Number of Travelers
- Traveler Profile (age, special needs)
- Activity Type / Interests
- Budget per Person
- Time Preference
- Physical Activity Level
- Group Type
- Language Preference
- Transportation
- Special Requirements
- Multi-platform search (Klook, Trip.com, Expedia)
- Google Search Grounding for real-time web results
- Intelligent diversity in recommendations
- Rich metadata with images and references
- Clean, intuitive interface
- Editable AI summaries
- Staff notes integration
- One-click activity search
- Skeleton loading states
- Responsive design
We provide two testing patterns depending on your use case:
Prerequisites:
- Update Chrome to latest version (see "Chrome Setup" section below)
Testing Steps:
-
Download AI Models (First-Time Only)
- Open https://chrome-built-in-ai-challenge-2025.vercel.app/
- If a modal appears, click "Download AI Model" and wait for models to download (this may take some time)
- Modal closes automatically when ready
-
Start Voice Recognition
- Click the microphone button (turns red when active)
-
Play Demo Audio
- Download
demo-dialog.wavfrom the repository - Play the audio file near your microphone
- Expected Result: Transcript appears in real-time as the audio plays
- Download
-
Verify Summarizer API
- After the audio finishes, check the "AI Summary" section
- Expected Result: A structured summary with extracted travel requirements appears
-
Verify Prompt API (AI Assistant)
- Check the AI Assistant (with avatar) section during/after playback
- Expected Result: AI suggestions appear based on the conversation content
-
Add Staff Notes (Optional)
- Manually input any missing information in the "Staff Notes" field
- Example: "Customer prefers morning activities"
-
Search Activities
- Click the "Search Activities" button
- Expected Result: Relevant activity recommendations appear with images and references
Prerequisites:
- Update Chrome to latest version (see "Chrome Setup" section below)
- Node.js 18+
- Docker (optional, for containerized backend)
Backend Setup (Docker):
git clone https://github.com/plaidev/chrome-built-in-ai-challenge-2025.gitcd chrome-built-in-ai-challenge-2025/backenddocker-compose up- Server starts on
http://localhost:8080
Backend Setup (Without Docker):
git clone https://github.com/plaidev/chrome-built-in-ai-challenge-2025.gitcd chrome-built-in-ai-challenge-2025/backendnpm installMOCK_MODE=true npm run start- Server starts on
http://localhost:8080
Frontend Setup:
cd frontendpython -m http.server 8000- Navigate to
http://localhost:8000
Testing Steps:
Follow the same steps as Pattern 1 (steps 1-7), but with local URLs:
- Frontend:
http://localhost:8000 - Backend:
http://localhost:8080
-
Update Chrome to Latest Version
- We recommend updating Chrome to the latest version
- Check your version:
chrome://settings/help
-
Enable Built-in AI Flags:
chrome://flags/#prompt-api-for-gemini-nanoβ Enabledchrome://flags/#prompt-api-for-gemini-nano-multimodal-inputβ Enabledchrome://flags/#summarization-api-for-gemini-nanoβ Enabled
-
Restart Chrome
-
Verify Model Availability (Open DevTools Console):
await LanguageModel.availability();// Should return"available","downloadable", or"downloading"await ai.summarizer.availability();// Should return"available","downloadable", or"downloading"
What it does:
- Real-time analysis of conversation transcripts
- Intelligent extraction of travel requirements (12-item structured format)
- Context-aware suggestions for missing information
- Natural language understanding for customer intent
Implementation (frontend/js/ai/ai-assistant.js):
// Initialize AI session with system prompt
this.session = await LanguageModel.create({
initialPrompts: [
{
role: 'system',
content: this.getSystemPrompt()
}
]
});
// Analyze conversation with streaming
const stream = await this.session.promptStreaming(prompt);
for await (const chunk of stream) {
accumulated += chunk;
}Technical Details:
- Custom system prompts for travel domain expertise
- Streaming API for real-time response display
- Context-aware analysis of customer conversations
What it does:
- Automatic summarization of customer conversations
- Structured output generation for activity search
- Key information extraction from unstructured dialogue
Implementation (frontend/js/ai/summarizer.js):
// Configure summarizer options
let options = {
sharedContext: 'Travel agency consultation conversation',
type: 'tldr',
format: 'plain-text',
length: 'long'
};
// Create summarizer
const summarizer = await Summarizer.create(options);
// Generate structured summary
const summary = await summarizer.summarize(textToSummarize);Technical Details:
- Custom format for 12-item travel requirements
- TLDR-style extraction from natural dialogue
- Plain-text formatting with structured prompts
- Long-form summaries for comprehensive details
built-in-ai-challenge/
βββ README.md # This file
βββ demo-dialog.txt # Sample conversation for testing
βββ frontend/ # Frontend application
β βββ index.html # Main HTML
β βββ style.css # Styling
β βββ js/
β βββ main.js # Application entry point
β βββ config.js # Configuration (auto-detects env)
β βββ ai/
β β βββ ai-assistant.js # Prompt API - conversation analysis
β β βββ summarizer.js # Summarizer API - structured summaries
β βββ speech/
β β βββ audio-transcriber.js # Web Speech API integration
β β βββ pcm-processor.js # Audio processing
β βββ ui/
β βββ display.js # UI rendering and interactions
βββ backend/ # Backend API server
βββ package.json
βββ .env.example # Environment variables template
βββ server.js # Express server with Gemini API
βββ README.md # Backend-specific documentation
The frontend automatically detects the environment:
- Production (deployed): Uses production API URL
- Local (localhost/127.0.0.1): Uses
http://localhost:8080
const isProduction = window.location.hostname !== 'localhost'
&& window.location.hostname !== '127.0.0.1';
export const API_BASE_URL = isProduction
? "https://built-in-ai-challenge-api-436424395724.us-central1.run.app"
: "http://localhost:8080";Mock Mode (Default - No GCP Required):
# Mock Mode - returns sample data for demo/testing
MOCK_MODE=true
# Server Configuration
PORT=8080Production Mode (Requires GCP):
# Disable Mock Mode to use real APIs
MOCK_MODE=false
# Google Cloud Platform Configuration (required when MOCK_MODE=false)
GCP_PROJECT=your-gcp-project-id
GCP_LOCATION=us-central1
# Server Configuration
PORT=8080- Web Speech API with
processLocally: Speech recognition runs entirely on-device without sending audio to external servers - Prompt API for High-Accuracy Transcription: Advanced on-device speech-to-text using Chrome's built-in AI (Gemini Nano)
- Client-side AI Analysis: Prompt API and Summarizer API run locally in Chrome - conversation data never leaves the user's browser
- Zero Audio Transmission: Customer conversations are processed locally, protecting sensitive consultation data
- Personal Information Removal: Only anonymized summaries are sent to the backend API, not raw conversation transcripts
- No Data Storage: Conversations are processed in-memory only and discarded after session ends
- Minimal Data Transfer: Backend receives only structured travel requirements, not customer names or personal details
Solution:
- Update Chrome to the latest version
- Enable flags in
chrome://flags - Restart Chrome
- Run in DevTools:
await LanguageModel.availability()// Should return"available","downloadable", or"downloading"
Solution:
- Verify backend is running:
curl http://localhost:8080/health - Check
.envfile exists with correct values - Review backend logs for errors
- Try Mock Mode (remove
.envfile)
PLAIDγInc. - Data Mind
MIT License - see LICENSE file for details