YouTube Profiles
I built separate YouTube viewing identities so temporary curiosity does not rewrite a carefully trained feed.
- Role
- Product design + engineering
- Surface
- Extension, content script, popup, options
- Stack
- React, TypeScript, Vite, MV3
- State
- Live on Chrome Web Store
The full walkthrough
My Chrome Web Store demo: create profiles and switch context without leaving YouTube.
YouTube treats every curiosity as identity.
I wanted people to explore freely without worrying that one research sprint, news cycle, or music rabbit hole would take over their main feed.
The algorithm pollution problem
Every search and watch session teaches YouTube. A short-term interest can keep showing up long after the intent is gone.
The workaround problem
Incognito loses account benefits, multiple Google accounts add friction, and cleanup happens only after the feed has shifted.
The trust problem
Because the extension touches identity, I had to be precise about what it does, what it cannot guarantee, and where data lives.
Setup and switching, up close
A picker that meets you on YouTube
No new tab and no settings detour. The picker appears over the feed, so switching context is one clear choice.
Creating a profile
A new profile is just a name, an icon, and a color. The setup stays lightweight.
Lightweight switching
The toolbar popup keeps switching close, shows the active profile, and gives a quick path to another mode.
Profiles and preferences
Options lists linked profiles, explains what switching does, and handles the recovery work.
No backend
I kept the extension client-side, with profile metadata in browser storage and no data collection.
YouTube is not a stable platform
I had to work around content scripts, DOM changes, native account flows, and unusual YouTube channel states.
Identity must be exact
The promise only holds when each profile maps to the right YouTube channel. If that mapping is wrong, the UI has to stop and recover.
Trust through transparency
I used direct language for setup, active modes, and limits instead of pretending to control the algorithm.
Netflix, not Chrome Settings
I made profile choice visual and familiar, with named cards, color, and personality instead of a hidden settings dropdown.
Invisible until needed
Once a profile is active, I wanted the extension to recede into small indicators, popup access, and lightweight overlays.
Local-first by default
No product accounts, no server, no telemetry, and no unnecessary permissions. That keeps the privacy story simple.
How the product sharpened through shipping
- Positioning Git history: AlgoGuard to YT Profiles
Moved from defensive utility to clear product metaphor
I moved from an abstract algorithm guard to a clearer metaphor: profiles for YouTube viewing.
- Core UX Design docs + profile selector commits
Made profile selection a deliberate entry moment
I turned switching into a visual entry choice before the user starts watching.
- Onboarding Git history: onboarding redesign and linking flows
Turned setup into guided identity mapping
I made onboarding explain the model, link Main Feed, and guide secondary profile setup without exposing too much YouTube channel complexity.
- Everyday switching Git history: popup, shortcuts, cross-profile actions
Reduced friction after setup
Popup switching, shortcut hints, active banners, and cross-profile watch actions made the extension feel usable day to day.
- Launch QA Live extension E2E report, 2026-05-29
Found the invariants that matter most
Live QA showed the visual experience worked, but setup preconditions and channel matching needed stricter handling.
The shipped surfaces
A clear first-run explanation
I explain the model before asking users to create or link profiles.
The first job is trust: explain what is happening before touching account or channel state.The launch QA made the trust boundary sharper
My live Chrome Web Store E2E test showed that the extension installed cleanly and the visual experience worked, but first-run channel setup needed tighter guardrails.
What worked
Install, onboarding, profile selection, popup switching, and the visual return to Main Feed all worked once a YouTube channel existed.
What broke
Signed-out setup could start too early, accounts without a YouTube channel could stall, and a secondary profile could link to the wrong channel id.
What changed in the product thinking
I tightened the invariant: never imply feed separation unless channel identity is exact and setup preconditions are safe.
What YouTube Profiles shows about my product practice
This product shows how I think about small tools with real trust boundaries. The interface matters, but the harder work is deciding when to stay invisible, when to interrupt, and when to block progress.
The launch QA made the product sharper. Trust is not a visual layer; it is an invariant. If profile identity is not exact, the product has to stop, explain, and recover.
YT Profiles is a small consumer tool with a real trust boundary underneath. I am proud of the polish, but the important lesson is sharper: if a product touches identity, it has to be honest before it is clever.