Commit Graph

510 Commits

Author SHA1 Message Date
Smittix
e19315819d Fix proximity visualization flicker with double buffering
- Add offscreen canvas for double buffering
- Draw all elements to offscreen canvas first
- Copy to visible canvas in single operation
- Increase update intervals (150ms throttle, 2s refresh)
- Eliminates flashing when visualization redraws

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 18:44:03 +00:00
Smittix
002afe3690 Replace radar with clean zone-based proximity visualization
- Replace heatmap with concentric distance zones (Very Close, Close, Nearby, Far)
- Each zone has distinct color coding and shows device counts
- Device dots persist with smooth fading for stale devices (30s threshold)
- Random angle distribution prevents dot overlap
- Glow effect on dots with color based on signal strength
- Periodic refresh timer keeps visualization smooth during inactive periods
- Throttled updates prevent performance issues during rapid scanning
- Center "YOU" marker with subtle glow effect
- Shows instructional text when idle

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 18:38:07 +00:00
Smittix
9e31bc65db Overhaul Bluetooth UI: heatmap, device selection, and detection panels
- Replace proximity radar with persistent heatmap visualization using radial gradients
- Change device card click to populate Selected Device panel instead of modal
- Fix Device Types panel with proper categorization (phones, computers, audio, wearables)
- Add tracker detection for AirTag, Tile, SmartTag, Chipolo patterns
- Add Apple FindMy Network detection using manufacturer ID 0x004C
- Fix Signal Distribution histogram with Close/Medium/Far/Weak bands
- Make Device Activity timeline collapsible and collapsed by default
- Add contextual "No data" messages for all empty panels

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 18:19:40 +00:00
Smittix
898410b225 Fix null check for manufacturer_id in modal
Changed !== null to != null to catch both null and undefined values.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 18:11:13 +00:00
Smittix
fe28a91d5c Add device modal, visualization panels, and radar updates
Features added:
- Click-to-open modal with comprehensive device details
  - Signal strength with min/max/median/confidence stats
  - Device info grid (address, type, manufacturer)
  - Observation stats (first/last seen, count)
  - Service UUIDs display
  - Copy address button

- Live visualization panel updates:
  - Device Types (phones, computers, audio, wearables, other)
  - Signal Distribution (strong/medium/weak with bars)
  - Tracker Detection list
  - FindMy devices list

- Proximity Radar canvas:
  - Plots devices by RSSI (closer = nearer center)
  - Color-coded by signal strength
  - Glow effect for visibility

- Improved device name display:
  - Shows broadcast name if available
  - Falls back to formatted address (AA:BB:...:EE:FF)

- Cards now clickable with hover effect
- Stats recalculated on each device update

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 18:08:49 +00:00
Smittix
be58c00bc7 Fix device card rendering with pure inline styles
- Remove all CSS class dependencies from device cards
- Use data-bt-device-id attribute instead of class-based selectors
- Add comprehensive inline styles to each element
- Change container from grid to block layout
- Add detailed console logging for debugging
- Remove potential CSS conflicts from .signal-card class

This isolates the card rendering from any CSS that might be
hiding content (like overflow:hidden on .signal-card).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 18:01:05 +00:00
Smittix
91b07fe797 Fix card rendering - use string concat instead of template literals
- Change card HTML generation from template literals to string concatenation
- This avoids potential issues with special characters in device data
- Also disable legacy handleBtDeviceImmediate when BluetoothMode exists
- Use device_id as fallback name if name is missing

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 17:52:32 +00:00
Smittix
bac7f8d55c Fix device card rendering - disable legacy code and fix CSS
- Disable legacy addBtDeviceCard when BluetoothMode is active
- Clear device container when starting scan to remove legacy cards
- Fix grid CSS with explicit auto height and align-items: start
- Add visibility rules for all card body elements
- Reset devices map when clearing container

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 17:47:09 +00:00
Smittix
bb660d02f5 Fix device card rendering with robust defaults and CSS fixes
- Add explicit default values for all card template variables
- Add try/catch for JSON.stringify
- Add !important CSS rules to ensure card body visibility
- Use ID selector for btDeviceListContent grid layout
- Add console logging for debugging device data

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 17:31:48 +00:00
Smittix
e3d9349d4b Improve Bluetooth device card layout and modal
- Remove Details dropdown from device cards for cleaner look
- Add grid layout for device cards (responsive, auto-fill columns)
- Enhanced modal with full device details:
  - Large RSSI display with sparkline
  - Signal statistics (median, min, max, confidence)
  - Device info grid (address, type, protocol, manufacturer)
  - Observation timeline (first/last seen, count, rate)
  - Service UUIDs list
  - Behavioral analysis heuristics
