A Google Maps Platform Awards hackathon MVP where users can post furniture items and browse them on an interactive map.
- Post Items: Share furniture with photos, categories, urgency levels, and pickup addresses
- Interactive Map: Browse items on Google Maps with urgency-based color coding and item images
- Directions: Get directions to pickup locations directly from map markers
- Real-time Updates: Items sync across all users via Firebase
- User Authentication: Sign in with Google or email/password
- Messaging System: Contact item owners directly through the platform
- Favorites: Save items you're interested in for later
- Distance Filtering: Find items within specific distance ranges using geolocation
- Search & Filters: Filter by category, urgency, search terms, and distance
- User Profiles: Manage your account and view your activity
- Dashboard: View your posted items, messages, and favorites
- Item Expiration: Automatic cleanup of expired items
- Status Management: Track item availability (available, pending, picked up)
- Responsive Design: Works seamlessly on desktop and mobile devices
- Frontend: Next.js 14 (React) + TypeScript + Tailwind CSS
- Backend: Next.js API Routes
- Database: Firebase Firestore
- Authentication: Firebase Auth (Google OAuth + Email/Password)
- Storage: Firebase Storage (images)
- Maps: Google Maps JavaScript API + Places API (autocomplete) + Geocoding API + Directions API
- Geolocation: Browser Geolocation API with enhanced location services
- Node.js 18.17.1+ (check with
node --version) - Google Cloud Platform account with Maps API enabled
- Firebase project set up
Enable these Google Cloud Platform APIs:
- Maps JavaScript API: For interactive map display
- Places API: For address autocomplete and validation in forms
- Geocoding API: For converting addresses to coordinates
- Directions API: For navigation routing
-
Clone and install dependencies
git clone <repo-url> cd moveout npm install
-
Configure environment variables
cp .env.example .env.local
Fill in your API keys in
.env.local:NEXT_PUBLIC_GOOGLE_MAPS_API_KEY=your_google_maps_api_key NEXT_PUBLIC_FIREBASE_API_KEY=your_firebase_api_key NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_project_id.firebaseapp.com NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_project_id.appspot.com NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
-
Set up Google Maps API
- Create a new project in Google Cloud Console
- Enable these APIs in Google Cloud Console:
- Maps JavaScript API
- Places API
- Geocoding API
- Directions API
- Create API credentials and restrict by HTTP referrers for security
- Create an API key and add it to
.env.local
-
Set up Firebase
- Create a new Firebase project at Firebase Console
- Enable Firestore Database (start in test mode for development)
- Enable Firebase Authentication (Google + Email/Password)
- Enable Firebase Storage for image uploads
- Get your config values from Project Settings and add to
.env.local
-
Seed demo data (optional)
npm run seed-enhanced
-
Run the development server
npm run dev
Open http://localhost:3000 in your browser.
- Sign Up/Sign In: Create an account using Google OAuth or email/password
- Allow Location Access: Enable location services for distance-based filtering (optional)
- Click "Post Item" in the navigation
- Fill out the form:
- Item title and description
- Category (furniture, electronics, clothing, etc.)
- Urgency level (urgent, moderate, low priority)
- Upload a photo (optional but recommended)
- Enter pickup address (with Places API autocomplete for validation)
- Add pickup deadline if needed
- Submit the form - your item will appear on the map instantly
-
Map View: Browse items on the interactive map
- Items appear as colored markers based on urgency:
- π΄ Red: Urgent pickup needed
- π‘ Yellow: Moderate urgency
- π’ Green: Flexible timing
- Click markers to see item details with photos
- Use "Contact" button to message the owner
- Click "Get Directions" to navigate to pickup location
- Items appear as colored markers based on urgency:
-
List View: Switch to list view for detailed browsing
- See all item details, photos, and descriptions
- Click items to view full details modal
-
Search & Filter: Use the search and filter options
- Search by keywords in title, description, or address
- Filter by category and urgency level
- Set distance filters (1-100 miles from your location)
- View active filters and clear them easily
- Contact Owners: Click "Contact" on any item to send a message
- View Messages: Access your conversations from the dashboard
- Manage Inquiries: Item owners can respond to interested parties
- Dashboard: View and manage your posted items, messages, and favorites
- Profile: Update your personal information and contact details
- Favorites: Save items you're interested in for easy access later
- Connect your GitHub repo to Vercel
- Add environment variables in Vercel dashboard
- Deploy
Firebase is already configured for production use.
src/
βββ app/ # Next.js app directory
β βββ layout.tsx # Root layout with navigation
β βββ page.tsx # Home page (map/list view)
β βββ post/page.tsx # Post item page
β βββ dashboard/page.tsx # User dashboard
β βββ messages/page.tsx # Messages page
β βββ profile/page.tsx # User profile page
β βββ api/ # API routes
β βββ items/ # Item management APIs
β βββ messages/ # Messaging APIs
β βββ favorites/ # Favorites APIs
β βββ ratings/ # User ratings APIs
β βββ reports/ # Content reporting APIs
βββ components/ # React components
β βββ auth/ # Authentication components
β βββ dashboard/ # Dashboard tabs and features
β βββ items/ # Item cards, forms, details
β βββ map/ # Interactive map components
β βββ messages/ # Messaging and chat components
β βββ ratings/ # User reputation system
β βββ reports/ # Content reporting
β βββ ui/ # Reusable UI components
βββ contexts/ # React Context providers
β βββ auth-context.tsx # Authentication state
β βββ favorites-context.tsx # Favorites management
βββ hooks/ # Custom React hooks
β βββ use-geolocation.ts # Location services
β βββ use-item-expiration.ts # Item expiration handling
β βββ use-enhanced-geolocation.ts # Advanced location features
βββ lib/ # Utilities and configuration
β βββ firebase.ts # Firebase configuration
β βββ types.ts # TypeScript type definitions
β βββ utils.ts # Helper functions
β βββ geolocation-utils.ts # Location and distance utilities
β βββ validation.ts # Form validation helpers
βββ scripts/ # Database seeding and utilities
β βββ enhanced-demo-data.js # Demo data seeder
βββ styles/ # Global styles
βββ globals.css # Tailwind CSS and global styles
MIT License - see LICENSE file for details.