Project Info
Inspiration
One of the ways that people going about learning about culture is by learning language. This is partially because that is probably the most streamlined way to do so and there are a plethora of resources for language learning. What we wanted to do is different. We want to give users an opportunity to learn to be a local whether that's by exploring the history, music, food, and landmarks from a country or by engaging in conversation with an agent to learn what its like to be a local.
What it does
WorldWise is an AI cultural immersion companion that delivers personalized snapshots via voice, visual content, and trivia. Voice-first interface — Engage in conversation with a Vapi Voice Agent to learn what it's like to be a local Cultural content feed — movies, news, music, restaurants, and attractions that make a country what it is Real-time trivia — dynamic questions from fetched content; stores memory about their user Agentic orchestration — Spotify, NewsAPI, Reddit, TripAdvisor, Wikipedia, Google Maps etc
How we built it
Frontend (React), Backend (Python/Flask), Multi-agent framework for coordinated workflows Asynchronous API integration with aiohttp, Health, orchestration, content feed, trivia, and voice endpoints Orchestrator routes user queries, ContentFeed agent gathers real-time data, TriviaAgent generates questions from content; Parallel API calls to reduce latency API integrations: Spotify (local music), NewsAPI (current events), Reddit (slang/community trends), TripAdvisor (restaurants, attractions), Deepgram (multilingual STT), Anthropic Claude Haiku (reasoning), Vapi (Voice AI)
Challenges we ran into
Integrating the sheer amount of APIs was difficult because each had different types of documentation + different hurdles to cross deepgram + Vapi was difficult because we were trying to include language support beyond just English; this required implementing a language detection script through deepgram and accordingly prompting vapi to respond in that language to come off as more personable ##
Accomplishments we're proud of
a working MVP for 3 cultures (Japan, Spanish, France) a solid intuitive front end with a content feed, trivia, and voice-first chatbot support for english, spanish, french, and japanese + scalable for other languages Letta Integration that remembers user progress; creates personalized experience for users; key for cultural immersion ##
What we learned
Technologies: Letta, Vapi, Deepgram, Claude While agentic workflows are always subjected to latency, there are ways to perform simultaneous processing to cut it down A voice first engagement approach makes it more accessible and personable for the user ##
What's next
Coming out with support for more cultures; our system is designed to be scalable (just have to fully build out the integrations) reducing latency with processing content and setting up the voice agent gathering feedback from users to see if there are other ways to deliver the culturally immersive experience we are passionate about
Cultura: Your Cultural Immersion Platformura
Cultura is a comprehensive cultural immersion application that provides rich, real-time content about countries including movies, news, music, food, attractions, and interactive trivia. All data is aggregated from multiple APIs and presented in an immersive UI
Features
Voice Interface (Vapi + Deepgram)
- Speech recognition using Deepgram for voice input
- Natural voice synthesis for responses
- Real-time voice conversation about cultures and countries
Content Feed (News API, TripAdvisor API, Spotify API)
- Movie cards with embedded YouTube trailers
- News cards with current events and articles
- Music cards with popular songs and Spotify integration
- Food cards with local cuisine and restaurants
- Attraction cards with landmarks and cultural sites
Interactive Trivia
- Daily cultural quizzes for selected countries
- Multiple choice questions with immediate feedback
- Adaptive learning system that re-queues incorrect answers
- Completion tracking and progress monitoring
Architecture
[User Selects Country]
↓
[Loading Screen with Country Facts]
↓
[Backend Orchestration] → [Multi-API Data Aggregation]
├── TMDB (Movie Trailers)
├── NewsAPI (Current Events)
├── Spotify (Music Playlists)
├── TripAdvisor (Food & Attractions)
└── LLM Agents (Trivia Generation)
↓
[Country-Themed Snapshot Page]
├── Content Feed (Movies, News, Food, Attractions)
├── Interactive Trivia Panel
└── Voice Assistant Interface
Tech Stack
Backend
- Flask - Python web framework
- Python 3.8+ - Async/await support
- Deepgram - Speech-to-text transcription
- Vapi - Voice assistant and TTS synthesis
- Anthropic Claude - AI reasoning and content generation
- TMDB - Movie trailer data
- Spotify API - Music playlists and trending songs
- NewsAPI - Current events and news
- TripAdvisor API - Food and restaurant data
- Agent-based architecture for content aggregation
Frontend
- React
- Styled Components - CSS-in-JS styling
- Framer Motion - Smooth animations and transitions
- Axios
Infrastructure
- Agent Orchestrator - Coordinates multiple specialized agents
- Deepgram Integration - Real-time speech recognition
- Vapi Integration - Voice assistant capabilities
- TMDB Integration - Movie and trailer data
- Spotify Integration - Music discovery
- NewsAPI Integration - Current events
Quick Start
Prerequisites
- Python 3.8+
- Node.js 16+
- API keys for all services (see Configuration)
Backend Setup
- Clone and navigate to backend:
cd backend
- Install dependencies:
pip install -r requirements.txt
- Configure environment variables:
cp env.example .env
# Edit .env with your API keys
- Run the Flask server:
python app.py
Frontend Setup
- Navigate to frontend:
cd frontend
- Install dependencies:
npm install
- Start the development server:
npm start
- Open your browser:
http://localhost:3000
Configuration
Required API Keys
Create a .env file in the backend directory with the following keys:
# Voice & AI
DEEPGRAM_API_KEY=your_deepgram_api_key
VAPI_API_KEY=your_vapi_api_key
ANTHROPIC_API_KEY=your_anthropic_api_key
# Music & Media
SPOTIFY_CLIENT_ID=your_spotify_client_id
SPOTIFY_CLIENT_SECRET=your_spotify_client_secret
NEWS_API_KEY=your_news_api_key
TMDB_API_KEY=your_tmdb_api_key
# Social & Cultural Data
REDDIT_CLIENT_ID=your_reddit_client_id
REDDIT_CLIENT_SECRET=your_reddit_client_secret
# Tourism & Attractions
TRIPADVISOR_API_KEY=your_tripadvisor_api_key
# Memory & Analytics
LETTA_API_KEY=your_letta_api_key
Getting API Keys
- Deepgram - Sign up at https://deepgram.com/ for speech-to-text
- Vapi - Get API key at https://vapi.ai/ for voice synthesis
- Anthropic - Claude API at https://console.anthropic.com/ for AI reasoning
- Spotify - Developer Dashboard at https://developer.spotify.com/ for music data
- NewsAPI - Free tier at https://newsapi.org/ for news data
- TMDB - Get API key at https://www.themoviedb.org/settings/api for movie trailers
- Reddit - Reddit API at https://www.reddit.com/prefs/apps for cultural insights
- TripAdvisor - Developer portal for food and attraction data
Example Usage
Voice Interaction
User: "Hey, I'm flying to Tokyo next week. Can you teach me the basics?"
Cultura: "Sure! In Japan, a polite greeting is 'Hajimemashite' — it means 'Nice to meet you.'
🇯🇵 The current government is a constitutional monarchy led by Prime Minister Fumio Kishida.
🍣 For food, locals love ramen alleys in Shinjuku and okonomiyaki in Osaka.
🎵 Here's what's trending on Spotify Japan: Fujii Kaze's 'Workin' Hard'.
🗣️ Slang tip: saying 'Yabai!' means 'That's crazy!' — good or bad.
Want to hear about festivals or how to behave at dinner?"
Key Features Explained
1. Voice-First Interface
- Natural Conversation: Speak naturally, get cultural insights
- Multilingual Support: Works in multiple languages
- Real-time Processing: Instant cultural data aggregation
2. Cultural Intelligence
- Comprehensive Data: Government, history, music, food, slang
- Real-time Updates: Current news and trending topics
- Authentic Sources: Reddit, Wikipedia, official APIs
3. Personalized Learning
- Memory System: Remembers your interests and progress
- Adaptive Content: Adjusts to your learning style
- Cultural Quizzes: Interactive learning experiences
4. Observability
- AI Tracing: Track AI reasoning and decision-making
- Performance Metrics: Monitor accuracy and user engagement
- Continuous Improvement: Data-driven enhancements
Development
Project Structure
lingua-cal-hacks/
├── backend/
│ ├── app.py # Main Flask application
│ ├── integrations.py # API integration classes
│ ├── requirements.txt # Python dependencies
│ └── env.example # Environment configuration
├── frontend/
│ ├── src/
│ │ ├── App.js # Main React component
│ │ ├── App.css # Styling
│ │ └── index.js # Entry point
│ ├── package.json # Node dependencies
│ └── public/ # Static assets
└── README.md # This file
Deployment
Production Setup
- Environment Configuration
export FLASK_ENV=production
export DATABASE_URL=postgresql://...
export REDIS_URL=redis://...
Acknowledgments
- Anthropic - Claude AI for cultural reasoning
- Deepgram - Multilingual speech recognition
- Vapi - Voice interface platform
- Spotify - Music data API
- NewsAPI - News aggregation
- Reddit - Cultural insights
- Wikipedia - Historical data
- Arize - AI observability platform
Contributors
- danchizik@berkeley.edu
- tarunshah@berkeley.edu
- vibhornarang@berkeley.edu
- Cal Hacks for hosting!!
Analysis
View
Metric
- 29
- 5
- 3
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
- FlaskIn code
- HTMLIn code
- JavaScriptIn code
- PythonIn code
- ReactIn code
- RedisIn code
8 of 8 appear in the indexed code.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
508 KB
Source files
68
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
VibhorN/Culturo
88 files · 1.2 MB · @ 633e357
Structure
Interface
9 files · 10%Screens, components and styles rendered to the user.
Application logic
64 files · 73%Domain rules, services and shared utilities.
+2 more
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
- Python77%
- JavaScript20%
- Markdown1%
- Shell1%
- CSS1%
- HTML0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
backend/requirements.txt
pypi · 30- aiohttp
- alembic
- anthropic
- arize-phoenix-otel
- asyncio
- celery
- deepgram-sdk
- feedparser
- flask
- flask-cors
- googlemaps
- gunicorn
- httpx
- letta-client
- opentelemetry-api
- opentelemetry-exporter-otlp
- opentelemetry-instrumentation
- opentelemetry-instrumentation-aiohttp-client
- +12 more
frontend/package.json
npm · 17- @testing-library/dom
- @testing-library/jest-dom
- @testing-library/react
- @testing-library/user-event
- @vapi-ai/web
- axios
- framer-motion
- lucide-react
- react
- react-dom
- react-hot-toast
- react-intersection-observer
- react-router-dom
- react-scripts
- react-use
- styled-components
- web-vitals
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.