Track your daily walks and visualize progress on a virtual journey between ANY two places in the world!
Interactive map with real road routing and progress tracking
Choose any start and end location worldwide
Track all your daily walks with dates and notes
- Screenshots
- Features
- Quick Start
- Installation
- Usage
- Firebase Cloud Sync
- Development
- Testing
- Deployment
- Customization
- Technologies
- Contributing
- Security
- License
- Contact
- π Fully Customizable Routes - Choose ANY start and end location worldwide
- π£οΈ Real Road Routing - Uses OpenStreetMap for actual roads (like Google Maps)
- π Progress Tracking - View total distance, remaining, and completion percentage
- π Daily Logging - Log walks with distance, date, and notes
- π Walk History - View, edit, and delete past walks
- π Current Position - See your virtual location on the route
- βοΈ Cloud Sync - Multi-device sync with Firebase (optional)
- π Google Sign-In - Secure authentication with SSO
- πΊοΈ Nearby Places - Discover points of interest within 20km
- π± PWA Support - Install on mobile devices, works offline
- π¨ Color-Coded Progress - Green for completed, blue for pending
- πΎ Data Export/Import - Backup and restore your walks
- π₯ Bulk Import - Import multiple walks at once
- Visit the live app: https://globe-trekker.web.app
- Choose your route (start and end locations)
- Start logging your daily walks!
# Clone the repository
git clone https://github.com/tonyif/walking-journey-tracker.git
cd walking-journey-tracker
# Install dependencies
npm install
# Open in browser
npx http-server .
# Visit http://localhost:8080- Modern web browser (Chrome, Firefox, Safari, Edge)
- Internet connection (for initial route setup and map tiles)
- Node.js 18+ (for development only)
# Install dependencies
npm install
# Run linter
npm run lint
# Run tests
npm test
# Run with coverage
npm run test:coverage
# Start local server
npx http-server .Option A: Quick Routes
- Click one of the preset routes:
- ποΈ Kanyakumari to Leh (~4,000 km)
- ποΈ Mumbai to Delhi (~1,400 km)
- π Chennai to Kolkata (~1,700 km)
- ποΈ Bangalore to Goa (~560 km)
Option B: Custom Route
- Enter any starting location (e.g., "Paris, France")
- Enter any destination (e.g., "Rome, Italy")
- Click "Start My Journey"
- Wait 5-10 seconds for route calculation
Distance: 5.5 km
Date: 2025-12-29
Notes: Morning jog, felt great!
- Total Distance: Cumulative km walked
- Remaining: Distance left to destination
- Current Location: Your virtual position
- Progress %: Completion percentage
Export Data
Click "π€ Export Data" to download a JSON fileImport Data
Click "π₯ Import Data" and select your JSON fileBulk Import
Format: YYYY-MM-DD, distance_km, notes
Example:
2025-12-25, 5.5, Christmas walk
2025-12-26, 6.2, Post-holiday jog
-
Create Firebase Project
- Go to Firebase Console
- Click "Add project"
- Enter project name: "walking-journey-tracker"
-
Enable Firestore
- Navigate to Firestore Database
- Click "Create database"
- Start in production mode
- Choose your region
-
Enable Authentication
- Go to Authentication β Sign-in method
- Enable "Google" provider
- Add authorized domain:
your-app.web.app
-
Get Configuration
- Project Settings β Your apps β Web app
- Copy Firebase config
- Paste into
firebase-sync.js:
const firebaseConfig = {
apiKey: "YOUR_API_KEY",
authDomain: "your-project.firebaseapp.com",
projectId: "your-project",
storageBucket: "your-project.appspot.com",
messagingSenderId: "123456789",
appId: "1:123456789:web:abc123"
};- Deploy Security Rules
firebase deploy --only firestore:rules- Click "βοΈ Sign In to Sync"
- Sign in with your Google account
- Your data automatically syncs across devices!
walking-journey-tracker/
βββ index.html # Main HTML file
βββ style.css # Styles
βββ app.js # Core application logic
βββ firebase-sync.js # Cloud sync functionality
βββ logger.js # Structured logging
βββ sw.js # Service worker (PWA)
βββ manifest.json # PWA manifest
βββ tests/ # Test suites
β βββ unit/ # Unit tests
β βββ setup.js # Test configuration
βββ package.json # Dependencies
βββ firebase.json # Firebase configuration
# Lint code
npm run lint
# Auto-fix linting issues
npm run lint:fix
# Format code
npm run format
# Check formatting
npm run format:check# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Generate coverage report
npm run test:coverageTest Coverage:
- 52 unit tests across 3 test suites
- Distance calculations (Haversine formula)
- Data validation (walks, dates, bulk import)
- Logger functionality
# Install Firebase CLI
npm install -g firebase-tools
# Login to Firebase
firebase login
# Initialize Firebase
firebase init hosting
# Select your project
# Public directory: . (current directory)
# Single-page app: No
# GitHub Actions: Yes (optional)
# Deploy
firebase deployYour app will be live at: https://your-project.web.app
# In repository settings:
# Pages β Source β Deploy from branch
# Branch: main, Folder: / (root)Upload all files to any static hosting provider:
- Netlify
- Vercel
- AWS S3 + CloudFront
- Azure Static Web Apps
Edit style.css:
:root {
--primary-color: #667eea; /* Main accent color */
--secondary-color: #764ba2; /* Gradient end color */
--success-color: #22c55e; /* Completed route */
--pending-color: #3b82f6; /* Pending route */
}Edit app.js to add more quick routes:
function setQuickRoute(start, end) {
document.getElementById('startLocation').value = start;
document.getElementById('endLocation').value = end;
}
// Add your custom route button in HTML
<button onclick="setQuickRoute('Tokyo, Japan', 'Kyoto, Japan')">
πΎ Tokyo to Kyoto
</button>// In app.js, initMap() function
map = L.map('map').setView([20.5937, 78.9629], 5); // Center & zoom- HTML5 - Structure
- CSS3 - Styling with gradients and animations
- JavaScript ES6+ - Core functionality with async/await
- Leaflet.js 1.9.4 - Interactive maps
- Font Awesome 6.4.0 - Icons
- Nominatim (OpenStreetMap) - Geocoding (location β coordinates)
- OSRM - Real road routing calculations
- Overpass API - Nearby points of interest
- Firebase Authentication - Google Sign-In
- Firebase Firestore - Real-time database
- Firebase Hosting - Static hosting with CDN
- Jest 29.7.0 - Testing framework
- @testing-library/dom - DOM testing utilities
- ESLint - JavaScript linting
- Prettier - Code formatting
We welcome contributions! See CONTRIBUTING.md for guidelines.
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Make your changes
- Run tests
npm test npm run lint - Commit changes
git commit -m "feat: add amazing feature" - Push to branch
git push origin feature/amazing-feature
- Open a Pull Request
If you discover a security vulnerability, please DO NOT open a public issue.
Instead, email: tony.issac@gmail.com
See SECURITY.md for our security policy.
- β HTTPS-only deployment (Firebase Hosting)
- β Firestore security rules (user data isolation)
- β Google SSO authentication
- β No sensitive data in client-side code
- β Input validation and sanitization
This project is licensed under the MIT License - see the LICENSE file for details.
Tony Isaac
- Email: tony.issac@gmail.com
- GitHub: @tonyif
Project Links:
- Live Demo: https://globe-trekker.web.app
- Repository: https://github.com/tonyif/walking-journey-tracker
- Issues: https://github.com/tonyif/walking-journey-tracker/issues
- OpenStreetMap - Map data and routing
- Leaflet.js - Interactive map library
- Firebase - Authentication and cloud sync
- OSRM - Real-time route calculations
See CHANGELOG.md for version history.
- Fitness app integration (Google Fit, Apple Health)
- Dark mode
- Multiple simultaneous routes
- Social sharing features
- Walking challenges and achievements
- Real-time location tracking
- AR walking mode
- Community leaderboards
- Walking groups and teams
Happy Walking! πΆββοΈπΆββοΈ
Made with β€οΈ for fitness enthusiasts worldwide