# STI camera-onboarding — single-device prototypes (framing, 2026-07-13)

Built overnight on Stephen's directive (he went to bed: *"work for 2 hours making a bunch of single device
prototypes"*), following his `/sti`-scope ballot answer: `/sti` is **not** a landing page — it's a
**progressive-disclosure camera-app onboarding** that teaches **"your data is local"** first, then earns
its way up to collective sensing.

**Gallery:** [sti-tiles/index.html](../artifacts/sketches/sti-tiles/index.html) — 20 idea tiles in the
onboarding order; the ▶ tiles are **live single-device prototypes** (real camera / sensors, in-browser).

## The arc Stephen named (verbatim, drained in [note 07](07-v2-ballot-drain-and-minimal-launch.md))
> "lets start with a camera app onboarding and get them understanding that their data is local. have them
> take photos front and back. do finger and hand tracking. turn on the light with finger gestures or smiling
> or blinking. maybe. sketch some ideas. and then share location with the page. still all local. and then
> show recording of sensors. they have progressive disclosure of information under their control. and only
> then do we start tracking collectively my body and face. at some point we will trigger sequential scans of
> projectors. make a sketch page with 20 small tiles of ideas."

Reference he gave: [sousveillance-g.html](https://gsd.live/people/stephen-guerin/apps/sousveillance-g.html)
(**local-first self-observation**; it already uses `@mediapipe/tasks-vision@0.10.14` for face/hand/pose +
blendshapes) *combined with* human pose tracking. **(His second reference sentence was cut off — "the human
pose tracking of ___" — flagged for him to complete; I proceeded with MediaPipe PoseLandmarker as the
pose basis.)**

## What got built

A shared helper does the fiddly, hard-to-test MediaPipe wiring **once**, lifted from the known-good
sousveillance-g: **[lib/mp-vision.js](../artifacts/sketches/sti-tiles/lib/mp-vision.js)** — `Camera`
(front/back + switch), `Face`/`Hand`/`Pose` landmarkers with simplified results (smile/blink scores, pinch,
point, hands-up), canvas `draw` helpers, and a driven `runLoop`. Everything is client-side; nothing uploads.

Fourteen single-device prototypes (all share one dark-minimal shell + a persistent 🔒 "all local" badge;
`p04` is the CE-authored template, the rest by parallel builder subagents against the helper):

| # | Prototype | Sense | Beat |
|---|---|---|---|
| 01 | front-back-photos | camera | take photos front/back → local gallery, closed share-gate |
| 03 | point-to-place-light | hand | aim light at the fingertip |
| 04 | pinch-to-light | hand | pinch toggles the light (template) |
| 02 | hand-tracking | hand | hand skeleton, local |
| 06 | smile-to-light | face | smile (blendshape) → light on (hysteresis) |
| 07 | blink-to-toggle | face | deliberate blink → toggle |
| 08 | face-mesh | face | 468-point mesh, local |
| 09 | pose-tracking | pose | body skeleton |
| 10 | raise-hand-light | pose | raise a hand → summon light |
| 11 | share-location | geolocation | shared with THIS page only, clearable |
| 12 | sensor-tape | motion/orientation/mic | record sensors to a local tape |
| 13 | disclosure-dial | consent | grant senses one at a time (the spine) |
| 14 | collective-preview | (sketch) | opt-in, reversible "everyone together" |
| 15 | projector-scan | (sketch) | the reveal: sequential gray-code projector scans |

Plus 6 idea-only tiles (local vault, wave-to-dismiss, nod-to-confirm, consent chips, the share gate, many-
phones-as-instrument) the fan poses without building.

## The ethic the fan encodes (the actual pitch to teachers)
1. **Local by default.** Every camera frame, landmark, blendshape, and sensor value is computed on the
   teacher's own device; the pages say so and show a closed share-gate. This is the "power and control of
   your phone as an acequia device you host" (STI hour 1) made tactile.
2. **Progressive disclosure, under their control.** Senses turn on one at a time, by the user (tile 3 is the
   spine). Nothing is collective until they opt in — and it's reversible (tile 18).
3. **Then, together.** Only after the local beats do many phones become one instrument (STI hour 2), and only
   at the very end do the projectors scan the shared room (the room-scale AnySurface reveal).

## Ballot (works now — feedback/ was created + ballot.js fixed 2026-07-13)
In-page: `sti-arc` (which beats, what order), `sti-gesture` (which light gesture to teach first), `sti-x`
(add/cut/reframe). Multi-select, notes-as-vectors → the bead's [`feedback/`](https://redfish.acequia.io/guerin/.agents/998ec2ea-84e2-4f93-bb40-b2aa6ca69268/feedback/).

## Verification status / caveats (READ before trusting)
- **Not yet exercised with a live camera by CE** (no camera/browser in this session). The MediaPipe wiring
  is copied from a *known-working* app (sousveillance-g) via the shared helper, which de-risks it, but each
  prototype needs a real device pass. MediaPipe model weights load from Google's CDN (needs network + WebGPU/
  wasm); first load is slow. getUserMedia/sensors need **https** (the canonical redfish URL is https) and a
  user gesture (handled).
- Prototypes are **sketch-level** (rough, to provoke the design), not production onboarding.
- Gesture thresholds (pinch/smile/blink) are first guesses; expect tuning on-device.

## Next
- [ ] Stephen completes the cut-off pose-tracking reference; casts the `sti-*` ballot.
- [ ] Real-device pass to tune thresholds; then compose the chosen beats into ONE `/sti` onboarding flow.
- [ ] Hero (`anysurface.com`) + video deploy is a separate track (his other ballot answer).

---
*2026-07-13 · © 2026 RedfishGroup · author: Debbie/CE for Stephen Guerin · all rights reserved (unless otherwise specified)*
