Echo is a text-to-speech workflow app that records audio, transcribes it to text, then uses AI to polish and structure the text. It is designed for fast capture, review, and publishing-ready outputs.
- Blog post: transcribe, review, and refine into a publishable post
- Interview: dialog format that preserves each speaker's personality
- Notes: quick thought capture and clean transcription
- News brief: factual summary with clear points and bullets
- Record or import audio
- Transcribe audio to text
- Review and edit the transcript
- Choose an output format: Blog, Interview, Notes, or News
- Let AI refine the text to match the selected structure
- Copy or export the final result
Echo currently runs as a backend workflow made of an API service, a background worker, shared SQLite persistence, S3-compatible object storage, and a RabbitMQ broker:
apps/api/ .NET Minimal API for recording ingestion and metadata
apps/worker/ Go worker for queued transcription jobs
SQLite shared database for recordings and transcription jobs
MinIO/S3 object storage for uploaded audio files
RabbitMQ message broker for asynchronous workflows
From the project root, create a local environment file:
cp .env.example .envFill in the required values in .env:
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin
TRANSCRIPTION_PROVIDER=openrouter
OPENROUTER_API_KEY=your-openrouter-api-key
OPENROUTER_TRANSCRIPTION_MODEL=openai/gpt-4o-mini-transcribeStart the local stack:
docker compose up --buildThe Compose stack starts:
api: .NET API onhttp://localhost:8080worker: Go background worker for transcription jobsminio: S3-compatible object storage onhttp://localhost:9000minioconsole:http://localhost:9001rabbitmq: RabbitMQ broker onlocalhost:5672rabbitmqmanagement UI:http://localhost:15672
The API and worker share a SQLite database through the appdata Docker volume. Uploaded audio files are stored in MinIO in the echo-files bucket, which is created automatically by the minio-init service.
RabbitMQ uses the default local credentials echo / echo in Compose.
Useful commands:
docker compose logs -f api worker rabbitmq
docker compose down
docker compose down -vUse docker compose down -v only when you want to remove the SQLite and MinIO Docker volumes.
MIT - see LICENSE.
