Ctrl + T. Y. Enter.

That’s it. That’s all it takes for me to fall into the YouTube rabbit hole. And there’s no telling when I’ll get out.

I’ve long had a problem with YouTube. It’s the single social media that I’ve been most addicted to in the past. My feed is packed with catchy thumbnails on interesting topics: Sports analysis and highlights, automotive engineering, nuclear science, cutting edge technology, AI updates, climate news, talks from intellectuals. But over time, I realized my YouTube use looked less like choice and more like compulsion. I was watching with every meal, watching before I slept, watching whenever I was bored.

I tried a whole host of solutions over time, but nothing really stuck. So I decided to build my way out of it. This post describes the one solution that finally worked for me: a privacy preserving, self-hosted, AI powered, intentional, and agency-promoting YouTube consumption system.

The Problem

YouTube is a great platform with creators I genuinely appreciate. But the platform design is fundamentally anti-user in multiple ways:

  • Surveillance: all my watch data was collected and monetized, courtesy of surveillance capitalism.
  • Recommendations: pulled me in more-and-more clickbait-y directions, towards more-and-more extreme content. Max Fisher’s The Chaos Machine documents how YouTube’s recommendation algorithm has been linked to real-world political violence—from genocide in Myanmar to far-right radicalization in Germany and Brazil. The algorithm doesn’t just show you what you want; it shapes what you want.
  • Compulsion: even when videos were high quality, I’d say “just one more” and lose hours. YouTube Shorts made this worse—the infinite vertical swipe is pure dopamine, even more addictive than the long-form feed. I was watching mindlessly, not reflecting on anything before jumping to the next video.

What I Tried

I tried several alternatives. Each solved part of the problem, but none was perfect:

  • Privacy frontends (Grayjay, NewPipe, FreeTube, Invidious) are more privacy-preserving and customizable, but not cross-platform. Some of them are flaky and break every once in a while, and none worked on my Samsung SmartTV.

  • Browser extensions that modify the UI (Unhook) removed some triggers, but it only worked on my laptop. And even there, the access mechanism was still too easy—ctrl+t, y, enter and I’m on the YouTube search bar. Plus - I actually like having recommendations sometimes, and I don’t want to make a binary decision between yes-or-no on recommendations: I wanted to own my recommendations.

The Insight

The problem isn’t just YouTube’s UI: It’s the whole access and interaction mechanism. I couldn’t moderate something that’s always one keystroke away—the dependence on willpower is a losing battle against a service engineered for compulsion. My lever wasn’t just removing buttons or thumbnails—I had to remove default access entirely and restore it on my own terms.

The System

The system that I built has multiple moving parts:

  • AdGuardHome (self-hosted) DNS blocking (via Tailscale) blocks YouTube across all my devices—I can’t bypass the system to doomscroll directly.
  • Jellyfin (self-hosted) as the media player, accessible across all devices including my SmartTV.
  • Miniflux (self-hosted RSS) stores YouTube subscriptions.
  • Invidious (self-hosted) provides search.
  • Hermes AI Agent (self-hosted), accessed via Telegram on my phone and laptop.

Every night, a cron job triggers the agent to check RSS feeds and Invidious searches, curate a handful of candidate videos within a time budget, and send me a Telegram message. I converse with the agent to adjust the selection. Once we lock in the set, the agent immediately unblocks YouTube, downloads via yt-dlp, adds to Jellyfin, and re-blocks YouTube—the whole download cycle takes minutes, and YouTube stays blocked the entire rest of the time.

Then throughout the day, I have access to the videos that I predetermined, but only via Jellyfin. So I have my allocated quota of content that I like, but no more, and it’s literally impossible to access YouTube directly to get more.

The point is: YouTube is blocked everywhere, on every device, all the time—and the only way content gets in is if I deliberately let it in.

The Feedback Loop

At the end of each day, the agent asks me to rate and discuss the videos I watched. This feedback is dual-use: it forces reflection instead of mindless consumption, and it refines future recommendations.

Feedback is stored in a SQLite DB the agent uses for feed curation reasoning—the system gets smarter about what I actually value over time.

This is the part that makes it qualitatively different from an RSS filter or a cron script. The natural language conversation is what creates intentionality—I’m not just restricting access, I’m actively choosing what to watch and reflecting on it after.