- Copy JSON and Copy Address buttons in modal footer
- Escape key closes modal
- Responsive design for mobile

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 17:12:48 +00:00
Smittix
78642bcbb2 Fix device card rendering - handle DOM element not HTML string
DeviceCard.createDeviceCard() returns a DOM element, not an HTML string.
Use replaceWith() and prepend() instead of outerHTML and insertAdjacentHTML.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 17:04:46 +00:00
Smittix
48e3bf210a Fix Bluetooth device container - use btDeviceListContent instead of output
The Bluetooth mode uses its own layout container (btLayoutContainer) which
contains btDeviceListContent for device cards. The output element is hidden
for Bluetooth mode. Also adds device count updates and clears placeholder
when scanning starts.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 17:01:21 +00:00
Smittix
e9d5fe35fb Add debug logging to Bluetooth frontend 2026-01-21 16:00:21 +00:00
Smittix
66f16d4a2d Fix SSE event names for frontend compatibility
The SSE stream was sending events without proper event names.
Frontend uses addEventListener('device_update', ...) which only
works with named events. Now maps internal event types to proper
SSE event names:
- device -> device_update
- status/started -> scan_started
- status/stopped -> scan_stopped

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:57:44 +00:00
Smittix
187347e64b Fix legacy code conflicts and Bleak deprecation warning
- Add null checks to legacy refreshBtInterfaces() function
- Redirect to BluetoothMode.checkCapabilities() when available
- Fix Bleak deprecation: use AdvertisementData.connectable instead of device.metadata

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:56:04 +00:00
Smittix
5016327bc2 Fix API/frontend field name mismatches
- Add 'available' alias for 'can_scan' in capabilities
- Add 'preferred_backend' alias for 'recommended_backend'
- Add 'id' field to adapter info for frontend compatibility

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:54:05 +00:00
Smittix
ed460761ff Prioritize bleak over DBus for Flask compatibility
DBus/BlueZ requires a GLib main loop which Flask doesn't have.
Reordered backend priority: bleak > hcitool > bluetoothctl > dbus

Removed DBus option from UI since it won't work with Flask.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:50:03 +00:00
Smittix
c49b1e03f2 Fix scanner fallback logic when DBus fails
The fallback wasn't being triggered because when mode='auto' was
replaced with the recommended backend ('dbus'), the fallback condition
failed. Now properly tracks original_mode to allow fallback.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:49:09 +00:00
Smittix
28d15d0ed5 Fix missing constants and test import names
- Add SUBPROCESS_TIMEOUT_SHORT to bluetooth constants
- Fix test imports to use correct constant names

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:44:53 +00:00
Smittix
54db023520 Overhaul Bluetooth scanning with DBus-based BlueZ integration
Major changes:
- Add utils/bluetooth/ package with DBus scanner, fallback scanners
  (bleak, hcitool, bluetoothctl), device aggregation, and heuristics
