Skip to content

Releases: MeshMapper/MeshMapper_WebClient

v1.6.0 (2025-12-23)

23 Dec 12:45
3518a5b

Choose a tag to compare

Added

  • Passive RX listening with unified RX handler for continuous mesh monitoring
  • RX Log UI section with expandable panel showing passive observations
  • API batch queue system with smart flush triggers (TX: 3s, periodic: 30s, max: 50)
  • Error Log UI section auto-populated from debugError() calls
  • CSV export functionality for Session Log, RX Log, and Error Log
  • Copy buttons for one-click clipboard export of log data
  • Capacity check API reason code support with extensible message mapping
  • App version reporting to capacity check API
  • New documentation: COVERAGE_TYPES.md, PING_WORKFLOW. md, and flow diagrams

Changed

  • API posts now run in background (non-blocking) for better UI responsiveness
  • RX listening window adjusted from 7s to 6s
  • Shortened status messages for improved mobile display
  • Debug logging now uses standardized tags for all subsystems
  • Distance updates now triggered by GPS position changes (removed timer)

Fixed

  • Syntax error in debugError call at line 4113 (missing comma)

Removed

  • Deprecated handlePassiveRxLogEvent(), startPassiveRxListening(), stopPassiveRxListening() functions
  • Unused index-new.html file
  • distanceUpdateTimer and related functions

Documentation

  • Added CHANGES_SUMMARY. md with complete optimization details
  • Added OPTIMIZATION_REPORT.md with codebase analysis
  • Added flow diagrams for TX, RX, and API queue systems
  • Updated CONNECTION_WORKFLOW.md with passive RX and batch queue details
  • Updated STATUS_MESSAGES. md with new queue-related messages
  • Updated DEVELOPMENT_REQUIREMENTS.md with debug tag conventions

v1.5.0 - Refreshed UI

21 Dec 19:46
e38e0ea

Choose a tag to compare

Highlights

  • New two-bar status system: connection state is always clear, while operational messages (GPS/pings/API) appear separately.
  • New Session Log experience: cleaner, mobile-friendly, expandable log with repeater “chips” and live updates during the RX window.
  • Improved MeshMapper API safety: capacity checks now provide a required session_id, and all posts include it.

Added

  • Connection Status Bar with fixed states: Connected / Connecting / Disconnecting / Disconnected.
  • Dynamic Status Bar for operational messages with:
    • minimum visibility handling,
    • em dash () idle placeholder,
    • protection against connection-state words appearing in the wrong place.
  • Session log UI (expand/collapse) with:
    • structured entries (time + coords + heard repeater chips),
    • SNR severity coloring,
    • mobile responsiveness,
    • incremental updates while repeaters are detected.
  • Tailwind build tooling:
    • package.json, package-lock.json, tailwind.config.js
    • README instructions for building/watching CSS.
  • Documentation improvements:
    • New implementation summary document.
    • Updated connection workflow and status message docs to reflect the two-bar model.

Changed

  • MeshMapper API integration:
    • Capacity check now stores a session_id for the wardrive session.
    • API posts now include session_id.
  • UI layout overhaul in index.html:
    • Settings panel accessible from the connection bar.
    • Map overlays reorganized.
    • Controls layout updated (ping controls always visible but disabled when not connected).
  • DEV deploy pipeline now stamps DEV builds with DEV-<epoch> and injects it into the UI version span.

Fixed

  • Manual ping blocked during auto mode now resumes auto countdown (prevents UI from getting stuck on skip messages).
  • Auto mode now schedules the next ping even if an API post is skipped due to missing captured coordinates.
  • GPS errors now display in the dynamic status bar (instead of cluttering the GPS block).
  • Minor formatting tweaks (distance shown as ∆Xm, accuracy formatting tightened).

Notes / Compatibility

  • Tailwind CSS output updated (generated file changes included).
  • If session_id is missing, the app now fails closed (shows error and disconnects) to avoid posting invalid data.

v1.4.1 - Added iATA code to pings

20 Dec 19:58
aedd170

Choose a tag to compare

What's Changed

Full Changelog: v1.4.0...v1.4.1

v1.4.0 - Major changes

20 Dec 05:35
e413d44

Choose a tag to compare

📋 Detailed Changelog for Release v1.4.0
MeshCore GOME WarDriver - Release v1.4.0 Changelog
🆕 New Features

Capacity Management System

Added slot availability checking via MeshMapper API (capacitycheck. php)
Implemented fail-closed behavior: connection denied if API is unreachable or returns errors
Added automatic slot release on disconnect
Added real-time slot revocation detection during active sessions
Device public key is now sent to API for unique device identification

App Version Tracking

Added build-time version injection (APP_VERSION constant)
Version now included in MeshMapper API payloads (ver field)
DEV builds show epoch timestamp (DEV-<EPOCH>)
Release builds show semantic version (v1.4.0)

