Built with β‘ Bolt.new - A modern, AI-powered platform for discovering and connecting with local businesses in your neighborhood.
Event: Bolt.new Hackathon
Category: AI + Local Discovery
Sponsor Challenges:
- π€ ElevenLabs Voice AI Challenge β
- π Netlify Deployment Challenge β
- π Entri Custom Domain Challenge β
LocalSpot revolutionizes local business discovery by combining AI-powered search, voice interactions, and intelligent recommendations to help users find exactly what they're looking for in their neighborhood. Whether you're searching for "the best coffee shop for remote work" or "family-friendly restaurants with outdoor seating," LocalSpot understands natural language and delivers personalized results.
- Natural language query processing with OpenRouter AI
- Intelligent search suggestions and auto-completion
- Context-aware results based on time, weather, and preferences
- Semantic search that understands intent, not just keywords
- Voice search with Web Speech API integration
- AI-generated business descriptions with ElevenLabs text-to-speech
- "Listen to Description" feature for accessibility
- Hands-free navigation perfect for mobile users
- Real-time interactive maps powered by Leaflet.js
- Business clustering and area-based search
- User location detection and "Search This Area" functionality
- Map/Grid view toggle for different browsing preferences
- Dark/Light/System theme support with next-themes
- Mobile-first responsive design
- Smooth animations and micro-interactions
- Accessible UI with proper focus states and ARIA labels
- Advanced filtering and sorting options
- Personalized favorites with notes and tags
- Business verification and enhanced listings
- Real-time availability and booking integration
- Framework: Next.js 15 with App Router
- React: React 19 with Concurrent Features
- UI Library: shadcn/ui + Radix UI primitives
- Styling: Tailwind CSS with CSS variables for theming
- Icons: Lucide React
- Maps: Leaflet.js with clustering support
- Animations: Framer Motion & CSS transitions
- Database: Supabase (PostgreSQL with real-time subscriptions)
- Authentication: Supabase Auth with social providers
- AI Services: OpenRouter (Claude, GPT-4, Llama)
- Voice AI: ElevenLabs Text-to-Speech
- Maps/Geocoding: OpenStreetMap Nominatim API
- Search: Hybrid AI + traditional search
- Hosting: Netlify with Edge Functions
- Domain: Custom domain via Entri + IONOS
- CDN: Netlify's global CDN
- SSL: Automatic HTTPS with Let's Encrypt
- Performance: Service Worker for offline functionality
- TypeScript: Full type safety with strict configuration
- ESLint: Code quality and consistency
- Path Aliases: Clean imports with
@/*mapping - Error Handling: Comprehensive error boundaries and monitoring
- Node.js 18+ and npm
- Git for version control
- Clone the repository
git clone <repository-url>
cd LocalSpot- Install dependencies
npm install- Set up environment variables
cp .env.example .env.localAdd your API keys:
# Supabase Configuration
NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
# AI Services
OPENROUTER_API_KEY=your_openrouter_api_key
ELEVENLABS_API_KEY=your_elevenlabs_api_key
# Optional: Admin Features
ADMIN_SECRET_KEY=your_admin_secret_key- Start development server
npm run devVisit http://localhost:3000 to see the application.
npm run dev # Start development server
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLint
npm run type-check # Check TypeScript types- Voice Search: Click the microphone icon and speak naturally
- Text Search: Type queries like "romantic restaurants near me"
- Filter & Sort: Refine results by category, price, rating, distance
- Map Integration: See results on map or in grid view
- Category Browse: Explore restaurants, cafes, shopping, entertainment
- Featured Businesses: Curated selections and trending spots
- Detailed Profiles: Photos, reviews, hours, contact information
- AI Descriptions: Listen to AI-generated business descriptions
- Create Account: Sign up with email or social providers
- Save Favorites: Bookmark businesses with personal notes
- Organize Collections: Create custom categories and tags
- Share Discoveries: Share favorite spots with friends
- Advanced Search: Access to premium filters and sorting
- Priority Support: Faster response times and dedicated help
- Enhanced Profiles: Richer business information and insights
- Early Access: New features and beta testing opportunities
components/
βββ ui/ # Base shadcn/ui components
βββ auth/ # Authentication modals and forms
βββ business/ # Business cards, details, maps
βββ home/ # Homepage sections
βββ layout/ # Header, footer, navigation
βββ admin/ # Admin dashboard components
βββ favorites/ # Favorites management
- Client-side rendering with dynamic imports
- Business marker clustering for performance
- Custom popup designs with business information
- Mobile-optimized touch interactions
- Web Speech API integration with fallbacks
- Real-time transcript display
- Error handling for unsupported browsers
- ElevenLabs integration for voice responses
- Consistent design across grid and list views
- Lazy loading for images and content
- Accessibility features and keyboard navigation
- Favorite toggle with optimistic updates
// Natural language processing for search queries
const enhancedQuery = await analyzeSearchQuery(userInput, {
location: userLocation,
preferences: userPreferences,
context: searchContext
});// Text-to-speech for business descriptions
const audioDescription = await generateVoiceDescription(business, {
voice: "professional",
speed: "normal",
emphasis: ["name", "specialties"]
});- Lazy loading for map components
- Dynamic imports for heavy libraries
- Route-based code splitting with Next.js
- API response caching (5min for search, 24h for geocoding)
- Image optimization with Next.js Image component
- Service worker for offline functionality
- Indexed queries for fast search
- Row Level Security (RLS) for data protection
- Real-time subscriptions for live updates
GET /api/search
Query Parameters:
- q: string (search query)
- category: string (business category)
- lat: number (latitude)
- lng: number (longitude)
- radius: number (search radius in km)
- sort: string (rating|distance|price|newest)
- limit: number (max results)GET /api/business/[id]
Response: {
id: string
name: string
category: Category
location: { lat: number, lng: number }
rating: number
reviews: Review[]
hours: BusinessHours
contact: ContactInfo
images: string[]
description: string
amenities: string[]
}POST /api/voice/text-to-speech
Body: {
text: string
voice?: string
speed?: number
}
Response: {
audioUrl: string
duration: number
}- All API keys stored securely in environment variables
- Row Level Security (RLS) policies for user data
- HTTPS enforced across all endpoints
- GDPR compliant data handling
- Secure JWT token management
- Social login with OAuth providers
- Password hashing with bcrypt
- Session management with Supabase Auth
- Granular location permissions
- Optional data sharing settings
- User data export functionality
- Right to deletion compliance
The application is configured for seamless Netlify deployment:
- Build Configuration
[build]
publish = ".next"
command = "npm run build"
[[plugins]]
package = "@netlify/plugin-nextjs"- Environment Variables Set in Netlify dashboard:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYOPENROUTER_API_KEYELEVENLABS_API_KEY
- Custom Domain (via Entri)
- Domain:
localspot.ai(example) - SSL: Automatic with Let's Encrypt
- CDN: Global edge locations
- Lighthouse Score: 95+ across all categories
- Core Web Vitals: All metrics in green
- Bundle Size: < 350KB initial load
- Time to Interactive: < 2 seconds
Implementation: Advanced voice interaction system
- Voice Search: Natural language voice input with Web Speech API
- AI Descriptions: Generated business descriptions with ElevenLabs TTS
- Accessibility: Audio descriptions for visually impaired users
- Multi-language: Support for multiple languages and accents
Key Files:
components/ui/voice-search.tsx- Voice input componentcomponents/business/voice-description.tsx- TTS integrationlib/elevenlabs.ts- ElevenLabs API client
Implementation: Production-ready deployment with optimization
- Next.js Plugin: Seamless SSR and static generation
- Edge Functions: API routes with global distribution
- Performance: Optimized builds with caching strategies
- Security: HTTPS, headers, and redirect configurations
Key Files:
netlify.toml- Deployment configurationnext.config.js- Build optimizationmiddleware.ts- Edge middleware
Implementation: Professional domain setup and DNS configuration
- Domain Registration: Custom domain via Entri + IONOS
- DNS Configuration: Proper A/CNAME records setup
- SSL Certificate: Automatic HTTPS with security headers
- Performance: CDN optimization and caching
Setup:
- Domain: Registered through Entri partnership
- DNS: Configured for Netlify hosting
- SSL: Automatic certificate provisioning
- Unit Tests: Component and utility function testing
- Integration Tests: API endpoint and database testing
- E2E Tests: Full user flow automation
- Accessibility Tests: Screen reader and keyboard navigation
- TypeScript: 100% type coverage
- ESLint: Zero linting errors
- Performance: Lighthouse scores 95+
- Accessibility: WCAG 2.1 AA compliance
- Modern Browsers: Chrome 90+, Firefox 88+, Safari 14+
- Mobile: iOS Safari, Chrome Mobile
- Progressive Enhancement: Graceful degradation for older browsers
- Real-time performance metrics
- Error tracking and reporting
- User behavior analytics
- API response time monitoring
- Search query analysis
- Popular business categories
- User engagement metrics
- Geographic usage patterns
We welcome contributions! Please see our contributing guidelines:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open a Pull Request
- Follow TypeScript strict mode
- Use conventional commit messages
- Add tests for new features
- Maintain accessibility standards
- Document new components
This project is licensed under the MIT License - see the LICENSE file for details.
- Bolt.new - For providing an amazing development platform
- ElevenLabs - For cutting-edge voice AI technology
- Netlify - For seamless deployment and hosting
- Entri - For domain registration and DNS services
- Supabase - For powerful backend-as-a-service
- OpenStreetMap - For comprehensive mapping data
- Website: LocalSpot.ai
- Email: hello@localspot.ai
- GitHub: LocalSpot Repository
- Discord: LocalSpot Community
Built with β€οΈ and β‘ Bolt.new
Transforming local business discovery through the power of AI and voice technology.