- New unified API at /api/bluetooth/ with REST endpoints and SSE streaming
- Device observation aggregation with RSSI statistics and range bands
- Behavioral heuristics: new, persistent, beacon-like, strong+stable
- Frontend components: DeviceCard, MessageCard, RSSISparkline
- TSCM integration via get_tscm_bluetooth_snapshot() helper
- Unit tests for aggregator, heuristics, and API endpoints

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 15:42:33 +00:00
Smittix
713c1a3470 Add supported platforms note to Quick Start section
Documents that iNTERCEPT is officially tested on Debian and Ubuntu,
with partial macOS support. Other distributions have not been fully tested.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 13:41:29 +00:00
Smittix
5bafb88377 Add meter reading mode and clickable screenshot lightbox 2026-01-21 12:19:39 +00:00
Smittix
95f3836edd Fix branding to iNTERCEPT 2026-01-21 12:12:19 +00:00
Smittix
0195553a62 Add feature screenshots to GitHub Pages 2026-01-21 12:10:59 +00:00
Smittix
5c7554d6cb Add GitHub Pages landing site 2026-01-21 11:50:05 +00:00
Smittix
ec32b9237e Make pager and 433MHz cards clickable with details dialog
Replace the dropdown details panel with a clickable card that opens
a modal dialog showing all signal information including raw data.
Action buttons (Copy/Mute) now float on hover.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 10:58:18 +00:00
Smittix
3edd40de0d Fix 433MHz sensor cards not displaying
The updateCounts call was using pager-specific filter logic that
didn't match sensor card data attributes, causing cards to be hidden.
Now uses the sensor filter bar's own applyFilters method.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 10:45:05 +00:00
Smittix
88418b0850 Add keyboard controls and finer tuning steps for frequency tuning
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 10:19:40 +00:00
Smittix
1e59cfd2ea Remove GPS debug endpoint
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 09:52:00 +00:00
Smittix
42f2a6ef62 Add clickable station badges and integrate signal guessing engine
- Add clickable APRS station badges that display raw packet data in a modal
- Integrate SignalGuess into sensor mode cards for frequency identification
- Standardize UI language across timeline and signal components
- Update frequency band naming for consistency (e.g., "Wi-Fi 2.4GHz" → "2.4 GHz wireless band")

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 23:59:08 +00:00
Smittix
3e3bc0e857 Hide status bar in TSCM mode
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 23:47:26 +00:00
Smittix
290c5ff896 Add signal guessing engine for frequency identification
Implements heuristic-based signal identification that provides
plain-English guesses for detected signals based on frequency,
modulation, bandwidth, and burst behavior.

Features:
- Python backend engine (utils/signal_guess.py)
- JavaScript client-side engine with UI components
- Hedged language output (never claims certainty)
- UK/EU and US region support
- Confidence levels (LOW/MEDIUM/HIGH)
- 50+ unit tests for deterministic verification

Supported signal types: FM broadcast, airband, cellular/LTE,
ISM bands (433/868/915/2.4GHz), TPMS, amateur radio, marine VHF,
DAB, pager networks, weather satellites, ADS-B, and more.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 23:38:02 +00:00
Smittix
4c0d44a99d Improve mode card icon spacing and centering
- Increase margin-bottom from 6px to 12px for better spacing
- Add flexbox centering to properly align icons
- Bump icon size to 28px for better visual balance

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 23:19:15 +00:00
Smittix
ef4adfe003 Add RTLAMR mode to menu and fix mode card icon visibility
- Add RTLAMR utility meter mode card to the mode selection grid
- Fix icons being nearly invisible by setting color to --text-secondary
- Add explicit 24x24px sizing for mode card SVG icons
- Add cyan highlight on hover for icons

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 23:16:52 +00:00
Smittix
30dfea57b9 Remove sensor-waterfall panels and default recon mode to off
- Remove waterfall UI panels from pager and 433MHz sections
- Remove associated JS functions (toggle, render, data tracking)
- Remove waterfall CSS styles
- Change recon mode to default to 'off' instead of 'on'

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 23:13:28 +00:00
Smittix
a0d7f221c0 Add null checks to prevent errors on missing elements
- Add null checks in syncHeaderStats for header stat elements
- Add optional chaining for classList.toggle calls in switchMode
- Add null checks for style.display assignments in switchMode
- Prevents errors when page is accessed with unsupported mode params

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 23:05:43 +00:00
Smittix
ee916d0022 Fix ActivityTimeline config property names for pager/sensor
- Change timeWindows to availableWindows (correct property name)
- Change defaultTimeWindow to defaultWindow (correct property name)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 23:03:27 +00:00
Smittix
156d832d2d Add ActivityTimeline to Pager and 433MHz sensor modes
- Add timeline container divs for pager and sensor modes
- Add timeline configurations in initializeModeTimeline()
- Show/hide timeline containers based on active mode
- Feed pager and sensor messages to their respective timelines

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 22:58:57 +00:00
Smittix
abe3d42004 Remove duplicate header stats and fix icon rendering
- Remove duplicated message counters from header (keeping output panel stats)
- Remove syncHeaderStats function and its 500ms polling interval
- Fix icon CSS override that caused stroke-based SVGs to render as solid squares

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 22:52:15 +00:00
Smittix
3f38742dbe Refactor timeline as reusable ActivityTimeline component
- Extract signal-timeline into configurable activity-timeline.js
- Add visual modes: compact, enriched, summary
- Create data adapters for RF, Bluetooth, WiFi normalization
- Integrate timeline into Listening Post, Bluetooth, WiFi modes
- Preserve backward compatibility for existing TSCM code
- Add mode-specific configuration presets via adapters

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 22:46:16 +00:00
Smittix
2cb62d5f34 Standardize all icons to uniform inline SVG format
Replace emojis throughout the codebase with inline SVG icons using
the Icons utility. Remove decorative icons where text labels already
describe the content. Add classification dot CSS for risk indicators.

