Skip to content

kevinraymond/duddle

Repository files navigation

Duddle - Group Decisions Made Easy

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?"

Key Features

  • 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

Tech Stack

  • 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

Getting Started

Prerequisites

  • Node.js 18+ and npm
  • Supabase account and project
  • Qloo API key
  • Anthropic API key (optional, for enhanced recommendations)

Environment Variables

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

Installation

# Install dependencies
npm install

# Run development server
npm run dev

# Build for production
npm run build

# Start production server
npm run start

Open http://localhost:3000 to see the app.

Database Setup

  1. Run the schema from WORKING_DOCS/supabase-schema-with-auth.sql in your Supabase SQL editor
  2. Apply RLS policies from WORKING_DOCS/supabase-rls-policies-production.sql
  3. The database includes automatic duddle expiration after 24 hours

Project Structure

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

Security Features

  • 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

Mobile UI Components

  • 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

Development Notes

  • 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

About

Duddle - Group Decisions Made Easy

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published