Enhanced Connection Flow

Reordered connection sequence: capacity check now occurs before channel/GPS setup
Added granular status messages throughout connection process:
    "Acquiring wardriving slot"
    "Acquired wardriving slot"
    "Looking for #wardriving channel"
    "Channel #wardriving found" / "Channel #wardriving not found"
    "Created #wardriving"
    "Priming GPS"

Improved Disconnect Handling

Added disconnect reason tracking (disconnectReason state)
Context-specific disconnect messages:
    "Disconnected: WarDriving app has reached capacity"
    "Disconnected: WarDriving app is down"
    "Disconnected: WarDriving slot has been revoked"
    "Disconnected: Unable to read device public key"
    "Disconnected: [Channel setup error message]"

Ping Control Locking

Ping controls now remain locked for entire ping lifecycle
Controls unlock only after API post completes or error occurs
Prevents starting new pings while previous ping is still processing

🐛 Bug Fixes

Fixed ping controls unlocking prematurely before API post completes
Fixed disconnected messages being queued instead of showing immediately
Fixed status message ordering in disconnect flows
Fixed status message ordering in capacity check failure flow
Fixed slot revocation check to parse API response regardless of HTTP status

📚 Documentation

Added comprehensive docs/CONNECTION_WORKFLOW.md with:
    Detailed connection/disconnection sequences
    Mermaid workflow diagrams
    Code references
    Edge cases and gotchas
Added docs/DEVELOPMENT_REQUIREMENTS.md with coding standards
Moved and updated docs/STATUS_MESSAGES.md:
    Added 13 new status message entries
    Fixed spelling: "Acquired" (not "Aquired")
    Organized into logical sections

🔧 Technical Changes

Added BufferUtils import for public key hex conversion
Added new state properties: devicePublicKey, disconnectReason, channelSetupErrorMessage, bleDisconnectErrorMessage
Added unlockPingControls() helper function
Updated cleanupAllTimers() to clear device public key
Updated GitHub Actions deploy workflow to inject version into both visual display and JS constant

v1.3.0 - adds Repeater Echo Tracking

19 Dec 23:43
efbd235

Choose a tag to compare

Changelog - Version 1.3.0

Release Date: December 19, 2025

TL;DR

v1.3.0 adds Repeater Echo Tracking - the app now listens for 7 seconds after each ping to detect which repeaters echoed your message, logs their IDs and SNR values, and sends this data to the MeshMapper API. Also includes a revamped status message system that prevents flickering and ensures messages are readable.


🎯 Major Features

Repeater Echo Tracking System (Heard Repeats)

A comprehensive system to track and report which mesh repeaters echoed your wardriving pings:

  • Real-time RX Log Listening: 7-second listening window after each ping to capture repeater echoes
  • Message Correlation: Uses SHA-256 derived channel hash to verify incoming messages belong to the #wardriving channel
  • AES-ECB Decryption: Full message payload decryption to confirm echoes match your original ping (prevents false positives from other channel traffic)
  • Repeater Deduplication: Tracks unique repeater IDs with best SNR values
  • API Integration: heard_repeats field now sent to MeshMapper API (format: 4e(11. 5),77(9.75) or None)
  • Session Log Updates: UI now shows repeater telemetry for each ping in format: timestamp | lat,lon | repeaters

Status Message System Overhaul

  • Minimum Visibility Enforcement: All status messages now remain visible for at least 500ms before being replaced
  • Smart Queue Management: Prevents status message flickering during rapid state changes
  • Countdown Timer Optimization: First countdown update respects 500ms minimum, subsequent updates are immediate for smooth display
  • Hybrid Countdown Approach: Ensures important messages like "Ping sent" are readable before countdown timers begin

📝 Documentation

New: STATUS_MESSAGES. md

Comprehensive documentation of all 25 status message patterns in the application:

  • Connection status messages (7 messages)
  • Ping operation messages (6 messages)
  • GPS status messages (2 messages)
  • Countdown timer messages (6 patterns)
  • API/Map update messages (2 messages)
  • Auto mode messages (3 messages)

🔧 Improvements

UI/UX Improvements

  • Consolidated Ping Success Messages: "Ping sent" now used for both manual and auto pings (previously separate messages)
  • Improved Status Text Consistency:
    • "geo fenced" → "geofenced" (proper compound word)
    • "Ping skipping" → "Ping skipped" (consistent past tense)
    • Removed "Please" from wait messages for consistent, direct tone
    • "Connecting…" → "Connecting" (removed ellipsis for consistency)
    • "Failed to connect" → "Connection failed" (consistent error format)
  • Session Ping Log Format: Now uses ISO timestamps and structured format with repeater data

Technical Improvements

  • Pre-computed Channel Keys: Wardriving channel hash and encryption key computed once at startup for performance
  • Captured Ping Coordinates: GPS coordinates captured at ping time and used for API post (ensures accuracy)
  • Improved Payload Building: Cleaner payload string construction with proper trimming
  • Added aes-js Library: External library for AES-ECB decryption support (CDN loaded)

Code Quality

  • New Constants: RX_LOG_LISTEN_WINDOW_MS (7000ms) for configurable listen window
  • Expanded State Object: New repeaterTracking object with proper lifecycle management
  • Enhanced Debug Logging: Detailed logging for repeater tracking, decryption, and message correlation
  • Removed Unused Config: Cleaned up content/config.js reference from index.html

🐛 Bug Fixes

  • Fixed status message race conditions during rapid ping/countdown transitions
  • Fixed potential memory leak from uncleared status message timers on disconnect

📦 Dependencies

  • Added: aes-js@3.1.2 (CDN) for AES-ECB decryption

⚠️ Breaking Changes

  • None - API changes are additive only (heard_repeats field)

Full Diff: [main...dev](https://github.com/MrAlders0n/MeshCore-GOME-WarDriver/compare/main... dev)

v1.2.1 - Channel Management

19 Dec 02:30
2575859

Choose a tag to compare

Changelog - v1.2.1

🚀 Version Update

  • Version bumped from 1.0.1 to 1.2.1

✨ New Features

Dynamic Channel Key Derivation

  • Added deriveChannelKey() function that generates a 16-byte channel key from any hashtag channel name using SHA-256 hashing
    • Supports any hashtag channel (e.g., #wardriving, #wardrive, #test)
    • Validates channel name format (must start with # and contain only letters, numbers, and dashes)
    • Normalizes channel names to lowercase following MeshCore convention
    • Uses Web Crypto API with proper error handling for environments lacking crypto support

Automatic Channel Creation

  • Added createWardriveChannel() function that automatically creates the wardriving channel if it doesn't exist
    • Finds the first available empty channel slot
    • Throws descriptive error if no channel slots are available
    • Uses derived channel key for secure channel creation

Enhanced Channel Management

  • Updated ensureChannel() function to automatically create channels when not found
    • Attempts to create the channel if lookup fails
    • Provides better error messages for troubleshooting
    • Eliminates the need for manual channel creation on companion devices

Automatic Channel Cleanup

  • Added channel deletion on disconnect
    • Automatically removes the wardriving channel when disconnecting
    • Prevents channel slot pollution on companion devices
    • Includes graceful error handling (disconnect continues even if deletion fails)

🔧 Improvements

Security Enhancements

  • Removed hardcoded encryption key (WARDROVE_KEY)
    • Replaced with dynamic key derivation for better security practices
    • Each channel now derives its own unique key from the channel name

User Experience

  • Better error messages throughout the channel management flow
  • More informative debug logging for troubleshooting
  • Reduced manual setup requirements (no need to pre-create channels)

🐛 Bug Fixes

  • None in this release

📝 Documentation

  • Updated README. md badge to reflect version 1.2.1

Breaking Changes: None - This is a backwards-compatible enhancement release.

Migration Notes: Users no longer need to manually create the #wardriving channel on their companion devices before connecting. The app will create it automatically.

v1.2.0 - Geofence/Distance Tracking

19 Dec 01:32
1f13996

Choose a tag to compare

Release Notes - v1.2.0

Release Date: 2025-12-19


🎉 What's New

🌍 Geofence Validation

Pings are now restricted to a 150km radius around Ottawa (centered on Parliament Hill). This ensures all wardrive data stays within the coverage mapping region and prevents accidental data submissions from outside the target area.

📏 Minimum Distance Filtering

A new 25-meter minimum distance requirement between consecutive pings has been added. This prevents duplicate data points when stationary or moving slowly, resulting in cleaner and more meaningful coverage data.

📍 Distance from Last Ping Display

The UI now shows real-time distance from your last successful ping location, helping you know when you've moved far enough for a new ping to be accepted.

🐛 Debug Mode

Developers and advanced users can now enable detailed logging by adding ?debug=true to the URL. This provides extensive console output for troubleshooting connection issues, GPS problems, and ping failures.


⚙️ Improvements

⏱️ Timer System Refactoring

  • Auto-ping countdown now pauses when you send a manual ping and resumes afterward
  • More reliable timer management with better clock skew handling
  • Cleaner countdown display with consistent status messaging

🎨 Status Color Consistency

Standardized color coding across all status messages:

  • 🟢 Green - Success (ping sent, connected)
  • 🟡 Amber - Warning (skipped pings, cooldown)
  • 🔴 Red - Error (disconnected, failures)
  • 🔵 Blue - Info (connecting, sending)
  • Gray - Idle (waiting)

📍 GPS Handling

  • Improved handling of GPS watch data during manual pings
  • Better fallback logic when GPS data becomes stale
  • More informative status messages when GPS issues occur

🧹 Code Quality

  • Refactored countdown timers into reusable components
  • Centralized timer cleanup on disconnect
  • Better separation of concerns throughout the codebase

📚 Documentation

  • README updated with detailed instructions for joining the #wardriving channel in the MeshCore app before using the web app
  • Step-by-step setup guides improved for both Android and iOS

🔧 Technical Details

New Configuration Constants

Constant Value Description
OTTAWA_GEOFENCE_RADIUS_M 150,000m Geofence radius around Ottawa
MIN_PING_DISTANCE_M 25m Minimum distance between pings
GPS_WATCH_MAX_AGE_MS 60,000ms Max age for GPS data in manual pings
MIN_PAUSE_THRESHOLD_MS 1,000ms Minimum timer value to pause
MAX_REASONABLE_TIMER_MS 300,000ms Maximum timer value (clock skew protection)

New Functions

  • calculateHaversineDistance() - Accurate distance calculation between GPS coordinates
  • validateGeofence() - Check if coordinates are within Ottawa region
  • validateMinimumDistance() - Check if moved 25m+ from last ping
  • createCountdownTimer() - Generalized countdown timer factory
  • debugLog(), debugWarn(), debugError() - Conditional debug logging

⬆️ Upgrade Notes

This is a non-breaking update. Simply refresh the web app to get the latest version. No configuration changes are required.

Note: If you're testing outside the Ottawa region (150km from Parliament Hill), pings will be blocked with a "Ping skipped, outside of geo fenced region" message.


🙏 Acknowledgments

Thanks to everyone testing and providing feedback on the MeshCore wardrive coverage mapping project!


What's Changed

  • Refactor and optimize wardrive.js with comprehensive debug logging by @Copilot in #46
  • Fix manual ping timeout after stopping auto ping by @Copilot in #48
  • Add GPS status feedback and freshness validation for ping operations by @Copilot in #49
  • Add live countdown for GPS skip in auto-ping mode by @Copilot in #50
  • Fix auto ping timer conflict during manual ping by @Copilot in #52
  • Add GPS geofence and distance-based ping filtering for Ottawa region by @Copilot in #53
  • Add geofence validation, distance filtering, and debug mode by @MrAlders0n in #54

Full Changelog: v1.1.1...v1.2.0

Minor fix of repo deployment structure between prod and dev

18 Dec 16:52
931b7aa

Choose a tag to compare

What's Changed

  • Updated repo settings, various other templates by @MrAlders0n in #29
  • Update README.md for version 1.0.1: Revise quick start instructions a… by @MrAlders0n in #31
  • Fix dev deployment: copy content directory and use relative imports by @Copilot in #44
  • Dev by @MrAlders0n in #45

v1.1.0 - Failed Ping Support

18 Dec 01:02
372fbaa

Choose a tag to compare

What’s Changed

🚨 Failed Ping Detection (New)

The biggest update in this release is support for failed ping detection.

The app now sends a ping on the MeshCore network while simultaneously posting it to the MeshMapper API. Backend logic on meshmapper.net tracks each API submission, and if the same message is not observed on the MeshCore network, the point is automatically marked in red to indicate no coverage.

Special thanks to @CSP-Tom for implementing the backend changes that made this possible.

MeshMapper Integration

  • Automatic MeshMapper API posting now occurs on every ping.
  • API posts are delayed by 7 seconds after ping transmission to allow the network time to respond.
  • Cooldown protection added to prevent duplicate or overlapping API submissions.
  • API post lifecycle is now fully reflected in status messages and map refresh timing.

Auto Ping Improvements

  • Auto ping now uses a proper countdown timer that is strictly tied to ping transmission.
  • Fixed an issue where auto ping could fire early due to timer desynchronization.
  • Status flow has been corrected to follow this sequence:
    • Countdown
    • Ping sent
    • Waiting for API
    • Map refresh
    • Countdown restart
  • Countdown conflicts between timers have been eliminated.

GPS Stability Fixes

  • Fixed GPS watch interruptions caused by the auto ping lifecycle.
  • GPS updates now continue reliably while waiting for API responses.
  • Improved GPS status handling during both manual and automatic pings.

Map Refresh Behavior

  • Map iframe refresh timing has been aligned with API post completion.
  • Prevented premature map reloads that caused zoom and state resets.

v1.0.1

17 Dec 17:21
15473f2

Choose a tag to compare

What's Changed

  • Fix GPS fix issues in Bluefy webapp by @Copilot in #2
  • Ensure GPS updates interval and accuracy for iOS and Android by @Copilot in #3
  • Handle channel validation errors during connection by @Copilot in #4
  • Update default status options for device and channel by @Copilot in #5

New Contributors

  • @Copilot made their first contribution in #2

Full Changelog: v1.0.0...v1.0.1