%%{init: {flowchart: {nodeSpacing: 40, rankSpacing: 60, curve: 'basis', padding: 15}}%%

flowchart TD
    subgraph blocking["DNS-Level Blocking—always on"]
        AGH["AdGuardHome<br/>(self-hosted DNS)"]
        TS["Tailscale<br/>(mesh VPN)"]
        AGH -->|blocks YouTube| TS
    end

    subgraph curation["Nightly Curation—cron job"]
        direction LR
        MF["Miniflux<br/>(RSS feeds)"]
        INV["Invidious<br/>(search)"]
        AI["Hermes AI<br/>Agent"]
        TG["Telegram<br/>Conversation"]
        MF --> AI
        INV --> AI
        AI <-->|candidates ↔ approval| TG
    end

    subgraph delivery["Download & Delivery"]
        DL["yt-dlp"]
        JF["Jellyfin<br/>(self-hosted)"]
        DL --> JF
    end

    AI -.->|"1. unblock"| AGH
    AGH -->|"2. download"| DL
    JF -.->|"3. re-block"| AGH

    JF -->|stream| YOU
    YOU["You"]
    YOU -->|feedback| TG
    AI -->|store| DB[("Watch Info<br/>DB")]
    DB -->|refine| AI

    TS ~~~ MF
    TG ~~~ DL
    JF ~~~ YOU

    classDef block fill:#1a1a2e,stroke:#e94560,stroke-width:2px,color:#eee
    classDef curate fill:#16213e,stroke:#4a6fa5,stroke-width:2px,color:#eee
    classDef deliver fill:#0f3460,stroke:#4ecca3,stroke-width:2px,color:#eee
    classDef db fill:#533483,stroke:#a855f7,stroke-width:2px,color:#eee
    classDef you fill:#2d2d2d,stroke:#fbbf24,stroke-width:3px,color:#fff,font-weight:bold

    class AGH,TS block
    class MF,INV,AI,TG curate
    class DL,JF deliver
    class DB db
    class YOU you

    style blocking fill:#0d0d1a,stroke:#e94560,stroke-width:2px,color:#eee
    style curation fill:#0d1525,stroke:#4a6fa5,stroke-width:2px,color:#eee
    style delivery fill:#0a1929,stroke:#4ecca3,stroke-width:2px,color:#eee

    linkStyle 5 stroke:#e94560,stroke-width:2px,stroke-dasharray:5 5
    linkStyle 7 stroke:#e94560,stroke-width:2px,stroke-dasharray:5 5

What It Costs

There are some tradeoffs. For one, I lose the serendipity of YouTube’s recommendation engine. Sometimes a rabbit hole teaches you something. I might miss new creators.

Also, when someone sends me a YouTube link, I can’t just click it. I keep Invidious around for when somebody sends me something that I need to watch ASAP, but that’s a potential escape hatch in itself.

The one other place this system falls short is sports highlights. I can’t watch something the moment it’s trending. The nightly batch means I’m always a day behind. Sports highlights are the prime example—being a day late on a race finish or a goal means you’ve already seen it on Twitter or heard about it before you can watch it properly.

Self-Imposed Friction as Light Patterns

It’s well known that surveillance capitalists employ dark patterns to keep you scrolling—smooth animations, red notification bubbles, autoplay, infinite Shorts swipes. These are deliberate design choices that exploit our psychology to maximize engagement.

But what this system shows is that the inverse is also true: you can design what I’m calling Light Patterns—access mechanisms that promote agency. Blocking by default, restoring on purpose. Conversation before consumption, and reflection after. The same pattern could extend to any addictive-yet-necessary service. AI and self-hosting make this possible in ways that simply didn’t exist before—you can own the entire pipeline, from blocking to curation to reflection.

This is The Medium Is the Message in practice. McLuhan’s insight was that the medium itself—not the content—reshapes human perception and social structure. YouTube as a medium shapes you into a mindless consumer. A system that blocks, curates, and reflects reshapes you into an intentional one. The same content, delivered through a different access mechanism, produces a different person.

And this isn’t just about YouTube, It’s about how you change your relationship with a service without leaving it. It’s a concrete instance of the Resonant Computing manifesto’s principles—private, dedicated, adaptable software that serves human agency instead of extracting attention.

How do I share this?

I’ve been meaning to share this system with friends and family, since a lot of people I know would benefit from such a system. But the challenge I run into is that this system doesn’t have a neat distribution mechanism. You can’t pip install it or download it from an app store.

It requires installing Tailscale, self-hosting Jellyfin, Miniflux, Invidious, AdGuardHome, running an AI agent, and wiring a custom skill. How do you share an interface pattern, not a product?

The obvious distillation—package the blocking + curation + reflection loop as an app—runs into the same wall as every app blocker before it: cross-platform fragmentation, bypass mechanisms, and the fundamental fact that an app you can close is an app you can ignore.

The value isn’t in any single component. It’s in the architecture: DNS-level blocking that can’t be bypassed, self-hosted infrastructure you control, and an AI agent that mediates the relationship through conversation. A single app can’t enforce any of that.

This is the tension that I’m seeing at the heart of light patterns: they’re inherently personal, contextual, and infrastructural. They seem to resist commodification. One of the goals of lbr8.tech is to solve this problem: to make available and distribute not just better apps and better software, but better modes of interacting with technology.