Status: draft
Tracks: Adoption focus band (docs/ROADMAP.md)
The README is the first surface every new user hits — from brew install,
from awesome-list links, from the Pages landing, from a future Show HN.
Today it has good prose and a static banner but no in-motion demo: a
visitor has to read three sections before they form a mental picture of
what pressing the hotkey actually does. A 15-30 s GIF closes that gap in
one glance. docs/index.md has the same gap.
This SPEC defines what the demo shows, how to capture and optimise it,
where it lives on both surfaces, and a tightening pass on docs/index.md.
README.md and docs/index.md,
≤ 2 MB, looping, sub-30 s.docs/index.md tightened so the install command sits above the fold on
a 1440 × 900 viewport.alt translates.A working dev in TextEdit, cursor in a blank doc. Full take:
“i need to send the quarterly numbers to claude code first before the design review”
Polish / agent dispatch (SPEC-007 / SPEC-006 territory). Any LLM features. Audio (GIFs are silent). Titles, lower-thirds, watermarks — they eat attention and bloat the file.
Capture: macOS Cmd + Shift + 5 → Record Selected Portion is enough.
Kap only if a higher-quality intermediate is
needed. Record the choice in the PR.
Edit: trim head/tail. No titles, no cursor effects.
GIF generation — two-pass palette via ffmpeg:
ffmpeg -i demo.mov -vf "fps=15,scale=900:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" demo.gif
900 px matches the GitHub README content column; 15 fps is enough for mostly-text motion; loop is on by default.
Target ≤ 2 MB. If over: drop fps → 12, then width → 720, then trim more aggressively (the 1-2 s post-stop pause stays).
Asset path docs/assets/demo.gif. The docs/assets/ directory does
not exist today (docs/images/ does); the implementing PR creates it.
docs/images/ keeps static stills, docs/assets/ is for kinetic /
downloadable artifacts.
| Surface | Markup path | Why |
|---|---|---|
README.md |
docs/assets/demo.gif |
Repo-root markdown; GitHub serves raw. |
docs/index.md |
assets/demo.gif |
Jekyll site root is docs/; relative. |
Replace the current static banner block at README.md lines 1-3
(<p align="center"><img src="docs/images/banner.png" ...></p>) with:
<p align="center">
<img src="docs/assets/demo.gif" width="900"
alt="OpenQuack dictation demo: press hotkey, speak a sentence, the transcript appears at the cursor in TextEdit; the menu bar confirms 'Pasted at cursor.'" />
</p>
The badges row, language switcher, and “What’s new” banner stay in place.
The GIF is the new banner — stacking a static banner above a kinetic
hero is visual noise. banner.png stays in-repo as the og:image for
docs/index.md (SHA 54d558d).
docs/index.mdH1 # OpenQuack
Lead Local-only voice dictation for macOS. Press a hotkey, speak,
the transcript appears at your cursor.
GIF <img src="assets/demo.gif" width="900" alt="..." />
3 bullets (single line each):
- **Private** — nothing leaves your device, no telemetry, MIT licensed.
- **Fast** — ~2.6% WER, sub-3-second turnaround on a 5-minute clip.
- **Robust** — holds up in real office noise (6.3% WER, noisy bench).
Install
brew tap larryxiao/openquack https://github.com/larryxiao/openquack
brew install --cask openquack
(Or DMG download; macOS 13+ on Apple Silicon.)
Below the fold: Documentation links → Blog → FAQ (keep all eight Qs as-is) → License.
Cut: the current “MIT licensed / All local / Fast / 99 languages /
Tiny” bullet block (docs/index.md lines 13-18; pre-dates the hero, now
duplicates) and the “[View the repository on GitHub →]” link before
install (the header already links to the repo).
Keep: full front-matter (og:image / twitter:image), full FAQ, all
link lists.
README.{de,es,fr,ja,ko,zh-CN}.md all reuse the same
docs/assets/demo.gif. Only alt translates. The implementing PR is
not required to translate alt text — leave English alt as a stop-gap
and let SPEC-019 catch up. Note this in the PR description.
alt describes the action, not “demo”..mp4 / .webm) hero — deferred; GIF is the compat hero.<picture media="(prefers-color-scheme: dark)"> —
doubles asset maintenance; TextEdit chrome reads in both themes.prefers-reduced-motion swap — deferred..mov alongside the .gif? Lean no —
large, re-encode is cheap; store source in local notes / release
artifact.https://larryxiao.github.io/openquack/ (or
local bundle exec jekyll serve from docs/); GIF appears above the
fold on 1440 × 900 and the install command is visible without
scrolling.max-width: 100%) and isn’t broken by an explicit width attribute.README.ja.md; confirm English alt is an
acceptable stop-gap.| PR | Title | SPEC cite | Effort |
|---|---|---|---|
| this | docs(SPEC-027): README demo gif + landing-page polish |
SPEC-027 | XS |
| PR-A | docs(README, index): demo gif hero + landing-page polish |
SPEC-027 | S |
PR-A is a single atomic PR: adds docs/assets/demo.gif (≤ 2 MB), swaps
the README hero block, rewrites docs/index.md above the fold per the
layout above. No Swift, no build, no bench — reviewer load is purely
visual. The PR description records the exact ffmpeg invocation and
final byte count so the artifact is reproducible.