A date planning application that creates personalized, location-based date experiences
DatePlanner is an intelligent date planning application that uses Gemeni AI to generate custom itineraries based on your preferences, budget, and location. Built for StormHacks 2025, it combines real Vancouver data with Google's Gemini AI to create perfect date experiences.
The application uses curated data from:
- Vancouver's Open Data Portal
- Yelp Dataset
- Local business and cultural space information
- AI-Powered Recommendations: Uses Google Gemini AI to generate personalized itineraries
-
Budget-Aware Planning: Respects your budget constraints with 4-tier system (
$, $ $, $$$, $$$$) - Real Local Data: Curated database of 626+ Vancouver restaurants and 709+ activities
-
Multi-Theme Options: Generates 3 unique themes per request:
- Romantic & Intimate
- Fun & Active
- Cultural & Relaxed
- Step-by-Step Wizard: Intuitive form with breadcrumb navigation
- Real-time Validation: Smart form validation with visual feedback
- Smooth Animations: Powered by Framer Motion for delightful UX
- Responsive Design: Works seamlessly on desktop, tablet, and mobile
- Save Favorites: Bookmark your favorite itineraries with one click
- Personal Dashboard: View all saved dates with expandable details
- Calendar Integration: Export to Google Calendar or download ICS files
- User Authentication: Secure login with Clerk authentication
- Firebase Backend: Real-time database with security rules
- User Privacy: Data isolation with user-specific access controls
- Production Ready: Built with Next.js 15 App Router and TypeScript
- Node.js 18+
- npm or yarn
- Firebase project
- Google AI Studio API key
- Clerk account
-
Clone the repository
git clone https://github.com/BambooShampoo/DatePlanner.git cd DatePlanner -
Install dependencies
npm install
-
Environment Setup
cp .env.local.example .env.local
Fill in your API keys:
# Google AI (Gemini) GEMINI_API_KEY=your_gemini_api_key_here # Clerk Authentication NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key CLERK_SECRET_KEY=your_clerk_secret_key # Firebase Configuration NEXT_PUBLIC_FIREBASE_API_KEY=your_firebase_api_key NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id # ... other Firebase config
-
Run the development server
npm run dev
-
Open your browser Navigate to http://localhost:3000
- Frontend: Next.js 15.5.4, React 19, TypeScript
- Styling: Tailwind CSS 4.1.14, custom CSS modules
- Animations: Framer Motion 12.23.22
- Authentication: Clerk (secure, production-ready)
- Database: Firebase Firestore (NoSQL, real-time)
- AI: Google Gemini 2.5 Flash model
- Deployment: Vercel-ready with optimizations
DatePlanner/
βββ src/
β βββ app/ # Next.js App Router
β β βββ (auth)/ # Authentication routes
β β βββ (protected)/ # Protected routes (requires login)
β β β βββ dashboard/ # Favorites dashboard
β β β βββ form/ # Date planning wizard
β β βββ api/ # API routes
β β β βββ favorites/ # CRUD for saved itineraries
β β β βββ generate-itinerary/ # AI itinerary generation
β β βββ globals.css # Global styles
β β βββ page.tsx # Landing page
β βββ components/ # Reusable UI components
β β βββ Breadcrumbs.tsx # Step navigation
β β βββ Header.tsx # Public header
β β βββ ProtectedHeader.tsx # Authenticated header
β βββ lib/ # Utilities and configurations
β β βββ firebase.ts # Firebase setup
β β βββ firestore.ts # Database operations
β βββ shared/ # Shared constants and types
βββ public/ # Static assets
βββ cleaned/ # Curated Vancouver data
β βββ VancouverRestaurants.csv # 626 restaurant entries
β βββ VancouverActivities.csv # 709 activity entries
βββ data/ # Raw datasets
βββ lib/ # Additional utilities
- Beautiful gradient background with animated elements
- Clear value proposition and call-to-action
- Conditional header based on authentication status
- Step 1: Select your date
- Step 2: Choose time range (start/end times)
- Step 3: Set budget level with visual slider
- Step 4: Pick preferred activities (multi-select chips)
- Step 5: Choose cuisine preferences
- Step 6: Review and generate itineraries
- 3 unique themed itineraries with detailed timelines
- Real venue names, addresses, and descriptions
- Cost estimates and activity types
- One-click favorite saving with visual feedback
- Grid layout of saved favorites with consistent sizing
- Expandable cards showing full itinerary details
- Calendar export buttons (Google Calendar + ICS download)
- Delete functionality with confirmation
- User Input β Date, time, budget, activities, cuisines
- Data Filtering β Filters 1,300+ entries based on preferences
- Smart Selection β Picks relevant venues within budget/location
- AI Generation β Gemini creates 3 themed itineraries with:
- Logical time progression
- Venue-specific details
- Realistic cost estimates
- Transportation considerations
// Sophisticated prompt ensures quality output
const prompt = `You are an expert date planner for Vancouver, Canada...
Create 3 distinct itineraries with different themes:
1. Romantic & Intimate
2. Fun & Active
3. Cultural & Relaxed
Each timeline entry should include:
- Specific activity name (not generic "Activity")
- Detailed description
- Exact timing
- Location/address
- Type classification
Use ONLY the provided venue data for accurate recommendations.`- Google Calendar: Direct links with pre-filled event details
- ICS Export: Universal calendar format for Apple/Outlook
- Smart Parsing: Extracts meaningful event titles from itinerary themes
- Mobile-First: Optimized for all screen sizes
- Touch-Friendly: Large tap targets and swipe gestures
- Progressive Enhancement: Works without JavaScript
- Next.js 15: Latest features including Turbopack
- Image Optimization: Automatic WebP conversion and lazy loading
- Code Splitting: Automatic route-based code splitting
- Caching: Intelligent caching strategies for API responses
- Clerk Integration: Industry-standard authentication
- Protected Routes: Server-side route protection
- Session Management: Secure JWT handling
- Firestore Rules: User-specific data access controls
- Server-Side API: Sensitive operations handled server-side
- Environment Variables: Secure API key management
- User Data Isolation: Each user only sees their own data
- Minimal Data Collection: Only collects necessary planning information
- Secure Deletion: Complete data removal on account deletion
Ensure all environment variables are set in your deployment platform:
GEMINI_API_KEYNEXT_PUBLIC_CLERK_PUBLISHABLE_KEYCLERK_SECRET_KEYNEXT_PUBLIC_FIREBASE_*(all Firebase config variables)
- Curated from business licenses and Yelp data
- Includes cuisine types, price ranges, locations
- Filtered for date-appropriate venues
- Cultural spaces, parks, attractions
- Activity types, accessibility, pricing
- Seasonal availability considerations
- Multi-City Support: Expand beyond Vancouver
- Weather Integration: Weather-aware recommendations
- Group Planning: Support for group dates and events
- Review System: User ratings and feedback
- Advanced Filters: Dietary restrictions, transportation preferences
- Analytics Dashboard: Usage insights and popular venues
- PWA Support: Offline functionality and app installation
- Real-time Updates: Live venue availability and pricing
- Advanced Caching: Redis integration for better performance
- A/B Testing: Optimize user experience with experiments
- Monitoring: Application performance monitoring
- Internationalization: Multi-language support
npm install
npm run dev
npm run type-check
npm run lint
npm run test
### Code Style
- **TypeScript**: Strict mode enabled
- **ESLint**: Next.js recommended configuration
- **Prettier**: Consistent code formatting
- **Husky**: Pre-commit hooks for code quality
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.