Spraak is a lightweight, browser-based voice recorder and transcription app powered by Google's Gemini AI. Record audio directly from your microphone, and Spraak will transcribe your speech to text in seconds — no server required.
🌐 Live demo: https://gpx-go-78518.web.app/
- 🎙️ In-browser recording — captures audio from your microphone using the MediaRecorder API
- 🤖 AI transcription — sends recordings to Google Gemini for accurate speech-to-text conversion
- 📋 One-click copy — copies the transcript to your clipboard instantly
- 🌓 Dark/light mode toggle — switch themes to match your preference
- 🔒 Private by default — your Gemini API key is stored only in your browser's
localStorage - 🚫 No build step — a single
index.htmlfile; open it and go
- A modern browser with support for the MediaRecorder API and Web Audio API (Chrome, Edge, Firefox, Safari 14.1+)
- A free Google Gemini API key
Click the ⚙ (gear) button in the top-right corner and choose Set API Key. Enter your Gemini API key when prompted. The key is saved in localStorage and never leaves your browser except when calling the Gemini API directly.
Click Start Recording and speak. The status indicator in the header changes from idle (amber) to live (green) while recording is active.
Click Stop Recording. Spraak converts the captured audio to WAV format and sends it to the Gemini API. The transcribed text appears in the text area below the controls.
- Copy — copies all text to the clipboard
- Clear Text — empties the text area so you can start fresh
- The browser captures audio via
navigator.mediaDevices.getUserMediaand buffers it withMediaRecorder. - When recording stops, the raw audio blob (WebM/MP4 from the browser) is decoded with the Web Audio API and re-encoded as a WAV file in pure JavaScript.
- The WAV data is Base64-encoded and sent as an inline payload to the Gemini
generateContentendpoint. - Gemini returns a plain-text transcript, which is appended to the text area.
No build tools are required. Open index.html directly in a browser:
# With Python's built-in HTTP server (avoids some browser security restrictions on file:// URLs):
python3 -m http.server 8080
# Then open http://localhost:8080 in your browserBecause browsers require a secure context to access the microphone, Spraak must be served over HTTPS. Deploy the files (index.html, manifest.webmanifest, and the icons/ folder) to any static web host that provides HTTPS — for example GitHub Pages, Netlify, Vercel, Cloudflare Pages, or your own server with a TLS certificate.
⚠️ Serving over plainhttp://(exceptlocalhost) will cause the browser to block microphone access.
| Layer | Technology |
|---|---|
| UI | Vanilla HTML / CSS / JavaScript |
| AI | Google Gemini API (gemini-3-flash-preview) |
| PWA | Web App Manifest |
| CI/CD | GitHub Actions + Firebase Hosting |
This project does not currently include a license file. Please contact the repository owner for usage terms.