Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
112 commits
Select commit Hold shift + click to select a range
4167b69
Initial plan
Copilot Dec 20, 2025
5b14f7f
Add settings panel HTML and JavaScript state management
Copilot Dec 20, 2025
f831d56
Fix JavaScript initialization order issue
Copilot Dec 20, 2025
6ff1aae
Fix button layout for connected state - separate Connect and Disconne…
Copilot Dec 20, 2025
2eab069
Simplify to single Connect/Disconnect button that changes text and ap…
Copilot Dec 20, 2025
18e1c9a
Remove N/A option from Radio Power and change to 3-column layout
Copilot Dec 20, 2025
8dc0678
Fix radio button layout to display options side-by-side using flexbox
Copilot Dec 20, 2025
3a9beb8
Implement new status bar layout with map overlays and channel status …
Copilot Dec 20, 2025
11e6d57
Add status messages below connection status and reverse session logs …
Copilot Dec 20, 2025
5d8a8e8
Add app title with version and move status messages to dedicated box
Copilot Dec 20, 2025
099e549
Add device name to connected status display
Copilot Dec 20, 2025
93054d5
Add GPS coordinates and time since update to map center overlay
Copilot Dec 20, 2025
7a8e8c7
Fix map overlays to display horizontally in single row
Copilot Dec 20, 2025
d447639
Merge pull request #95 from MrAlders0n/copilot/refactor-ui-progressiv…
MrAlders0n Dec 20, 2025
ac72296
Revert "Implement mobile-first UI with status bar, three-part map ove…
MrAlders0n Dec 21, 2025
22b9b13
Merge pull request #98 from MrAlders0n/revert-95-copilot/refactor-ui-…
MrAlders0n Dec 21, 2025
28601a4
Add initial HTML structure and styling for MeshCore Wardrive app
MrAlders0n Dec 21, 2025
17c1584
Initial plan
Copilot Dec 21, 2025
864a5d8
Modernize index.html with new UI layout and styling
Copilot Dec 21, 2025
470ee4a
Add device info to status bar for visibility
Copilot Dec 21, 2025
4bcac21
Add 'Status:' label to status bar for clarity
Copilot Dec 21, 2025
72d00fe
Implement two-bar layout: connection status and dynamic app status
Copilot Dec 21, 2025
3cfdd7f
Simplify status message bar: remove label and duplication
Copilot Dec 21, 2025
21523fe
Merge pull request #99 from MrAlders0n/copilot/update-status-messages…
MrAlders0n Dec 21, 2025
13f919b
Initial plan
Copilot Dec 21, 2025
3e2e878
Implement two-bar status separation in code
Copilot Dec 21, 2025
3c6aea6
Update documentation for two-bar status system
Copilot Dec 21, 2025
23d0fba
Add implementation summary document
Copilot Dec 21, 2025
af714e0
Merge pull request #100 from MrAlders0n/copilot/update-status-message…
MrAlders0n Dec 21, 2025
f059f39
Initial plan
Copilot Dec 21, 2025
021d268
Update deployment script to inject DEV badge with epoch timestamp in …
MrAlders0n Dec 21, 2025
2bfc889
Fix STATUS_COLORS initialization error by moving definition before fi…
Copilot Dec 21, 2025
01996f7
Refactor DEV version injection in deployment script for clarity and c…
MrAlders0n Dec 21, 2025
1c9d2a1
Merge pull request #101 from MrAlders0n/copilot/fix-js-reference-error
MrAlders0n Dec 21, 2025
2c49eb2
Replace em dash with "Idle" for dynamic status updates in connection …
MrAlders0n Dec 21, 2025
9f09c13
Refactor DEV version injection to update UI display and JS constant w…
MrAlders0n Dec 21, 2025
2c6cf20
Update status message placeholder to use em dash for improved clarity
MrAlders0n Dec 21, 2025
8667949
Initial plan
Copilot Dec 21, 2025
44ac83b
Implement UI improvements: gate Connect, always show ping controls, i…
Copilot Dec 21, 2025
e017218
Fix bottom map stats bar height - remove unused mapGpsAge div
Copilot Dec 21, 2025
2b636dd
Change status message color to grey and fix button sizing with flexbox
Copilot Dec 21, 2025
42990c7
Add w-full to ping controls container for proper button width matching
Copilot Dec 21, 2025
7c58fd3
Merge pull request #102 from MrAlders0n/copilot/add-debug-logging-req…
MrAlders0n Dec 21, 2025
7acdc7d
Fix ping controls button width to ensure proper layout
MrAlders0n Dec 21, 2025
906f7ed
Initial plan
Copilot Dec 21, 2025
f95330c
Add Tailwind CSS build configuration and regenerate CSS with missing …
Copilot Dec 21, 2025
b371b41
Complete Tailwind build fix - all tests passed
Copilot Dec 21, 2025
45e29e8
Merge pull request #103 from MrAlders0n/copilot/fix-tailwind-build-pi…
MrAlders0n Dec 21, 2025
37259fc
Update distance UI to specify distance as "m away"
MrAlders0n Dec 21, 2025
6c66f0c
Unhide settings panel in the UI for improved accessibility
MrAlders0n Dec 21, 2025
968c936
Initial plan
Copilot Dec 21, 2025
689a6be
Implement UI/UX updates: settings close button, height alignment, war…
Copilot Dec 21, 2025
40b4e09
Fix status bar height alignment by reducing padding to py-1.5
Copilot Dec 21, 2025
fd8b05f
Reduce icon sizes to achieve equal height for status bars
Copilot Dec 21, 2025
6f4ebf4
Make Settings Panel extend from Connection Bar
Copilot Dec 21, 2025
5687869
Merge pull request #105 from MrAlders0n/copilot/update-debug-logging-…
MrAlders0n Dec 21, 2025
133862d
Refactor settings panel to ensure it is always visible and improve la…
MrAlders0n Dec 21, 2025
0e93e7a
Refactor connection bar corner rounding logic for settings panel visi…
MrAlders0n Dec 21, 2025
006005d
Refactor header layout for improved responsiveness and visual consist…
MrAlders0n Dec 21, 2025
e3f5743
Fix formatting of distance and GPS accuracy display for consistency
MrAlders0n Dec 21, 2025
d8cfd6f
Refactor map overlays for improved layout and visibility of GPS accur…
MrAlders0n Dec 21, 2025
b5cfdda
Remove redundant iframe from map section to streamline layout
MrAlders0n Dec 21, 2025
1c05f34
Initial plan
Copilot Dec 21, 2025
7b46dc1
Refactor map section overlays for improved layout and visibility of G…
MrAlders0n Dec 21, 2025
f578e2f
Fix race condition in ping coordinates during concurrent ping operations
Copilot Dec 21, 2025
0c52224
Fix iframe source URL and improve overlay z-index for better visibility
MrAlders0n Dec 21, 2025
be035e0
Fix z-index style for GPS accuracy and distance overlay for improved …
MrAlders0n Dec 21, 2025
c6acbb0
Fix z-index style for GPS accuracy and distance overlay for improved …
MrAlders0n Dec 21, 2025
3549af7
Refactor map overlays for improved layout and visibility of GPS accur…
MrAlders0n Dec 21, 2025
38237d6
Initial plan
Copilot Dec 21, 2025
7c15425
Reposition GPS overlay elements on coverage map iframe
Copilot Dec 21, 2025
13224f7
Rebuild Tailwind CSS to include z-10 and top-2 classes
Copilot Dec 21, 2025
ce43490
Merge pull request #108 from MrAlders0n/copilot/reposition-gps-overla…
MrAlders0n Dec 21, 2025
88d94da
Update distance UI format to include delta symbol for clarity
MrAlders0n Dec 21, 2025
e0318a3
Update distance display to include delta symbol for clarity
MrAlders0n Dec 21, 2025
53366cb
Initial plan
Copilot Dec 21, 2025
84e1180
Fix dynamic status bar font to match connection status bar
Copilot Dec 21, 2025
a56c443
Merge pull request #109 from MrAlders0n/copilot/update-font-dynamic-s…
MrAlders0n Dec 21, 2025
c614352
Merge pull request #107 from MrAlders0n/copilot/fix-race-condition-in…
MrAlders0n Dec 21, 2025
281a3c6
Initial plan
Copilot Dec 21, 2025
441d7c2
Fix manual ping skip status during auto mode
Copilot Dec 21, 2025
1d62bf3
Refactor: Extract duplicate countdown resume logic
Copilot Dec 21, 2025
ded68e1
Add JSDoc documentation to helper function
Copilot Dec 21, 2025
8491055
Improve function naming for clarity
Copilot Dec 21, 2025
eb16fac
Merge pull request #110 from MrAlders0n/copilot/update-status-message…
MrAlders0n Dec 21, 2025
a13be9f
Initial plan
Copilot Dec 21, 2025
4607b5d
Add session_id support to wardrive client
Copilot Dec 21, 2025
2b97eda
Merge pull request #111 from MrAlders0n/copilot/update-debug-logging-…
MrAlders0n Dec 21, 2025
6a6a64c
Initial plan
Copilot Dec 21, 2025
5765899
Add mobile-friendly bottom sheet session log UI with chip-based layout
Copilot Dec 21, 2025
89ac5d3
Complete mobile session log UI with bottom sheet and SNR-colored chips
Copilot Dec 21, 2025
e2fa5ce
Merge pull request #112 from MrAlders0n/copilot/refactor-session-log-ui
MrAlders0n Dec 21, 2025
dd86e97
Fix mobile session log bottom sheet transform property for improved p…
MrAlders0n Dec 21, 2025
f09a1af
Initial plan
Copilot Dec 21, 2025
39cd890
Fix session log expand/collapse and move to static position
Copilot Dec 21, 2025
32f6455
Merge pull request #113 from MrAlders0n/copilot/update-debug-logging-…
MrAlders0n Dec 21, 2025
8c8fc2b
Initial plan
Copilot Dec 21, 2025
02a456d
Modernize settings icons with mobile-friendly SVG icons
Copilot Dec 21, 2025
cfea57a
Initial plan
Copilot Dec 21, 2025
3451adb
Add dB suffix to SNR values and debug logging
Copilot Dec 21, 2025
7479736
Fix session log rendering by adding style.css link to HTML
Copilot Dec 21, 2025
e4c836c
Merge pull request #115 from MrAlders0n/copilot/update-debug-logging-…
MrAlders0n Dec 21, 2025
cb7120e
Polish settings UI: match bar heights, reduce spacing, circular close…
Copilot Dec 21, 2025
f705e36
Initial plan
Copilot Dec 21, 2025
a3fe503
Merge pull request #114 from MrAlders0n/copilot/add-debug-logging-gui…
MrAlders0n Dec 21, 2025
41722d5
Implement Session Log UI enhancements
Copilot Dec 21, 2025
5b02107
Merge branch 'dev' into copilot/add-debug-logging-guidelines-again
MrAlders0n Dec 21, 2025
73e1dc8
Merge pull request #116 from MrAlders0n/copilot/add-debug-logging-gui…
MrAlders0n Dec 21, 2025
fdcb6a2
Initial plan
Copilot Dec 21, 2025
dce827b
Implement dynamic incremental updates for heard repeats count
Copilot Dec 21, 2025
e03776d
Refactor: reduce code duplication in repeater update logic
Copilot Dec 21, 2025
82379ef
Merge pull request #117 from MrAlders0n/copilot/update-heard-repeats-…
MrAlders0n Dec 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,13 @@ jobs:
cp -r dev-content/* _site/dev/ 2>/dev/null || true
cp -r dev-content/content _site/dev/ 2>/dev/null || true

# Inject dev badge with date (visual display and JS constant with DEV-EPOCH format)
DEV_DATE=$(date -u +"%Y-%m-%d %H:%M UTC")
# Inject DEV version (visual display) and JS constant with DEV-EPOCH format
DEV_EPOCH=$(date -u +%s)
sed -i 's|MeshCore Wardrive</h1>|MeshCore Wardrive <span class="ml-2 px-2 py-0.5 text-xs font-semibold rounded bg-amber-600/20 text-amber-400 border border-amber-600/40">DEV</span> <span class="text-xs text-slate-500">'"${DEV_DATE}"'</span></h1>|' _site/dev/index.html
# Replace the visible version in the dedicated span (this is what the UI shows)
sed -i 's|<span id="appVersion"[^>]*>[^<]*</span>|<span id="appVersion" class="text-sm text-slate-400">DEV-'"${DEV_EPOCH}"'</span>|' _site/dev/index.html
# Inject into JS constant
sed -i 's|const APP_VERSION = "UNKNOWN";|const APP_VERSION = "DEV-'"${DEV_EPOCH}"'";|' _site/dev/content/wardrive.js

find _site -name ". git" -exec rm -rf {} + 2>/dev/null || true
find _site -name ".github" -exec rm -rf {} + 2>/dev/null || true

Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,4 @@ Thumbs.db

# Temporary files
tmp/
test-log-ui.html
187 changes: 187 additions & 0 deletions IMPLEMENTATION_SUMMARY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
# Two-Bar Status System - Implementation Summary

## Overview
This implementation separates connection status from operational status into two independent status bars.

## Visual Structure

```
┌────────────────────────────────────────────────────────┐
│ Connection Status Bar (#connectionStatus) │
│ ● Connected │
└────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────┐
│ Dynamic App Status Bar (#status) │
│ Ping sent │
└────────────────────────────────────────────────────────┘
```

## Connection Status Bar
**Purpose**: Shows ONLY connection state
**Location**: Top bar with status indicator dot
**Messages**: Exactly 4 fixed states

### The Four States
1. **Connected** (green) - Ready for wardriving after GPS init completes
2. **Connecting** (blue) - During entire connection process (steps 1-9)
3. **Disconnected** (red) - No device connected
4. **Disconnecting** (blue) - During entire disconnection process

### Key Behavior
- Updates immediately (no delay)
- Never shows operational messages
- Controlled by `setConnStatus(text, color)`

## Dynamic App Status Bar
**Purpose**: Shows ALL operational messages
**Location**: Status message box below connection bar
**Messages**: ~30 different operational messages

### Message Types
- GPS status ("Priming GPS", "Waiting for GPS fix")
- Channel setup ("Looking for #wardriving channel", "Created #wardriving")
- Capacity check ("Acquiring wardriving slot", "Acquired wardriving slot")
- Ping operations ("Sending manual ping", "Ping sent")
- Countdown timers ("Waiting for next auto ping (15s)")
- API operations ("Posting to API")
- Error messages ("WarDriving app has reached capacity")
- Empty placeholder (em dash: `—`)

### Key Behavior
- 500ms minimum visibility for first display
- Immediate updates for countdown timers
- Shows `—` when no message present
- Blocks connection words (Connected/Connecting/Disconnecting/Disconnected)
- Controlled by `setDynamicStatus(text, color, immediate)`

## Connection Flow Example

### During Connection
```
Time | Connection Bar | Dynamic Bar
------|------------------|---------------------------
0s | Connecting | —
1s | Connecting | Acquiring wardriving slot
3s | Connecting | Acquired wardriving slot
4s | Connecting | Looking for #wardriving channel
5s | Connecting | Channel #wardriving found
6s | Connecting | Priming GPS
8s | Connected | —
```

### During Disconnection (Normal)
```
Time | Connection Bar | Dynamic Bar
------|------------------|---------------------------
0s | Disconnecting | —
1s | Disconnected | —
```

### During Disconnection (Error - Capacity Full)
```
Time | Connection Bar | Dynamic Bar
------|------------------|---------------------------
0s | Disconnecting | —
1s | Disconnected | WarDriving app has reached capacity
```

## Key Implementation Details

### Function Signatures
```javascript
// Connection Status Bar
setConnStatus(text, color)
// Example: setConnStatus("Connected", STATUS_COLORS.success)

// Dynamic App Status Bar
setDynamicStatus(text, color, immediate = false)
// Example: setDynamicStatus("Ping sent", STATUS_COLORS.success)
// Example: setDynamicStatus("—") // Empty state
```

### Protection Mechanisms
1. **Em Dash Normalization**: Empty/null/whitespace values become `—`
2. **Connection Word Blocking**: Prevents connection words in dynamic bar
3. **Minimum Visibility**: First dynamic message respects 500ms minimum
4. **Countdown Updates**: Immediate updates every second after first display

### Error Message Changes
All error messages in dynamic bar NO LONGER have "Disconnected:" prefix:

**Before**:
- `"Disconnected: WarDriving app has reached capacity"`
- `"Disconnected: WarDriving slot has been revoked"`

**After**:
- Connection Bar: `"Disconnected"`
- Dynamic Bar: `"WarDriving app has reached capacity"`
- Dynamic Bar: `"WarDriving slot has been revoked"`

## Files Modified

### Code
- `content/wardrive.js`
- Added `setConnStatus()` function
- Added `setDynamicStatus()` function
- Updated ~30+ status calls throughout
- Updated countdown timer integration
- Updated error handling

### Documentation
- `docs/STATUS_MESSAGES.md`
- Complete rewrite with two-bar system
- Connection Status Bar section (4 messages)
- Dynamic App Status Bar section (~30 messages)
- Implementation details and examples

- `docs/CONNECTION_WORKFLOW.md`
- Updated all workflow steps with separate bars
- Connection sequence clearly shows both bars
- Disconnection sequence clearly shows both bars
- Error flows updated without prefix

## Testing Checklist

### Connection Workflow
- [ ] Connection bar shows "Connecting" from start to GPS init
- [ ] Connection bar shows "Connected" only after GPS init completes
- [ ] Dynamic bar shows intermediate messages (capacity check, channel setup, GPS)
- [ ] Dynamic bar clears to `—` when connection completes

### Disconnection Workflow
- [ ] Connection bar shows "Disconnecting" during disconnect process
- [ ] Connection bar shows "Disconnected" after cleanup completes
- [ ] Dynamic bar shows `—` for normal disconnect
- [ ] Dynamic bar shows error message (without prefix) for error disconnect

### Error Scenarios
- [ ] Capacity full: Connection bar "Disconnected", Dynamic bar "WarDriving app has reached capacity"
- [ ] App down: Connection bar "Disconnected", Dynamic bar "WarDriving app is down"
- [ ] Slot revoked: Connection bar "Disconnected", Dynamic bar "WarDriving slot has been revoked"
- [ ] Public key error: Connection bar "Disconnected", Dynamic bar "Unable to read device public key; try again"

### Dynamic Messages
- [ ] Ping operations show in dynamic bar only
- [ ] GPS status shows in dynamic bar only
- [ ] Countdown timers show in dynamic bar with smooth updates
- [ ] API posting shows in dynamic bar only
- [ ] Connection words NEVER appear in dynamic bar
- [ ] Em dash (`—`) appears when no message to display

### Visual Appearance
- [ ] Connection status indicator dot changes color with connection state
- [ ] Both bars visible and clearly separated
- [ ] Messages properly colored (green success, blue info, red error, etc.)
- [ ] No visual glitches during transitions

## Summary

This implementation successfully separates connection state management from operational status display, providing:

1. **Clear Connection State**: Always visible in top bar
2. **Rich Operational Feedback**: All app operations in dynamic bar
3. **Better UX**: Users can see connection state AND what the app is doing
4. **Consistent Behavior**: Connection bar for state, dynamic bar for everything else
5. **Proper Error Handling**: Error reasons clearly shown without confusion

The code is complete, documented, and ready for testing and deployment.
21 changes: 21 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,27 @@ This app automatically posts ping data to the YOW MeshMapper API to help compare

---

## 🛠️ Development

### Building Tailwind CSS

This project uses Tailwind CSS v4 to generate the styles. If you make changes to the HTML or need to rebuild the CSS:

```bash
# Install dependencies
npm install

# Build CSS once
npm run build:css

# Watch for changes and rebuild automatically
npm run watch:css
```

The CSS is generated from `content/tailwind-in.css` and outputs to `content/tailwind.css`.

---

## 🙏 Credits

This project is a fork and adaptation:
Expand Down
121 changes: 121 additions & 0 deletions content/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -177,4 +177,125 @@ body,
.mesh-control .top-rpt-row div:last-child {
flex: 0 0 auto;
white-space: nowrap;
}

/* Session Log - Static Expandable Section */
#logBottomSheet.open {
display: block !important;
}

