Duddle is an AI-powered web application that helps groups make decisions together. Built for the Qloo hackathon, it combines preference collection, intelligent recommendations, and real-time collaboration to solve the age-old question: "Where should we eat?"
- Real-time Duddles: Create decision sessions that groups can join via shareable links
- Smart Preference Collection: Gather dietary restrictions, spice tolerance, mood, and budget from each participant
- AI-Powered Recommendations: Leverages Qloo's Taste AI API and Anthropic's Claude to generate personalized restaurant suggestions
- Group Dynamics Analysis: Claude analyzes the group's preferences to explain why each restaurant is a good match
- Full Authentication: Supports both registered users and anonymous guests
- Mobile-First Design: Optimized UI with bottom navigation, touch-friendly controls, and PWA support
- Real-time Updates: See participants join and preferences update in real-time via Supabase
- Frontend: Next.js 15.4.1, React 19, TypeScript
- Styling: Tailwind CSS v4 with custom theme
- Backend: Supabase (PostgreSQL, Auth, Realtime)
- APIs: Qloo Taste AI API, Anthropic Claude API
- Icons: Heroicons
- Fonts: Geist via Next.js font optimization
- Node.js 18+ and npm
- Supabase account and project
- Qloo API key
- Anthropic API key (optional, for enhanced recommendations)
Create a .env.local file with:
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
QLOO_API_KEY=your_qloo_api_key
ANTHROPIC_API_KEY=your_anthropic_api_key # Optional# Install dependencies
npm install
# Run development server
npm run dev
# Build for production
npm run build
# Start production server
npm run startOpen http://localhost:3000 to see the app.
- Run the schema from
WORKING_DOCS/supabase-schema-with-auth.sqlin your Supabase SQL editor - Apply RLS policies from
WORKING_DOCS/supabase-rls-policies-production.sql - The database includes automatic duddle expiration after 24 hours
src/
├── app/ # Next.js App Router pages
│ ├── api/ # API routes (duddles, participants, decisions)
│ ├── auth/ # Authentication pages
│ └── duddle/[id]/ # Dynamic duddle pages
├── components/ # React components
│ ├── navigation/ # Mobile navigation components
│ └── ui/ # Reusable UI components
└── lib/ # Utilities and configurations
├── supabase/ # Supabase clients
├── auth/ # Auth context and hooks
└── types/ # TypeScript definitions
- Row Level Security (RLS) policies enforce data access
- Time-based duddle expiration (24 hours)
- Creator-only modification rights
- Secure authentication with Supabase Auth
- Protected API routes with proper authorization
- BottomNavigation: Mobile tab bar with Home, Create, Duddles, Profile
- StepWizard: Multi-step form navigation
- ChipSelector: Touch-friendly selection components
- VisualSlider: Interactive sliders with visual feedback
- SwipeableTabView: Gesture-enabled tab navigation
- Built as a hackathon project for Qloo
- No testing framework currently implemented
- Uses latest React 19 and Next.js 15 features
- Production-ready with full authentication and security