WeekendSahal is a high-trust, two-sided adventure tourism marketplace for Maharashtra. It connects weekend travelers looking for vetted treks, camping trips, water sports, and cycling tours with trusted local operators who manage the on-ground execution, while the platform handles discovery, booking, and secure payments.
- Map-Based Discovery: A Leaflet.js interactive map featuring 16 real destinations in Maharashtra (from Toranmal in the far north to Tadoba in the east) with dynamic category filters.
- Vetted Details: In-depth itinerary accordions, checklist of inclusions/exclusions, safety guide ratios, and verified traveler reviews.
- Emergency SOS & Proximity Proving: Lists verified local volunteer rescue teams and nearest hospital distances for each region, complete with a simulated SOS Distress Beacon.
- TrailMate AI Assistant: A floating co-pilot powered by Gemini 2.5 Flash that reads listing collections and lets travelers customize itineraries (e.g. "Suggest family-friendly camping under ₹1500").
- Checkout & Simulated Razorpay Sandbox: Seamless slots calculation with group discount math and a simulated Razorpay payment gateway overlay.
- Platform Trust Scorecard (PTS): Operators build a public trust score out of 100 based on completed trips and guest reviews to increase their catalog ranking.
- Escrow Financial Ledger: Visually separates Held in Escrow (preshared customer payments for upcoming trips) from Net Settled Payouts (released to their bank account post-completion, minus a 10% platform fee).
- Roster & Attendance Check-In: Table checklist under each batch where guides check in guests at base camp.
- Self-Serve Publishing: A console form to publish new batches to the catalog in real-time.
- Frontend: Next.js 16 (App Router), React 19, TypeScript
- Styling: Tailwind CSS v4, conformed to the premium, earthy MongoDB design system tokens
- Database & Auth: Firebase Firestore & client authentication
- Mapping: Leaflet.js & OpenStreetMap
- AI Model: Gemini 2.5 Flash (via server-side
@google/generative-aiSDK)
The application features a transparent Firestore Local Mock Mode that falls back to stateful client localStorage if Firebase keys are absent. You can run the app immediately with zero configuration:
# Clone the repository and install packages
npm install
# Run the Next.js development server
npm run dev -- -p 3001Open http://localhost:3001 in your browser. Toggle traveler and operator identities using the dark-teal promo bar at the top to test checkout and completed payout balances.
To connect a live Firebase project:
- Create a new project in the Firebase Console.
- Enable Cloud Firestore and Firebase Authentication (Email/Password provider).
- Register a Web App in your Firebase project and copy the configuration object.
- Copy
.env.local.templateto.env.localand paste your Firebase keys:GEMINI_API_KEY=your_gemini_api_key NEXT_PUBLIC_FIREBASE_API_KEY=your_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
- Deploy security rules: Copy
firestore.rulesto your Firebase project rules tab to secure bookings and profiles from unauthorized edits.
To generate the optimized static HTML build and deploy it to the live CDN:
# Build the Next.js static pages
npm run build
# Deploy to Firebase Hosting
npx firebase-tools deploy --only hostingsrc/lib/firebase.ts— Handles production Firebase SDK initialization vs Local Mock fallback.src/lib/db.ts— Unified database service wrapper handling transparent routing.src/lib/seedData.ts— Contains the 16 seed adventure destinations.src/components/MapExplorer.tsx— Flicker-free Leaflet discovery map with category toggles.src/components/RazorpayModal.tsx— Simulated Razorpay checkout screen.src/components/AiChatAssistant.tsx— Client-side Gemini 2.5 Flash chatbot assistant.firestore.rules— Production database security scopes.submission/— Contains Devpost pitch copy and the video demo script.