# Bit by Ear: Daily Two-Minute Audio Lessons from Your Own Notes

> Source: <https://dev.to/ibrahimislam/bit-by-ear-daily-two-minute-audio-lessons-from-your-own-notes-2cea>
> Published: 2026-10-25 20:34:41+00:00

*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady](https://dev.to/challenges/hacktoberfest-week3-2026-10-19)*

**Bit by Ear** turns the notes and PDFs you've been meaning to read into short daily audio episodes. Add a topic, your context, and your sources; adjust and approve the proposed learning plan once. From then on, a background worker prepares each next episode on schedule, and you just press play — two minutes or less, with each episode briefly recalling the previous idea before introducing a new one. It's a private, installable PWA with saved playback position and optional ready-episode notifications. The lazy part: you do the thinking once, then only listen.

[▶ Watch the demo on Streamable](https://streamable.com/e/63ng4k)

[▶ Live](https://bit-by-ear.onrender.com/)

**Small listens. Steady learning.**

Explore something you’ve been meaning to learn, one idea at a time. Bit by Ear turns your own notes and documents into connected daily audio stories. Add a topic and context, adjust and approve your learning plan, then listen at your own pace in a private, installable web app. Each episode briefly recalls the previous idea and introduces a new one. Published audio is measured to be two minutes or less; episode-ready notifications are optional.

Requirements: Node.js 22.22 or newer in the 22.x line, npm, and Docker Desktop (or Docker Engine with Compose).

```
npm ci
cp .env.example .env
npm run local:setup
npm run dev
```

Open [http://localhost:5173](http://localhost:5173). Local development uses deterministic mock providers, so the complete learning flow works without provider credentials. Add OpenRouter and ElevenLabs keys to `.env` and set `PROVIDER_MODE=real` when you want to try live generation. Keys stay…

`render.yaml`) with web service, background worker, and PostgreSQL. Local development uses deterministic mock providers, so the complete flow runs with no API keys and no cost.
The part of the app that actually writes the curriculum is an open-weight model, and it sits behind a single environment variable — `OPENROUTER_MODEL`. Swapping GLM for any other open-weight model is a config change, not a rewrite, so the project never depends on one vendor's roadmap or pricing for its core intelligence. Because generation is cheap and open, a hobby-scale "daily audio for one learner" app is economically viable, and anyone can fork it and run the whole flow locally on mock providers without signing up for anything. A closed, single-provider API would have made both the price of daily generation and the longevity of the project somebody else's decision.

Setup is the only real work: upload sources, tweak the plan, approve. After that the daily cost is pressing play on a two-minute episode — no re-reading, no highlighting, no deciding what to study next. The worker keeps preparing episodes even when the free web service sleeps, and there are no streaks or guilt mechanics; missing a day just means an episode is waiting.