#logExpandArrow.expanded {
transform: rotate(180deg);
}

/* Log Entry Styling */
.logEntry {
display: flex;
flex-direction: column;
gap: 0.5rem;
padding: 0.75rem;
background: rgba(15, 23, 42, 0.5);
border: 1px solid rgba(51, 65, 85, 0.7);
border-radius: 0.5rem;
}

.logRowTop {
display: flex;
justify-content: space-between;
align-items: center;
font-size: 0.75rem;
color: #cbd5e1;
}

.logTime {
font-weight: 500;
}

.logCoords {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
color: #94a3b8;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 12rem;
}

/* Heard Repeats Chips Container */
.heardChips {
display: flex;
flex-wrap: wrap;
gap: 0.375rem;
align-items: center;
}

/* Chip Base Styling */
.chip {
display: inline-flex;
align-items: center;
gap: 0.25rem;
padding: 0.375rem 0.625rem;
border-radius: 999px;
font-size: 0.75rem;
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
font-weight: 500;
background: rgba(51, 65, 85, 0.6);
border: 1px solid rgba(71, 85, 105, 0.8);
color: #e2e8f0;
white-space: nowrap;
}

.chipId {
font-weight: 600;
}

.chipSnr {
font-weight: 400;
}

/* SNR Color Coding */
.snr-red .chipSnr {
color: #f87171;
font-weight: 600;
}

.snr-orange .chipSnr {
color: #fb923c;
font-weight: 600;
}

.snr-green .chipSnr {
color: #4ade80;
font-weight: 600;
}

/* Mobile-responsive chip styling */
@media (max-width: 640px) {
/* Reduce chip size for mobile */
.chip {
padding: 0.25rem 0.5rem;
font-size: 0.625rem;
gap: 0.2rem;
}

/* 3-column grid layout for chips on mobile */
.heardChips {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 0.25rem;
}

/* Ensure chips don't overflow their grid cells */
.chip {
min-width: 0;
justify-content: center;
}

/* Adjust chip text to be more compact */
.chipId {
font-size: 0.625rem;
}

.chipSnr {
font-size: 0.625rem;
}
}
Loading