Skip to content

M6: Share bundle + zero-install viewer (wit-share, viewer/) #22

Description

@sepehrsadri

M6: Share bundle + zero-install viewer (wit-share, viewer/)

Tracking issue for the M6 milestone. Restored to the 0.0 pilot in the M0.5 truth-up — an earlier pass of docs/ROADMAP.md deferred this to 0.1; "Copy as text" (M5) was going to be the only share surface. Both now ship: Copy-as-text stays a first-class, equal path (not a fallback), and the self-contained HTML file is an additional artifact.

Scope

  • New crate wit-share (bundle builder) + viewer/ (the zero-install recipient page, built with vite-plugin-singlefile).
  • One self-contained .html per share: plain-sentence compare, inline SVG waveform, base64 data-URI audio (opt-in, never transcoded) — designed to render with JavaScript disabled, because iOS Quick Look does not execute JS (this killed an earlier dynamic-viewer design — see design-review-1).

Guardrails

  • Static-first architecture is mandatory, not an enhancement — the whole point of M6 is the file rendering without a script engine.
  • Hostile track/project names must be tested for HTML/data-island escaping.
  • CSP meta tag; zero network requests of any kind.
  • Size preview must show the base64-inflated size (×4/3 over raw), not the raw byte count — otherwise the preview lies about what a recipient downloads.
  • viewer/ gets a CI size budget of ≤ 1.5 MiB, checked in the app CI job.
  • No accounts, no cloud, no hosted viewer (ADR-0006 / the plan's out-of-scope list — a hosted viewer was rejected partly on the decompression-amplification and trust arguments).

Exit criteria

  • AirDrop the .html to another Mac — opens correctly, no network calls.
  • Open it on a physical iPhone via iMessage/Quick Look — sentences, waveform, and audio all render with JS off. (This is a hardware test, not a simulator test — the earlier dynamic-viewer design passed every automated check and still failed this one.)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    m60.0 pilot milestone (see docs/ROADMAP.md 'Now: the 0.0 pilot')

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions