An interactive AI-powered museum guide that provides personalized tours using voice conversations and visual avatars.
- 🎤 Voice Conversations - Natural voice interactions powered by ElevenLabs Conversational AI
- 🎭 Visual Avatar - Lip-synced avatar powered by Anam AI
- 📍 BLE Beacon Support - Location-aware exhibit information (simulated in demo)
- 🎨 Personalized Tours - Customizable based on age, expertise level, and language
# Clone the repository
git clone https://github.com/your-username/wally.git
cd wally
# Install dependencies
bun install
# or: npm install
# Set up environment variables
cp .env.example .env
# Edit .env with your API keys
# Start development server
npm run devOpen http://localhost:8080 in your browser.
Create a .env file with the following:
# ElevenLabs Conversational AI Agent ID
# Get your agent ID from https://elevenlabs.io/conversational-ai
VITE_ELEVENLABS_AGENT_ID=your_agent_id_here
# Anam Avatar Configuration (optional)
# Get your API key from https://lab.anam.ai → Settings → API Keys
# Get your avatar ID from https://lab.anam.ai/avatars
VITE_ANAM_API_KEY=your_anam_api_key_here
VITE_ANAM_AVATAR_ID=your_avatar_id_here- Framework: React + TypeScript + Vite
- Styling: Tailwind CSS + shadcn/ui
- Voice AI: ElevenLabs Conversational AI
- Visual Avatar: Anam AI (audio passthrough mode)
npm run dev # Start development server
npm run build # Build for production
npm run preview # Preview production build
npm run lint # Run ESLintsrc/
├── components/
│ ├── demo/ # Demo page components
│ │ ├── VoiceInterface.tsx # Voice + avatar integration
│ │ ├── BeaconSimulator.tsx # BLE beacon simulation
│ │ └── ExhibitCard.tsx # Exhibit information display
│ ├── landing/ # Landing page components
│ └── ui/ # shadcn/ui components
├── lib/
│ ├── anam.ts # Anam SDK utilities
│ ├── beacons.ts # Beacon management
│ └── storage.ts # localStorage utilities
├── pages/
│ ├── Demo.tsx # Main demo page
│ └── Index.tsx # Landing page
└── config/
└── beacons.config.ts # Exhibit/beacon configuration
MIT