Your AI agents, spoken.
A personal intelligence player.
revoada.app listens to the agents you run — researchers, daily briefings, finance watchers, assistants — and turns what they write into a continuous audio stream. Press play and listen, the way you would listen to music.
Open revoada.appWhat revoada.app is
Modern AI agents produce a lot of useful text: summaries of the news you follow, a briefing of your day, alerts about bills and markets, answers to questions you asked earlier. Reading all of it is work. revoada.app (from the Portuguese word for a flock of birds taking flight) collects those messages in one queue and reads them aloud, so you can catch up while commuting, cooking or walking.
It looks and behaves like a streaming app: a Now Playing screen with a waveform, a queue you can reorder, a history of what you heard, playback speed from 0.75× to 2×, and keyboard shortcuts. The difference is the content: instead of songs, each item is a message written by one of your agents.
Title, agent, category, priority, progress and seek, ±15 s, previous/next, speed.
Messages in playback order. Play, skip, remove, drag to reorder. Survives reloads.
Everything you heard, skipped or left halfway, with one-tap replay.
Voice language, auto-advance, low-priority filter, theme and the feed URL.
How it works
- Your agents write messages. Any tool that can write a JSON file counts: a script, a scheduled job, an LLM workflow, a backend. revoada.app does not run agents itself and does not call any AI service.
- The messages are published as a JSON feed at a URL you control, for example
https://your-domain/feed/messages.json. - revoada.app polls that URL every 5 to 60 seconds. New messages are appended to the queue; messages you already heard are not repeated.
- Each message is played. If it carries an audio file (
audio.url), the file is streamed. If it only has text, your browser's speech synthesis reads it in the language you chose (Portuguese, English or Spanish, or the language set on the message).
Everything runs in your browser. Preferences, queue and history are stored locally; nothing is sent to revoada.app servers. The only network traffic is the feed you configured.
The message format
A feed is a JSON document with a list of messages. Only five fields are required: id, agent, title, text and created_at. Everything else is optional and has sensible defaults.
{
"schema_version": 1,
"generated_at": "2026-10-20T07:00:00-03:00",
"messages": [
{
"id": "msg_001",
"agent": { "id": "daily_briefing", "name": "Daily Briefing" },
"type": "briefing",
"priority": "high",
"title": "Your Tuesday briefing",
"text": "Good morning. You have three meetings today...",
"lang": "en-US",
"audio": { "url": null, "format": "mp3", "duration_seconds": null },
"created_at": "2026-10-20T07:05:00-03:00",
"expires_at": "2026-10-21T07:00:00-03:00"
},
{
"id": "msg_002",
"agent": { "id": "researcher", "name": "Researcher" },
"type": "research",
"priority": "normal",
"title": "Small models are closing the reasoning gap",
"text": "A new wave of small language models...",
"audio": { "url": "https://your-domain/feed/audio/msg_002.mp3",
"format": "mp3", "duration_seconds": 42 },
"created_at": "2026-10-20T06:40:00-03:00"
}
]
}
| Field | Required | Meaning |
|---|---|---|
id | yes | Unique, stable identifier. Used to avoid repeating a message you already heard. |
agent.id, agent.name | yes | Who wrote it. Known ids (researcher, daily_briefing, finance_watcher, personal_assistant) get their own colour and icon; any other id works. |
title | yes | Short headline shown in the player and the queue. |
text | yes | What is read aloud when there is no audio file. Any language, UTF-8. |
created_at | yes | ISO-8601 timestamp, with time zone offset. |
type | no | briefing, research, insight, finance, reminder, alert, response. Shown as a category chip. |
priority | no | low, normal, high, urgent. Urgent and high items are queued first; low ones can be filtered out in Settings. |
lang | no | BCP-47 tag such as pt-BR or en-US. Picks the speech voice for this message. |
audio.url | no | Link to an mp3/wav/m4a. When present the file is played instead of the synthesized voice. |
audio.base64 | no | The audio bytes embedded in the message (base64, with audio.format naming the container). Keeps a whole feed in a single JSON file, e.g. a Gist. Takes precedence over audio.url. |
audio.duration_seconds | no | Known length. Without it the duration is estimated from the text. |
expires_at | no | After this time the message is dropped from the stream. |
topic | no | Free tag shown as a chip (for example "Markets" or "Science"). |
Invalid entries are skipped one by one; a single bad message never blocks the rest of the feed. Unknown fields are preserved, so you can add your own metadata.
Setting up a live feed
- Publish
messages.jsonon any web server, or in a GitHub Gist (use the raw URL; Gists send the CORS header). If it lives on a different domain than the player, the server must send theAccess-Control-Allow-Originheader (CORS). - Open revoada.app → Settings → Feed URL, paste the address and press Apply. Choose how often to check for new messages. You can also open
https://revoada.app/?feed=<your-url>: the parameter is applied and remembered, so a bookmark or home-screen shortcut carries the configuration. - Have your agents append messages to the file. The project ships a small command-line helper:
add_message --file feed/messages.json --agent researcher --priority high \
--title "New finding" --text "Text the browser will read aloud." --lang en-US
# with an audio file produced by your own text-to-speech
add_message --file feed/messages.json --agent daily_briefing --title "Briefing" \
--text "Transcript used as fallback." \
--audio https://your-domain/feed/audio/briefing.mp3 --duration 42
Typical producers: a nightly script that summarises your reading list, a scheduled assistant routine that writes the next day's briefing, a finance script that posts an alert when a threshold is crossed, or a backend that converts answers from a language model into audio and publishes the link.
How playback works, honestly
- Audio file: when
audio.urlis set, the file is streamed with seeking and speed control. Withaudio.base64the same happens from bytes embedded in the feed, no separate file hosting needed. - Browser speech: when there is no file, the text is read by the speech synthesis built into your browser. Timing is estimated and marked as such. Voices depend on the browser and operating system; local voices sound best.
- Simulated playback: if neither is available, the clock still advances so the stream keeps moving, and the player says so.
Playback only starts after you press Play, as browsers require. Nothing plays automatically on load.
Frequently asked questions
Does revoada.app run my agents?
No. It is a player. Your agents run wherever you run them; revoada.app only reads the messages they publish.
Does it send my data anywhere?
No. Preferences, queue and history are stored in your browser. The app fetches the feed URL you configured and nothing else.
Which languages are supported?
Any language for the text. For the synthesized voice, Portuguese (Brazil), English (US) and Spanish are offered in Settings, and a message can request any other language through its lang field, limited by the voices installed on your device.
Can I use it on my phone?
Yes. It is a responsive web app with a compact player and bottom navigation, and it can be added to the home screen.
Is it free? Is it open source?
revoada.app is a personal project in active development. The player is free to use with your own feed. The message format is documented above so any tool can produce it.
Get started
Open the player, press Play on the bundled sample to hear how it feels, then point it at your own feed.
Open revoada.app