Commit Graph

242 Commits

Author SHA1 Message Date
MarekWo
884707f020 docs: Add funding link to buycoffee.to 2026-01-24 10:14:34 +01:00
MarekWo
d726407bcc docs: Add support link to buycoffee.to 2026-01-24 10:04:54 +01:00
MarekWo
fb94c62f63 docs: Add contact protection to Key Features
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 21:00:26 +01:00
MarekWo
bbc8b1db25 ui: Replace Copy Key button with clickable key
- Remove separate "Copy Key" button
- Make public key prefix clickable to copy
- Add fallback for HTTP contexts (execCommand)
- Add hover and copied state styling

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 20:16:12 +01:00
MarekWo
51c05f7794 feat: Add contact protection feature
Add ability to protect contacts from accidental deletion via Contact
Cleanup tool. Protected contacts are stored locally in settings file.

Changes:
- Add GET /api/contacts/protected endpoint
- Add POST /api/contacts/<key>/protect toggle endpoint
- Add is_protected field to /api/contacts/detailed response
- Exclude protected contacts from cleanup preview and deletion
- Add Protect toggle button to Existing Contacts list
- Show lock icon for protected contacts
- Disable Delete button for protected contacts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 14:30:38 +01:00
MarekWo
d0f1aae963 ui: Replace map filter checkboxes with clickable badges
Convert type filter checkboxes to clickable toggle badges on the Map
modal (accessible from main menu). Same UX pattern as pending contacts:
- Active: colored background, white text
- Inactive: colored text/border, white background

Updated in both base.html and contacts_base.html for consistency.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 08:58:32 +01:00
MarekWo
a9dd31b86e ui: Optimize Contact Management for mobile screens
- Replace type filter checkboxes with clickable toggle badges in Pending
  Contacts (CLI/REP/ROOM/SENS) - more compact and better mobile UX
- Make Pending Contacts buttons (Approve, Map, Copy Key) smaller and
  uniform, matching Existing Contacts button style
- Optimize Existing Contacts filter toolbar to fit in one row on mobile
  (narrower dropdown, more compact sort buttons)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 08:44:55 +01:00
