# Air Keyboard (v1)

Hands-free typing in Chrome: a Manifest V3 extension with a side panel that
tracks your index fingertip (on-device MediaPipe hand model) and types into
the focused field of the active tab via pinch or dwell.

## Layout

- `manifest.json` — MV3 manifest (side panel, content script on all pages).
- `sidepanel.html` / `js/sidepanel.js` — the keyboard UI: camera view, key grid,
  pinch/dwell press detection, settings (layout, press mode, dwell time).
- `js/hand-point.js` — lean pointing/pinch tracker (MediaPipe HandLandmarker).
- `js/keyboard.js` — layouts (QWERTY, ABC, frequency) and key geometry.
- `js/content.js` — runs in every page; types pressed keys into the focused field.
- `js/background.js` — relays presses from the side panel to the active tab.
- `vendor/` — MediaPipe vision bundle (local). `models/` — hand_landmarker.task.

## Privacy

Everything runs on the device. The content script only inserts text into the
focused field; it never reads page content and nothing is sent anywhere.

## Tests

`npm install && npm test` (needs the shared Playwright install). Synthetic hand
frames drive the panel: pointing highlights, pinch/dwell press, shift, layout
switching, geometry unit checks, axe WCAG A/AA.

## Roadmap

- Native-messaging companion so it can type outside Chrome (address bar, desktop apps).
- Remappable gestures, word prediction, per-user calibration.
- Chrome Web Store listing (needs a store-compliant host-permission story).
