Devlog

Progress notes from the MapXr development sessions.

Overall completion 100%

Session logs

2026-03-24

Porting MapXr to Android: three dead ends and one great open-source library

21/21 epics

Getting arbitrary key injection working on Android without root required three attempts: AccessibilityService (too limited for modifier keys and non-text apps), a custom IME (same ceiling), and a hand-rolled ADB wireless debugging client (pairing worked, but Samsung Android 16 rejected the keys for an undiagnosable reason). Shizuku solved it cleanly — shell-uid Binder IPC via the same wireless debugging infrastructure. The full action vocabulary is dispatched through a JNI bridge that bypasses the WebView entirely, so injection keeps working when the app is backgrounded. APK coming soon.

androidfeatureshizuku

2026-03-20

First public release: three bugs, two platforms, one coffee button

17/18 epics

Shipped v0.1.2 — the first release where the full pipeline works end-to-end: build, sign, publish, auto-update. Getting there required hunting down three separate bugs: a missing config key that silently suppressed the auto-updater manifest, a Windows API breaking change in the focus monitor, and a tray icon crash that took down the app before the first window opened.

releasebug-fixinfrastructure

2026-03-19

Extended key support, OS notifications, and six silent bugs fixed

16/18 epics

Shipped OS desktop notifications for device and layer events (Epic 16). Audited the key dispatch path and found six categories of silent failure — arrow keys, all F-keys, punctuation, media, and system keys were all declared valid but never fired. Rewrote name_to_key, added media_stop/pause/brightness/eject/mic_mute, and upgraded the key picker to a grouped select.

bug-fixfeatureuiux

2026-03-18

Profile persistence and startup profile selection

7/9 epics

Replaced alphabetical startup profile selection with a preferences.json that remembers the last activated profile. Fixed a bug where explicit deactivation was indistinguishable from first-launch state, causing a profile to always be selected on restart. Added device-aware suggestion banners.

uxfeaturebug-fix

2026-03-18

BLE UX polish, starter profiles, and live role reassignment

7/9 epics

Improved scan UX with seen/paired/cached device states and stale-RSSI fixes. Added connected device name persistence. Seeded a starter profile on first launch. Renamed reference docs. Implemented live device role reassignment without disconnecting.

bleuiuxfeature

2026-03-18

Project website launched

7/9 epics

Scaffolded the mapxr project site with Svelte 5, Tailwind CSS v4, and DaisyUI v5. Implemented landing page, docs scaffold, and devlog view with full hash-based routing.

websitedocs

2026-03-16

Hardware debounce fix + Windows CI

6/9 epics

Fixed double-tap inversion bug caused by TAP Strap hardware bounce. Added 50ms debounce window to ComboEngine. Also added GitHub Actions workflow for Windows builds and a user-facing README.

bug-fixcible

2026-03-15

Hold modifier action (sticky keys)

6/9 epics

Implemented the hold_modifier action with Toggle, Count, and Timeout modes. Added HoldModifierMode enum, full validation, and 15+ tests. Spec-approved before implementation.

featuremapping-core

2026-03-14

BLE scanner filtering for TAP devices

5/9 epics

Updated the BLE scanner to filter advertisements by TAP service UUID so only genuine TAP Strap devices appear in the device list.

blescanner

2026-03-10

ComboEngine and cross-device combo resolution

4/9 epics

Implemented the full ComboEngine with single-tap, double-tap, and cross-device combo detection. Timing is controlled via tokio::time for deterministic tests.

enginemapping-core

2026-03-05

Profile validation and layer stack

3/9 epics

Added profile validation rules (duplicate triggers, missing actions, hold_modifier constraints). Implemented LayerStack with push/pop/activate semantics.

enginemapping-core

2026-02-28

Core types and JSON schema

2/9 epics

Defined TapCode, Trigger, Action, Profile, and Layer types. Full serde round-trip tests. Profile deserialization from .json fixture files.

typesmapping-core

Milestones

Epic Progress

  • 1. Core types & JSON schema
  • 2. Profile validation
  • 3. LayerStack & SequenceEngine
  • 4. ComboEngine
  • 5. BLE scanner (tap-ble)
  • 6. Tauri shell & commands
  • 7. Svelte UI
  • 9. Packaging & CI
  • 8. Android Port