MarekWo
6f1b61a488 docs: Minor README.md update (gallery) 2026-01-22 08:40:24 +01:00
MarekWo
7f99d9886a docs: Add remote update screenshots to Gallery
Add 3 new screenshots showing the remote update workflow:
- Update Available, Remote Update, Updated Successfully

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 08:35:42 +01:00
MarekWo
baf338ae27 docs: Cosmetic change in README.md 2026-01-22 08:23:18 +01:00
MarekWo
a764c66070 fix: Improve update UI and install script
- Add sudo to journalctl command in install.sh help text
- Move "Update now" link below version number to prevent line wrap
- Add "What's new?" link in update modal pointing to GitHub commits

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 08:18:14 +01:00
MarekWo
53709420e3 chore: Remove TEST3 marker after successful remote update test
Remote update feature is now fully functional.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 22:06:35 +01:00
MarekWo
c4a64e5833 test: Add TEST3 marker to verify remote update with fixed version freeze 2026-01-21 22:02:17 +01:00
MarekWo
1682c1227a fix: Add HOME env to subprocess for git config access
Git needs HOME environment variable to find ~/.gitconfig with
safe.directory setting when running as root. Also reverts TEST2 marker.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 21:59:53 +01:00
MarekWo
7013d20b7d test: Add TEST2 marker to verify remote update 2026-01-21 21:45:18 +01:00
MarekWo
dd7bdca803 fix: Improve updater install script and revert test commit
- Add -u flag to Python for unbuffered logging to journald
- Configure git safe.directory automatically during install
- Revert test marker from base.html

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 21:38:04 +01:00
MarekWo
60c56b9fb8 test: Add visible marker to verify remote update works 2026-01-21 17:39:11 +01:00
MarekWo
df852a1a80 feat: Add remote update capability from web GUI
Adds webhook-based update system that allows triggering updates
directly from the mc-webui menu. Includes:
- Webhook server (updater.py) on port 5050
- Systemd service and install script
- API proxy endpoints for container-to-host communication
- Update modal with progress tracking and auto-reload

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 16:58:05 +01:00
MarekWo
976d9c6822 docs: Update README to reflect support for Heltec V3 and add DeepWiki badge 2026-01-21 10:44:38 +01:00
MarekWo
59a05b9649 docs: Add Gallery section to README with clickable thumbnails
Add HTML table with 150px thumbnail previews of all screenshots.
Images are clickable to view full size. Updated and added new
screenshots for menu, map, console, and image preview features.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 08:05:33 +01:00
MarekWo
828caaaf98 docs: Screenshot gallery moved out of README 2026-01-20 21:42:15 +01:00
MarekWo
7c78bef906 feat: Add branch info to version display and update checker
- version.py now captures and exports GIT_BRANCH
- Display branch badge next to version in menu (e.g., "2026.01.20+abc1234 [dev]")
- /api/version now returns branch field
- /api/check-update uses frozen branch instead of hardcoded "dev"
- Allows proper update checking for both dev and main branches

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 21:00:11 +01:00
MarekWo
f36c2eb3c8 feat: Add update checker to verify new versions on GitHub
- Add /api/check-update endpoint that queries GitHub API
- Compare current commit hash with latest on dev branch
- Add check button next to version in menu
- Show spinning icon during check, green checkmark when done
- Display "Update available" link when newer version exists
- Handle rate limits and network errors gracefully

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 17:14:59 +01:00
MarekWo
0dc66b8f3c feat: Add update script for easier upgrades
- Add scripts/update.sh with colored output and error handling
- Automates: git pull, version freeze, docker compose rebuild
- Update README with script usage and alias instructions

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 16:27:18 +01:00
MarekWo
4a32871d7d fix: Reduce emoji avatar border and chat margins
- Reduce emoji avatar border from 2.5px to 1.5px
- Reduce horizontal padding from 0.5rem to 0.25rem

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 08:17:50 +01:00
MarekWo
d28a791e31 fix: Center emoji vertically in avatar circle
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 08:04:03 +01:00
MarekWo
07de51e56a fix: Use colored border instead of fill for emoji avatars
Emoji avatars are now displayed with a colored ring/outline
instead of filled background for better readability.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 07:56:12 +01:00
MarekWo
2de09811ce fix: Improve chat avatar styling and layout
- Reduce horizontal padding in messages container
- Add colored circle background to emoji avatars
- Fix vertical alignment of avatar with sender name

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 07:52:25 +01:00
MarekWo
5582f85ad0 feat: Add avatar circles to channel messages
- Add mini avatars next to sender names in channel chat
- Extract emoji from username for avatar (first emoji only)
- Use initials for users without emoji (1-2 letters)
- Generate consistent colors based on username hash
- Move sender name outside message bubble (MeshCore style)
- Add responsive styles for mobile devices

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 07:38:15 +01:00
MarekWo
731d4a9d9b refactor: Remove colon from quote format
Format changed from @[User]: »text« to @[User] »text«
Guillemets alone are sufficient to separate the quote.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 11:01:50 +01:00
MarekWo
5d01f90ba1 refactor: Hide guillemets and add line break after quote
- Guillemets (» «) no longer displayed - styling is sufficient
- Added line break after quoted text for better readability
- Raw message still contains guillemets for compatibility

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 10:43:45 +01:00
MarekWo
b2418a50d3 feat: Improve quote format with guillemets and styling
- Changed quote format to: @[Username]: »quoted text«
- Added processQuotes() to detect and style »text« patterns
- Quote styling: italic, gray background, left border
- Different styling for own messages vs others

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 10:29:59 +01:00
MarekWo
936698ca46 feat: Add Quote button to chat messages
Adds a Quote button next to Reply that allows quoting a message.
- Messages ≤20 bytes are quoted in full
- Longer messages are truncated with "..."
- Format: @[Username] "quoted text"
- Uses UTF-8 byte counting for accurate truncation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 10:15:35 +01:00
MarekWo
ffbcd8eead fix: Remove whitespace from image thumbnail template literal
The template literal had newlines and spaces that were preserved by
white-space: pre-wrap CSS, causing unwanted gaps before and after
image previews in chat messages.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 09:48:17 +01:00
MarekWo
039433a8a2 fix: Remove extra spacing before image preview in group chat
Changed message content container from <p> to <div> to fix invalid HTML
when image previews are embedded. The <p> tag cannot contain block-level
elements like <div>, causing browsers to auto-close the paragraph and
create unwanted spacing between text and image preview.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 09:40:14 +01:00
MarekWo
b5cdce18f2 feat: Replace Settings with Device Info modal
- Rename Settings to Device Info with new cpu icon
- Display device parameters in readable table format
- Add copy-to-clipboard buttons for Name and Public Key
- Add map button for device location coordinates
- Show human-readable parameter names and values
- Hide telemetry parameters (not commonly needed)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 17:02:42 +01:00
MarekWo
9bc27042da fix: Re-render messages after geo cache loads to show Map buttons
Messages are now displayed immediately, then re-rendered once geo cache
is ready so Map buttons appear for contacts with GPS coordinates.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 16:28:30 +01:00
MarekWo
7d0fb61533 perf: Don't block UI on geo cache loading
Geo cache now loads fully in background without blocking setupAutoRefresh().
UI is ready as soon as messages are displayed.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 13:25:01 +01:00
MarekWo
9e36c17f77 perf: Optimize channel chat loading time
- Add 60s cache for /api/contacts/detailed (reduces 4 USB calls to 0)
- Optimize /api/messages/updates to read file once instead of N×2 times
- Parallelize initialization: timestamps loaded together, messages and
  geo cache loaded in parallel
