Contact
← Invariance / Portfolio
Client projectWavely · Productivity · 2026

Hold a key, talk, and the words appear wherever you were already typing.

The application is a desktop dictation tool that lives in the system tray. Hold a key anywhere in the operating system, speak, release — the transcript is placed into whatever text field has focus. No window to switch to, no tab to open, no application that has to support it.

Role
Product · Architecture · Full-stack development · Release
Platform
Windows · macOS
Status
Shipping, auto-updating

Introduction

Talking is three times faster than typing. Almost nobody dictates.

The tools that exist force a choice: the operating system's dictation only works where the vendor decided it should, and the good cloud dictation lives in a browser tab you have to copy out of. Neither knows the words of your profession. It was built to remove all three problems at once — work in any field, in any application, with vocabulary you can tune per use case.

165M

words transcribed

127,000

hours of language processed

faster than typing

Demonstration

One pill, four states.

Almost all of it is a floating overlay that stays out of the way: transparent, always on top, and click-through, so it never steals focus from the thing you are writing into. This is a reconstruction of it moving through a dictation.

Hold to dictate

The real overlay reads microphone level at ten frames a second and draws it as the waveform you see here.

Technology

Proven tools, chosen as a system.

A desktop application with three windows — settings, the floating overlay, and a hidden one-pixel window whose only job is to hold the audio recorder — with a small service behind it.

Desktop shell

Electron

Chromium and Node.js in a single desktop binary. It gives a web codebase real desktop powers — global shortcuts, tray, native windows — from one source tree on Windows, macOS and Linux.

Interface architecture

React

The interface library the whole front end is written in. State drives what is on screen, so complex flows stay predictable instead of becoming a pile of manual DOM updates.

Typed application layer

TypeScript

JavaScript with a type system on top. It catches mismatched data at build time — the class of bug that otherwise reaches a user as a blank screen — and it makes a large codebase safe to change years later.

Build pipeline

Vite

The build tool behind the desktop interface. It serves native ES modules in development, so a change appears almost instantly, and produces a small optimised bundle for release.

Design system

Tailwind CSS

The styling system that keeps a design consistent: spacing, type and colour come from a fixed set of tokens. The result is one visual language instead of a stylesheet that drifts page by page.

Token service

Node.js

The JavaScript runtime the server side runs on. One language across client and server means shared validation and types instead of two implementations of the same rule.

Transcription models

OpenAI

The language and speech models doing the actual work: transcription, correction and translation. They are reached over an API under a contract, so nothing depends on a model running on clinic hardware.

Reproducible runtime

Docker

The application and everything it needs are packaged into one image, so the version tested is bit-for-bit the version that runs in production. Deployment stops depending on what happens to be installed on a server.

Signed data terms

HIPAA amendment

A signed contract with the model provider covering protected health information: defined obligations, defined permitted use, defined breach handling. It is what makes sending clinical text to an external model a deliberate arrangement rather than an assumption.

No prompt storage

Zero Data Retention

The account setting under which prompts and responses are not stored by the provider after the request is answered. The passage travels, is processed, and leaves nothing behind — no training set, no log to subpoena.

Architecture

Everything between the key and the paste.

The whole product is the few hundred milliseconds around a keystroke. Getting that sequence right is most of the engineering.

  1. 01

    The key goes down

    A low-level input hook catches the press anywhere in the operating system — the usual shortcut mechanism cannot express hold-to-talk, only press-to-toggle. If the hook is unavailable it degrades to a toggle rather than failing.

  2. 02

    Recording, and preparation in parallel

    Audio capture starts, whatever is playing is paused, and the credential the transcription service needs is fetched at the same moment — while the user is still speaking.

  3. 03

    The key comes up

    Recording continues for a fraction of a second longer, because people release keys before they finish words. Clips that are too short or too quiet are discarded before they cost an API call.

  4. 04

    Transcribe, then tidy

    The audio goes to the chosen provider with a vocabulary hint matched to the spoken language. An optional second pass cleans the transcript up — and if that pass fails for any reason, the original transcript is used unchanged.

  5. 05

    Insert, and put everything back

    The text is placed on the clipboard, a paste is simulated into the focused field, the previous clipboard contents are restored, and whatever was playing before resumes.

Latency

Where the 178 milliseconds go.

Key down to text in the field. Inference is the dominant cost at 93 ms; the network round trip adds 44, and capture, encoding and the paste into the target application together account for the remaining 41.

Capture & encode
36ms
Network round trip
44ms
Inference
93ms
Insert
5ms
End to end
178ms
  1. You
  2. Microphone10 ms
  3. Browser20 ms
  4. Encoding6 ms
  5. TLS1 ms
  6. Router1 ms
  7. ISP8 ms
  8. Edge12 ms
  9. Speech-to-Text93 ms
  10. Clean-upoptional · not in budget
  11. Streaming22 ms
  12. Insert5 ms

A typical budget for a three-second utterance on a domestic fibre line, with the TLS session already resumed and the optional clean-up pass out of the path. The packet moves in proportion to each stage's share of that budget.

Details

The parts nobody notices unless they are missing.

It pauses your music, then puts it back

Dictating over a podcast is useless. Whatever is playing is paused and afterwards resumed — but only if it was actually playing, so nothing starts on its own.

Vocabulary, not instructions

A transcription model's prompt biases its vocabulary rather than commanding it, only the tail of it counts, and later words weigh more. The medical terminology is therefore placed at the very end, in the language being spoken.

Profiles per kind of work

Language, model, vocabulary and clean-up instruction are grouped into profiles — clinical notes, email, prompts — and switched from the overlay without opening anything.

It refuses to paste into itself

Recording is blocked while the application's own window has focus, with an explanation, instead of silently dictating into the wrong place.

Timing that survives real applications

Small deliberate delays around the paste exist because some applications ignore keystrokes that arrive instantly, and because restoring the clipboard too early destroys the paste.

The overlay holds its position

It re-anchors when displays change, when the machine wakes, when the screen unlocks, and re-asserts itself on a timer in case another application steals the foreground.

Legal

Dictation is clinical text too.

Spoken notes are patient records the moment they are said, so the recording and the transcript are held to the same written terms as anything typed.

A signed HIPAA amendment

Transcription runs under a HIPAA business-associate amendment obtained for this work, not under default consumer API terms.

Zero Data Retention

Audio and transcript produce the result and are not retained by the provider afterwards, and are never used as training data.

The microphone opens on purpose

Recording starts on a deliberate action and stops on one, or on silence. There is no always-listening mode and no background capture.

The audio is not archived

The clip exists for the length of the request. Nothing writes it to disk, and no copy of a dictation is kept on our side.

Result

Five languages, four providers, one keystroke.

It ships as a signed installer for Windows and macOS with automatic updates, a five-language interface, and a provider layer that can be swapped without the rest of the application noticing. It is the clearest example of the engineering Invariance brings to a product build: the visible product is a floating pill, and nearly all of the work is in what happens around it.

Book a call