Dhwani: A self-hosted voice notes app built with Whistle by Cactus Compute Dhwani, a self-hosted voice notes app built on Cactus Compute's Whistle speech-recognition model, transcribes spoken notes locally and saves each as a plain .txt file in a user-chosen folder. The app runs on Python 3.12 with FastAPI, vanilla JavaScript and Tailwind CSS, binds to 127.0.0.1, and keeps audio in memory only, with the Tailwind stylesheet from cdn.jsdelivr.net as the sole outside request. The browser captures microphone audio at 16 kHz with a 25-second recording cap, encodes it as 16-bit mono WAV, and posts it to /api/transcriptions, where the server checks Host, Origin, size and WAV format before transcription. Dhwani ध्वनि means sound in Hindi and Sanskrit. It is a self-hosted voice notes app. Speak a note in your browser. Dhwani turns it into text on your own machine and saves it as a .txt file in the folder you choose. - Private by design: audio and note text never leave your machine. Speech recognition runs locally with Whistle https://huggingface.co/Cactus-Compute/whistle . - Plain files: each note is a .txt file. No notes database, no lock-in. - Simple stack: Python 3.12, FastAPI, vanilla JavaScript, Tailwind CSS. Tags: voice-notes speech-to-text note-taking self-hosted privacy offline local-first fastapi python tailwindcss whistle transcription | Principle | What it means here | |---|---| | Local first | The server runs on the user's machine and binds to 127.0.0.1 . | | Data stays local | Audio is transcribed in memory and discarded. Notes are plain files on disk. | | Small surface | One FastAPI app, one speech model, one file-based store. | | Explicit trade-offs | Each choice has an ADR with its context, consequences and a revisit trigger. | | Testable seams | The transcriber and the folder registry are injected. Tests use fakes. | flowchart LR subgraph Machine "Your machine" subgraph Browser "Browser" Home "Homepage