Duarte Pereira da Cruz

Back to home2026

Unscrolling, a news podcast made for one listener

An agent that reads the sources you follow and turns everything new into a few minutes of audio, so you can stop doomscrolling for it.

Who it’s for
People who follow a dozen feeds and spend much of that time scrolling past things they have already seen.
What it changed
Replaces that scrolling with a few minutes of audio covering only what is new, built and deployed as a working app in one weekend.
Where
HackEurope 2026, Dublin
My part
Backend API, TTS and video pipeline, frontend, deployment
Team
Four people, team “Pastel de Data”
Built with
Python, FastAPI, Google Gemini 2.5 Flash, Gemini TTS, Imagen, PostgreSQL, SQLAlchemy, React, TypeScript, Tailwind, Lovable, MoviePy, Docker, Railway

Listen to a briefing, then make your own

On the left is an episode the app generated during the hackathon, voiced by Gemini TTS. On the right, pick a few topics and the same pipeline runs live: it pulls today’s headlines from Google News, has a language model write the script, and your browser reads it aloud.

A real episode

The crosses of Novaya Zemlya

Click any paragraph to jump to it.

Your briefing

Pick up to three topics.

    Model card

    Model
    Llama 3.1 8B Instruct on Cloudflare Workers AI writes the script; your browser’s built-in voice reads it.
    Input
    Up to four recent headlines for each of up to three topics from Google News, falling back to Bing News and then GDELT.
    Original
    At HackEurope, Gemini 2.5 Flash read the full articles and transcripts, and Gemini TTS voiced the result.
    Score
    Not measured. The recorded episode is what the full system sounded like.

    Meant for A taste of the product, not a news source. Follow the article links before repeating anything it says.

    Where it fails

    1. It fills in what headlines leave out

      The live version only sees headlines, and the model pads them with plausible context even though the prompt tells it not to. On 16 October, the Wall Street Journal headline “The riskiest corner of the AI trade is crashing into higher rates” became “according to The Wall Street Journal, this could be a major risk factor for AI companies”, a claim the headline doesn’t make.

    2. Same story, several times

      Duplicates are removed by URL only, so when three outlets cover one event, you can hear it three times in slightly different words.

    3. The voice depends on your device

      Browser voices range from decent to robotic, and some can’t pronounce names in other languages. Nothing in the demo controls which one you get.

    The problem

    Keeping up with the things you care about means checking a dozen feeds: YouTube channels, newsletters, X accounts, podcasts, news sites. Most of that time goes on scrolling past things you have already seen. We wanted an agent to do the scrolling and hand back a few minutes of audio covering only what’s new.

    How it works

    You tell Unscrolling what you follow, either specific sources or just topics. For each source it finds the latest item: the newest video on a YouTube channel, the newest entry in an RSS feed, posts from X through Nitter, LinkedIn posts through Apify. For topics it searches Google News, YouTube and X. Then it pulls the content itself. Articles are scraped and cleaned. YouTube videos use their transcript if there is one; if not, the audio is downloaded and transcribed with Gemini.

    Everything new goes to Gemini 2.5 Flash, which writes a conversational podcast script. Gemini TTS then voices it. Long scripts are split at sentence boundaries into chunks of up to 4,000 characters, and the audio is stitched back into a single WAV. Episodes are cached per user, so replaying is instant and doesn’t cost another generation. Your topic preferences steer what gets pulled in next time.

    On top of the audio there is a chat assistant that answers questions about your briefing, bookmarks, and a video mode. The video mode splits the transcript into slides timed to the audio, and illustrates each slide with an image from Google’s Imagen.

    My part

    Four of us built it over the weekend. I wrote most of the FastAPI backend and the endpoints the app runs on, the TTS and video generation, and most of the React frontend’s pages, and I deployed the whole thing with Docker on Railway. Daniel Borges built the source and topic fetchers and the transcription step.

    About the demo

    The recorded episode was generated by the app during the hackathon. The live half runs a compact version of the same pipeline on Cloudflare: Google News headlines for your topics, then the same script prompt as our backend, with an open model on Workers AI instead of Gemini. Your browser’s built-in voice reads the script instead of Gemini TTS, so it sounds less polished than the recording.