Sitelet https://github.com/luckiday/FeedFocus
Skip to content

Repository files navigation

Feed Focus for YouTube logo

Feed Focus for YouTube 👋

Chrome Web Store version Chrome Web Store users Manifest V3 TypeScript Privacy License: MIT

A Chrome extension that puts a small 🟢 / 🟡 / 🔴 dot on every YouTube feed tile, showing whether a video looks restorative or attention‑extractive before you click.


✨ Features

  • 🟢 Green: restorative or genuinely deep (lectures, tutorials, slow vlogs, long calm interviews)
  • 🟡 Yellow: neutral, standard entertainment (reviews, playthroughs, casual vlogs)
  • 🔴 Red: high stimulation or clickbait (outrage hooks, hype, drama, most Shorts)
  • ⚪ Gray: offline rule‑based hint when no model result is available
  • 🆓 Free mode works with no API key, through a rate‑limited shared proxy
  • 🔑 Bring your own key: Aliyun Qwen, Volcengine Doubao, or any OpenAI‑compatible API (OpenAI, DeepSeek, OpenRouter, Gemini, Groq, Ollama, …)
  • 🎨 Marker styles: corner dot, tile border, or dim red tiles, plus optional G/Y/R letters for colorblind readers
  • ⚡ Batched, streaming classification with a local cache, so tiles you've already seen cost no extra API calls
  • 🔒 No bundled keys, no analytics, and it only runs on youtube.com

The classifier judges format, not topic. "How Bridges Actually Work" from Practical Engineering gets green, while "This Bridge Collapse Will SHOCK You 😱" gets red.

Disclaimer: Feed Focus is a personal attention cue. It does not diagnose or treat anything, and tiers are heuristic or model opinions.

🚀 Usage

  1. Install from the Chrome Web Store.
  2. Open youtube.com and markers appear under each tile's thumbnail:
    • hollow gray ring: waiting for the model
    • solid gray dot: rules only, no model tier
    • solid green / yellow / red: model result
  3. Click the toolbar icon to switch it on or off, change marker style, or pick an Access mode.

Access modes

Mode Key needed How it works
Free (shared) No Batches go to a rate‑limited Cloudflare Worker (proxy/), which calls Volcengine Ark. Daily caps apply.
Your own key Yes The extension calls your chosen provider directly. The key stays in chrome.storage.local.

Setting up your own key: set Access to Your own key, pick a Provider, paste the key, enter a Model id, then click Test key and Save. For Other (OpenAI‑compatible), the Base URL is the part before /chat/completions (e.g. https://api.openai.com/v1). Chrome asks once for permission to reach that host.

🛠️ Development

Prerequisites: Node.js 18+ and Chrome

git clone https://github.com/luckiday/FeedFocus.git
cd FeedFocus
npm install
npm run build

Load it in Chrome: open chrome://extensions, turn on Developer mode, click Load unpacked, and select the repo root (the folder with manifest.json).

Command What it does
npm run build Bundle src/ into popup/, background/, and content/
npm run watch Rebuild on change
npm run typecheck tsc --noEmit
npm test Typecheck and build
npm run icons Regenerate icons/icon{16,32,48,128}.png
npm run zip Build, then package only the shipped files for the Web Store

How it works

YouTube tab (content script)          Background service worker            LLM
┌───────────────────────────┐  port   ┌──────────────────────────┐
│ scan tiles → rule hint     │ ──────► │ Free → proxy/ (Worker)   │ ──► Volcengine Ark
│ cache hit? paint : enqueue │ ◄────── │ Own key → provider API   │ ──► Qwen / Doubao / OpenAI‑compat
│ batch & stream → paint dot │ partial └──────────────────────────┘
└───────────────────────────┘

Project layout

├── manifest.json
├── src/
│   ├── content/      # tile scanning, YouTube DOM selectors, batching queue, markers
│   ├── background/   # provider + proxy clients, streaming parser, system prompt
│   ├── popup/        # settings UI
│   └── shared/       # settings, message types, tier cache, config
├── popup/ background/ content/   # built output loaded by Chrome
├── proxy/            # Cloudflare Worker for Free mode (deployed separately)
├── scripts/          # icon + zip helpers
├── PRIVACY.md
└── store-listing.md

Self‑hosting Free mode

Deploy your own Worker by following proxy/README.md, set PROXY_BASE_URL in src/shared/config.ts, and rebuild.

🔒 Privacy

  • Reads only visible tile metadata on youtube.com: title, channel, duration, views, and upload time.
  • Sends that metadata only to the provider you choose, or to the Free proxy, which keeps anonymous daily counts for rate limiting.
  • Your API key never leaves your browser except in requests to your chosen provider.

Full policy: PRIVACY.md

👤 Author

luckiday

🤝 Contributing

Contributions, issues, and feature requests are welcome! Feel free to check the issues page.

⭐️ Show your support

If this helps you take back your feed, give the repo a ⭐️ or leave a review on the Chrome Web Store!

📝 License

Copyright © 2026 luckiday.
This project is MIT licensed.

About

Chrome extension that dots every YouTube home-feed video green, yellow or red: restorative or attention-extractive, as judged by an LLM.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages