RoadWeave is a collaborative travel blogging platform. Create trips, add travelers, and let AI automatically generate engaging travel blogs from photos, text, and voice recordings with GPS data.
roadweave_demo.mp4
- 🤖 AI-Powered Blogging: Google Gemini automatically generates travel narratives
- 📸 Smart Photo Analysis: AI analyzes photos for rich descriptions
- 🎤 Voice-to-Text: Audio messages transcribed and integrated into blogs
- 🗺️ Interactive Location Picker: Choose exact locations via interactive maps
- 📅 Calendar View: Navigate blog entries by date with visual calendar
- 📍 Coordinate Editing: Admin tools for precise location management
- 🌍 Multi-language Support: Blog generation in 19 languages
- 👍 Interactive Reactions: LinkedIn-style reactions for public engagement
- 📱 Mobile-Friendly: Responsive design optimized for mobile devices
- 🔒 Secure Access: Token-based traveler access, admin dashboard
- Python 3.8+ and Node.js 14+
- Google Gemini API key (Get one here)
# 1. Clone and install backend
cd backend
cp .env.example .env # Edit and add your GEMINI_API_KEY
pip install -r requirements.txt
python app.py
# 2. Setup frontend (in new terminal)
cd frontend
cp .env.example .env # Set REACT_APP_API_BASE=http://localhost:5000
npm install
npm start- Admin Dashboard:
http://localhost:3000/admin - Credentials: Displayed in backend console on first startup
- Admin creates trips and adds travelers via dashboard
- Travelers receive unique token links to upload content
- AI automatically generates blog content from entries
- Everyone can view the generated travel blog with maps
Enable advanced AI features in backend/.env:
# Required
GEMINI_API_KEY=your-api-key-here
# Optional AI Features
ENABLE_PHOTO_ANALYSIS=true # AI photo descriptions
ENABLE_AUDIO_TRANSCRIPTION=true # Voice-to-textSee Deployment Guide for production setup with nginx, SSL, and systemd.
- Setup & Configuration - Detailed installation guide
- Usage Guide - Admin and traveler workflows
- Interactive Reactions - Public engagement system guide
- API Reference - Complete API documentation
- AI Features - Photo analysis and audio transcription
- Deployment Guide - Production deployment
- Troubleshooting - Common issues and solutions
Backend: Flask, SQLAlchemy, JWT, Google Gemini AI
Frontend: React.js, Leaflet.js
Database: SQLite (configurable)
- LinkedIn-Style Reactions: 6 reaction types (Like, Applause, Support, Love, Insightful, Funny) for public blog engagement
- Admin Control: Toggle reactions on/off per trip with visual feedback buttons
- Privacy-Friendly: No user tracking - reactions stored locally, counts aggregated anonymously
- One Reaction Per User: Users can select one reaction per post, stored in browser localStorage
- Real-time Counts: See reaction counts from all visitors with optimistic UI updates
- Mobile Responsive: Styled reaction buttons adapt to all screen sizes
- Interactive Map Popups: Click on mini-images, text, or audio buttons in map markers to jump directly to that content in the blog
- Smart Date Filtering: Automatically clears date filters when jumping to entries from different dates
- Location Mini-Maps: Click 📍 icons next to timestamps to see exactly where entries were created
- Universal Navigation: Works for all entry types (photos, text, audio) in both admin and public views
- Manual Location Picker: Choose exact locations using interactive maps
- GPS + Map Options: Switch between automatic GPS and manual selection
- Precise Positioning: Click or drag markers for perfect accuracy
- Admin Coordinate Editing: Fix incorrect coordinates with visual map tools
- Visual Calendar: Navigate blog entries by date with entry count badges
- Content Pieces: Blog entries split into individual timestamped pieces
- Date Filtering: Click calendar days to filter entries
- Clean Timestamps: Professional timestamp metadata with traveler names
- Removed EXIF GPS: No more unreliable photo GPS extraction
- Consistent Location Source: All entries use device GPS or manual selection
- Better Accuracy: More reliable and user-controlled positioning
- Voice messages are transcribed to text using AI
- Transcriptions are intelligently integrated into blog content
- Configure with
ENABLE_AUDIO_TRANSCRIPTION=true
- Admin-only routes properly protected
- Public blogs only accessible via tokens
Built with:
- Claude Code - Anthropic's AI development environment
- XaresAICoder - Enhanced AI coding tools
Educational use. Ensure proper API key licenses and dependency compliance.
Need help? Check the documentation or review the detailed guides for setup, usage, and deployment.
