Architecture

How Recitey actually works.

Most voice tools describe the magic in marketing prose. This page is the honest version. Models, request formats, what crosses the wire, what does not, and how to verify any of it.

The data flow

You hold the hotkey. The desktop app captures audio from your microphone, sends it to a Whisper speech-to-text model running on your GPU, gets back rough transcribed text, and either pastes that text directly (Free tier, no cleanup) or sends the text to Anthropic for a quick rewrite (Pro tier, optional). The cleaned sentence then lands at your cursor in whatever app is currently focused.

Three nodes. Mic. Your machine. Your cursor. The audio never travels further than your machine. Only text ever touches a network, and only when you turn on Pro cleanup and only for the cleanup step.

On your machine

The desktop app is an Electron + React + TypeScript build for Windows 10+ and macOS (Apple Silicon). Audio capture uses PortAudio. The speech-to-text model is Whisper large-v3-turbo via sherpa-onnx, downloaded once on first launch and stored under a local app-data folder (%LOCALAPPDATA%\Recitey\models\ on Windows) on your disk. The model runs on CUDA when an NVIDIA GPU is detected and falls back to CPU otherwise.

The hotkey listener runs in the Electron main process and registers a global system hotkey through the OS keyboard hooks. Text injection at the cursor uses the OS clipboard plus a synthesized paste keystroke, which is why Recitey works in any text field your operating system already knows about.

The Free tier is fully offline by default. Nothing leaves your device. The install is roughly 3 GB once the model is downloaded.

In the cloud, optional, Pro only

Pro adds the Cleanup and Rewrite modes which send the rough transcribed text (never audio) to Anthropic for a short language-model pass that removes filler words, fixes punctuation, and adjusts tone for the destination app. The model is Claude Haiku 4.5 (model string claude-haiku-4-5-20251001). The request goes through our API at recitey.com/api/proxy/process which is a thin authenticated proxy: it authenticates your account, applies rate limits, increments your usage counter, and forwards the text to Anthropic.

The prompt template, the temperature setting, the max tokens, and the response shape are documented inline in the source at src/lib/services/llm.ts of the website repo. The cleanup step uses temperature 0.2 to keep the output close to what you said. The rewrite step uses 0.4 to allow a small amount of restructuring.

What we send to Anthropic

The request body is the rough transcribed text plus the short system prompt that defines the mode (Cleanup vs Rewrite vs Fast) and an optional context hint about the active app, so a Slack message gets a different polish than a Gmail reply. No audio. No user-identifying metadata is included in the prompt itself. The HTTP request to Anthropic is authenticated with our own Anthropic API key, not yours.

Anthropic does not train on data submitted through their API, per their published policy. We do not log the request body or the response body on our side. We do log the request metadata (word count, latency, your account ID, your subscription tier) so we can answer support questions and bill correctly.

Auth, rate limits, and quotas

Sign-in uses Google OAuth or a magic-link email. We issue a 30-day JWT signed with HS256. The Electron app stores the JWT in the OS keychain and re-verifies it on startup. When your plan changes server-side (you upgrade to Pro, or your subscription expires), the next startup picks up the new state.

Rate limiting is enforced at the proxy. The current limits are: 5 magic-link requests per IP per minute, 30 cloud-rewrite requests per Pro user per minute. The Free cloud quota is 2,000 words per ISO week. Past the cap, the Electron client silently falls back to local processing, no user-visible error.

Privacy commitments, verifiable

Five claims and how to verify each.

  • Free and local transcription stay on your device. Verifiable in airplane mode: with transcription set to local, dictation still works offline and no audio leaves the machine. Pro adds optional cloud modes for speed, which can send text for cleanup and audio for faster transcription.
  • Free is fully offline. Disconnect from the network and Free still works. Verifiable in airplane mode.
  • Anthropic does not train on API data. Per Anthropic's commercial terms. Verifiable in their published policy.
  • No request body or response body is logged server-side. Verifiable by reading src/app/api/proxy/process/route.ts in our repo: we log word count, latency, user ID, and tier, but never the prose itself.
  • Account deletion erases your data within 30 days. Send DELETE /api/user/me from the desktop app or email us. Per GDPR Article 17.

What we do not do

No microphone telemetry. No analytics on audio content. No selling user data to third parties. No advertising of any kind. No on-by-default cloud features for the Free tier. No fingerprinting beyond the device identifier needed for the Pro multi-device limit, which itself is opt-in by signing into Pro.

Questions or corrections

For technical questions, factual corrections, or to report something that does not match what this page describes, email hello@recitey.com. For security-specific reports, use security@recitey.com.

Last verified: May 11, 2026. This page is updated in the same commit as any change to the underlying architecture. If the doc and the running product disagree, the running product wins and this page is wrong; please write to us.