Bit by Ear: Daily Two-Minute Audio Lessons from Your Own Notes A developer built Bit by Ear, an open-source installable PWA that converts a user's notes and PDFs into scheduled two-minute daily audio lessons, with a background worker generating each next episode after the user approves a learning plan once. The app runs the curriculum-writing model through a single OPENROUTER_MODEL environment variable, letting users swap open-weight models like GLM via configuration, and ships with deterministic mock providers so the full flow runs locally without API keys or cost. Live generation uses OpenRouter and ElevenLabs keys, and the project deploys via render.yaml with a web service, background worker, and PostgreSQL. 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.