- Defer checkForUpdates() to after messages are displayed
- Remove blocking checkForUpdates() from loadChannels()
- Add cache invalidation for contacts on add/delete operations
- Add performance timing logs to browser console

Expected improvement: ~10-20s → ~2-3s initial load time

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 13:05:03 +01:00
MarekWo
1e6f47dcde docs: Add version freeze to installation instructions
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 12:10:35 +01:00
MarekWo
cd165415e9 docs: Add version freeze step to update instructions
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 11:56:26 +01:00
MarekWo
7ca3f4d2dd feat: Add dynamic Git-based versioning system
- Add app/version.py module generating version from Git metadata
- Format: YYYY.MM.DD+<commit_hash> (e.g., 2025.01.18+576c8ca9)
- Add +dirty suffix for uncommitted changes (ignores .env, technotes/)
- Add /api/version endpoint for monitoring
- Display version in hamburger menu
- Add freeze mechanism for Docker builds

Deploy command updated:
git push && ssh ... "cd ~/mc-webui && git pull && python -m app.version freeze && docker compose up -d --build"

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 11:47:22 +01:00
MarekWo
7a626ba105 chore: Remove technotes/ from repository
Keep folder local only, already in .gitignore

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 08:47:13 +01:00
MarekWo
d395656445 feat: Add colored markers and type filtering on contact map
- Use CircleMarker with different colors per contact type:
  - CLI (blue), REP (green), ROOM (purple), SENS (orange)
- Add type filter checkboxes in map modal header
- Dynamically update markers when filters change
- Hide filter panel for single contact view
- Reduce message action buttons to 32x32px

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 08:21:11 +01:00
MarekWo
f00234af88 style: Make message action buttons icon-only with uniform size
- Remove text labels from Reply and Map buttons
- Add consistent 36x36px square buttons with icons only
- Add tooltips for accessibility
- Prepare for adding more action buttons in the future

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 07:59:18 +01:00
MarekWo
6cb777e90c fix: Map buttons not working in contacts page and message bubbles
- Add Leaflet CSS/JS and map modal to contacts_base.html
- Add showContactOnMap function to contacts.js (contacts page has separate template)
- Load contactsGeoCache before messages to ensure Map buttons appear on bubbles

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 07:51:00 +01:00
MarekWo
72da96e647 feat: Add Leaflet map for contact locations
- Replace Google Maps with Leaflet + OpenStreetMap (free, no API key)
- Add Map button in main menu to show all contacts with GPS
- Add Map button on message bubbles (next to Reply) for senders with GPS
- Contact Management Map buttons now open modal instead of new tab
- Lazy map initialization with proper Bootstrap modal handling

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 22:46:36 +01:00
MarekWo
61bd4b41ae chore: Remove unused MC_INACTIVE_HOURS config variable
This variable was defined but never used in the code.
Contact cleanup threshold is controlled directly in the UI.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 17:09:32 +01:00
MarekWo
45e96b9bb7 docs: Simplify installation - auto-detect works by default
Most users don't need to edit .env anymore. Serial port and device
name are auto-detected. Troubleshooting section collapsed by default.

Reduced installation from 8 steps to 7.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 15:27:49 +01:00
MarekWo
c3d0d3cbdb fix: Add cgroup rule for ttyACM devices (ESP32-S3)
ttyACM uses major 166, not 188 like ttyUSB.
Needed for Espressif ESP32-S3 based devices (Heltec V3, etc.)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 15:21:11 +01:00