- Extend Icons utility with comprehensive SVG icon set
- Update navigation, header stats, and action buttons
- Update playback controls and volume icons
- Remove decorative device type and panel header emojis
- Clean up notifications and alert messages
- Add CSS for classification status dots

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 22:29:28 +00:00
Smittix
256c30e7cd Add minimal SVG icon system for signal types
Replace emoji icons with inline SVG for WiFi, Bluetooth, and RF/SDR
indicators. Icons are standard symbols (arc, rune, wave) designed for
screenshot legibility in reports.

- Add Icons utility object in utils.js with SVG generators
- Add icon CSS system with sizing variants and state animations
- Update TSCM scanner indicators and capabilities bar
- Remove decorative sensor type emojis (text labels suffice)
- Keep signal strength SVG bars (already implemented)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 22:05:58 +00:00
Smittix
c92f60e0f3 Show signal indicator placeholder when no RSSI/SNR data available
Also check 'noise' field from rtl_433 output

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 21:47:07 +00:00
Smittix
9461cc2121 Add signal strength classification with confidence-safe language
Introduces standardized RSSI-to-label mapping (minimal/weak/moderate/strong/very_strong)
and duration-based confidence modifiers for client-facing reports and dashboards.

- New signal_classification.py module with hedged language generation
- Updated detector.py to use standardized signal descriptions
- Enhanced reports.py with signal classification in findings
- Added JS SignalClassification and signal indicator components
- CSS styles for signal strength bars and assessment panels

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 21:37:07 +00:00
Smittix
8a744eb55a Fix TSCM panels sizing - increase heights and add scroll
- Set panel height to 200px with overflow scroll
- Add padding-bottom for status bar clearance
- Make dashboard scrollable
- Remove flex constraints causing collapse

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 21:18:05 +00:00
Smittix
73188c2471 Fix TSCM panels being squashed by adding minimum heights
- Set min-height: 300px on main grid
- Set min-height: 120px on individual panels
- Set min-height: 80px on panel content
- Change dashboard from height: 100% to min-height: 100%

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 21:13:27 +00:00
Smittix
6e8de37135 Make timeline more compact to not hide other panels
- Reduce lanes max-height to 160px
- Reduce lane height to 36px
- Narrow label column to 130px
- Narrow stats column to 50px
- Smaller annotations (max 60px, 9px font)
- Hide legend completely (colors are self-explanatory)
- Reduce padding throughout

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 21:09:26 +00:00
Smittix
bb010664ca Fix timeline text being squashed and unreadable
- Increase lane min-height from 28px to 44px
- Widen label column from 100px to 140px
- Increase font sizes (freq: 11px, name: 10px)
- Add proper line-height and gap between lines
- Increase lanes container max-height to 240px
- Add more padding to label and track areas

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 21:05:18 +00:00
Smittix
ffc55efe1c Fix timeline overwhelming TSCM page with many signals
- Make timeline collapsible (starts collapsed by default)
- Add header stats showing signal counts when collapsed
- Limit displayed lanes to 15 (scroll for more)
- Constrain max-height to 180px with scrollbar
- Add automatic pruning of old signals (keeps max 100)
- Show "+N more signals" indicator when truncated
- Reduce annotations max-height to 80px
- Preserve flagged signals during pruning

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 21:01:22 +00:00
Smittix
8b42f4ac28 Add signal activity timeline visualization for TSCM mode
New lightweight timeline component that shows RF signal presence
over time without heavy waterfall rendering:

- Horizontal swimlanes for each frequency/signal source
- Bars show transmission duration with height = signal strength
- Status colors: blue=new, gray=baseline, orange=burst, red=flagged
- Pattern detection for regular interval transmissions
- Click to expand and see individual transmission ticks
- Right-click to flag signals for investigation
- Auto-annotations for new signals, bursts, and patterns
- Tooltip with signal details on hover
- Time window selector (5m to 2h)
- Filter controls (hide baseline, show only new/burst)

Integrated into TSCM mode:
- Timeline created when TSCM mode is selected
- WiFi, Bluetooth, and RF signals feed into timeline
- Clears on new sweep start

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 20:54:07 +00:00