The Rise of the 2000s Web — a documentary
Nods to your 2000s streak
Chrome extension
Prism is a chat side panel for YouTube that turns intent — a mood, an era, a curriculum, a duration — into a short, hand-picked batch of videos. Every pick explains itself, and the taste model behind it lives only on your machine.
Try asking: “”
The gap
The search box is built for finding a video you already have in mind — not for expressing an intention. That gap is exactly where Prism lives.
“I want something long to listen to while I cook.”
“I remember loving documentaries around 2007.”
“I want to get better at photography, in order, from the beginning.”
“Show me something outside my usual bubble.”
Prism closes the gap between intent and results — while keeping every bit of the personalization on your own machine.
How it works
Under the hood is a five-module engine inspired by BeezGroup's 2022 design document: a “thought” enters, gets parsed, becomes a plan, searches YouTube with your own session, and returns as a small deck of cards — each with a one-line reason why it's there.
“Recording this in your request file…”
Your ask is saved as a chat message and a memory. Detected topics get a small weight bump before any search happens.
“Parsing what you actually want…”
The intent parser extracts topic, format, era, duration, level, mood — and the kind of ask. Small talk stops here; no search needed.
“Searching YouTube and collecting candidates…”
The planner builds the query and YouTube's own filter flags. The background fetches the results page with your session and parses the embedded JSON.
“Scoring candidates against your interests…”
Every candidate is scored — affinity, era, duration, format, level, your taste dials, views — then filtered for things you've already seen.
“Writing the best matches to your response file…”
Top six (max two per channel) become cards with ≈year chips and why-lines, plus alternative angles and follow-up chips.
An illustration of the side panel. Titles are illustrative; the mechanics are real.
| You type | What Prism does |
|---|---|
listen to a podcast | Long-form search (20+ minutes, YouTube's own filter); podcasts automatically imply “long” unless you say otherwise. |
watch a video from the 2000s | Sorts by the era's most-viewed (“classics”), then post-filters by estimated decade; cards show an ≈2009 chip. If too few strict matches exist, it relaxes gracefully and says so. |
learn a business skill | Tutorial-leaning query; practical 10–30 minute picks. |
teach myself programming | Beginner-weighted query; front-loads “from scratch” content; offers a Go deeper follow-up and can become a learning path. |
90s hip hop | Era (“90s”) + topic text (“hip hop”) both parse. |
cooking videos under 10 minutes | Duration filter (“under 10 minutes”). |
a relaxing lofi mix to study | Mood detection (“calm & focus”) and music-leaning formats. |
a video from the 2000s | Works with no topic at all — the era alone plots a plan. |
more like #1 | Riffs on the #1 pick of your latest batch — excluding it, using its title and channel as the seed. |
take me back to 2008 | The Time Machine — a keepsake deck across every one of your chosen areas. |
latest on my topics | A fresh, date-sorted deck covering each area you picked during onboarding. |
make me a learning path for python | Builds an ordered, time-budgeted curriculum — beginner → tutorial → advanced. |
Every batch also brings different angles (a modern take, a gentler on-ramp, an adjacent topic), follow-up chips, and a why-line under each pick drawn from your own graph.
Research
Prism is a working implementation of “Sleeping-Zero Algorithm and Neural Synthesizer” — a design document published by BeezGroup in 2022. The names sound futuristic; the implementation is honest, deterministic, and yours to audit.
| Design document concept | What it means | Where it lives in Prism |
|---|---|---|
| Neural Synthesizer | Collects “thoughts” from the device (apps used, likes, location…) and decides the delivery format for answers. | lib/synth.js + content/collector.js — gathers watch sessions, searches and likes (only with consent); decides how each answer is delivered (text, cards, alternatives, chips). |
| Requests file | Everything collected from the device, stored in one place. | prism.requests in Chrome's local storage — an append-only queue of signals. |
| Sleeping-Zero | An engine that wakes on an autonomous interval, reads the requests file, processes it, and writes results to the responses file. | lib/sleeping-zero.js + a Chrome alarm firing every 1 minute: intent parsing, search planning, scoring, era filtering, alternatives, and the background For You batch. |
| Responses file | Everything the engine produced, ready for delivery. | prism.responses — the batches of picks and the For You deck. |
| User account / data dictionary | The per-user database of thoughts, memories, possible responses, outcomes and consent. | prism.profile — the interest graph (topics, channels, eras, formats), the memory log, shown-history, feedback, saved items, and the consent record (lib/interest.js). |
| Cognitive benchmark + consent | A first-run study of the user; the user decides whether to keep or delete it. | The calibration onboarding, the “You” tab benchmark report, and one-click erase. |
Special powers
These are the features that make people keep Prism open: era surfing, curricula, answers from inside videos, and a player that never makes you leave the conversation.
“take me back to 2008”
Instead of one topic, Prism builds a keepsake deck: one or two videos from each of your chosen areas, tuned for that year — searched with era filters and view sorting, years estimated and kept to the closest matches, every card labeled with its topic (“2008 History”).
≈year chip — never pretending to be exact.“make me a learning path for python”
Prism runs a beginner → tutorial → advanced sweep for the topic, keeps only proper videos between 4 and 150 minutes, deduplicates, and numbers the steps. It's a curriculum, not a pile.
Up next: Functions, Explained
“summarize this video” · “when do they mention recursion?”
While a video plays inside Prism, video-scoped questions fetch the caption track — human captions preferred over auto-generated — and answer with the video's own words. No transcript sites, no third-party tools.
04:12 recursion, first mention
11:38 the base case
19:05 recursion vs. iteration
“Picked for you”
On the welcome screen, up to six picks spread across your feature topics — and the engine rotates which topics get featured, so the deck never stacks one corner of your taste.
Play, queue, minimize — keep chatting
Playing videos without leaving the conversation is one of Prism's signatures. Play on any card opens an embedded player over the workspace.
Minimize, dock, drag — the chat stays open.
Focus mode & the little extras
Small things that add up: a distraction blocker, instant doorways, and live engine status — all opt-in, all instant, all local.
Alt+Shift+Y opens the panel; Esc closes the player, menus and sheets in priority order.Every switch is instant and reversible.
Under the hood
No neural network, no cloud — an interest graph of weighted topics where watches, asks, saves and likes add weight, thumbs-down subtract, and everything slowly decays so your profile follows the present, not a permanent record of who you were two years ago.
| Your action | Effect on the topic's weight |
|---|---|
| Onboarding pick | +2.2 per mapped topic (custom: +2.5; avoided words: −2) |
| Asking about a topic | +1.1 per detected topic |
| A YouTube search | +0.55, split across detected topics |
| Watching 15+ s | +0.25 to +2.4 by minutes watched (30-min cap); channels too; format counted |
| Saving a pick | +0.8 split across up to 4 detected topics |
| Liking / un-liking on YouTube | +1.6 / −1.8 |
| Thumbs up / down on a card | +2.2 / −2.6 (downs also suppress similar items) |
The ranking formula — every term is a plain number you could tune in the source
score = (42 − position × 1.3) ← YouTube's own relevance order + interest affinity × 16 ← your topic graph (query relevance ×1.25) + channel affinity × 1.1 + era match × 15 ← exact decade = 1.0, within 3 years = 0.45 + duration fit × 9 + format fit × 8 + level fit × 7 + steering (dials, pins, mutes) + min(6, log10(views)) − 8 if live + 4 if a playlist for a podcast ask − 14 if it matches a deeply-disliked topic − 15 if you've been shown it before
Honesty
The design-document vocabulary sounds like science fiction. Here's exactly what Prism is — and, just as importantly, what it is not.
≈.Benefits
≈year chips are things YouTube's own UI simply cannot do.npm install.Privacy & your data
Chrome's extension-local storage, a private database per browser profile. No analytics, no error reporting, no crash uploads, no third-party servers of any kind.
| Storage key | What's in it |
|---|---|
prism.profile | The user “account”: consent record, interest graph, memories, shown-history, saved, playlists, learning paths, taste dials, feedback, benchmark, stats. |
prism.requests | The Requests file — the append-only queue of collected thoughts (watch/search/like/theme signals). |
prism.responses | The Responses file — delivered batches and the current For You deck. |
prism.chats | Your chat threads and their messages. |
prism.settings | Theme, notification/focus switches, engine heartbeat info. |
prism.pending | A one-shot handoff slot for the right-click “Ask about selection” feature (expires in 2 minutes). |
prism.handoff | The temporary player-handoff mailbox (cleared after use). |
/results pages).One JSON file — prism-export-YYYY-MM-DD.json — with profile, requests, responses, chats and settings. Human-readable and yours.
Wipes memories, the interest graph, shown-history, feedback and stats — but keeps your chats, saved items and playlists.
A two-click flow (“Really? Click again to erase”) that removes all Prism storage and restarts you at calibration.
The little lock in the composer. The ask is answered, then forgotten — it never touches memories or the graph.
Muted topics vanish from recommendations; forget deletes the topic node and all its memories, with a toast confirming the purge.
Background listening (collection) and personalization (graph tuning) — each one click, instant, and reversible.
| Permission | Why Prism needs it |
|---|---|
storage + unlimitedStorage | The on-device account database (chats can grow). |
alarms | The 1-minute Sleeping-Zero cycle. |
sidePanel | To live in Chrome's side panel. |
tabs | To open/reuse YouTube tabs for playback and focus the full-page view. |
contextMenus | The right-click “Ask Prism about selection”. |
downloads | The JSON export download. |
scripting | Re-injecting the collector and launcher into already-open YouTube tabs after an update. |
notifications | The opt-in fresh-picks ping. |
declarativeNetRequestWithHostAccess | The single scoped referer rule that makes in-Prism playback work. |
https://www.youtube.com/* | Running searches, reading captions, watch pages. Nothing else. |
Architecture
A Chrome extension split into sensors on youtube.com, a message router in the background, a five-module engine, and a local database — talking to nothing but YouTube itself.
| Module | The role, in plain words |
|---|---|
| The Neural Synthesizer | The conductor. Receives every chat ask, records it, parses intent, routes to the engine (or to captions/paths/small talk), delivers the reply, and ingests device signals into the profile. Also owns onboarding, saved items, playlists, paths, taste dials, topic flags, reset and export. |
| The Sleeping-Zero | The processor. Builds a search plan from intent + profile, runs YouTube searches, filters by era, scores and ranks candidates, picks the top six (max two per channel), finds alternatives, composes replies — and on the alarm cycle refreshes the For You deck. Also defines the bot-check back-off gate (5 minutes). |
| the Interest Graph | The memory model. Weights, decay, absorption of watches/searches/likes/saves, affinity and why-lines, steering (pins, mutes, sliders), the benchmark report, the weekly digest, and onboarding anchors. |
| The YouTube Adapter | The hands. Encodes YouTube's own filter parameters (sp), fetches results pages from the background with your session, parses the embedded JSON, and normalizes both generations of YouTube renderers. Parses durations, view counts and relative ages. |
| The Intent Parser | The ears. Turns a sentence into a structured intent: topic text, topics, formats, era, duration, level, mood, and a kind (content / discovery / morelike / timetravel / mytopics / greet / thanks / help). |
The UI and background talk through a small typed message system. Every verb does exactly one thing:
Prism uses no API key. It runs the same search URLs YouTube's own website uses, from the background worker, with your browser session. The sp parameter — YouTube's protobuf-encoded filter blob — is built byte-by-byte, and tests pin the outputs against YouTube's known values:
EgIQAQ== videos only
EgIYAg== over 20 minutes
CAMSAhAB era-sorted video
A YouTube IFrame embed with enablejsapi=1, driven over postMessage: play/pause/seek out; playback-state and current-time in — with a listening handshake retried up to 20 times because frames can be slow to boot.
declarativeNetRequest rule (id 153) that applies only to Prism's own player frames.No build step, no bundler, 19 plain JavaScript files. The engine narrates its work in the UI while it runs, and the file layout reads like the architecture.
personal-youtube/
├── manifest.json The extension's ID card: name, permissions,
│ side panel, content scripts, icons.
├── package.json Dev-only metadata: three npm scripts, zero dependencies.
├── README.md Developer quick overview.
├── PROJECT_GUIDE.md The complete guide.
├── SOFTWARE DESIGN DOCUMENT.pdf The BeezGroup 2022 design document.
│
├── background/
│ └── service-worker.js The router + alarm host + embed rule + notifications.
├── lib/
│ ├── store.js Storage keys, defaults, chat & memory helpers.
│ ├── topics.js The vocabulary: 31 topics, 11 formats, matcher.
│ ├── intent.js Sentence → structured intent.
│ ├── ytsearch.js sp encoder, search fetch, ytInitialData parsing.
│ ├── interest.js The interest graph: absorb, decay, affinity, why-lines.
│ ├── sleeping-zero.js Plan → search → era filter → score → pick → voice.
│ ├── synth.js Ask pipeline, signals, playlists, paths, onboarding.
│ ├── embed.js Embed URLs + plain-English error messages.
│ ├── learn.js Learning paths: parse, build, progress, sessions.
│ └── transcript.js Captions: tracks, parsing, moments, summaries.
├── content/
│ ├── collector.js The sensors on youtube.com; focus-mode CSS.
│ ├── launcher.js The floating spark button.
│ └── launcher.css Its styling.
├── ui/
│ ├── app.js The whole workspace (~2,300 lines).
│ ├── app.css The design system (~1,845 lines).
│ └── icons.js Hand-drawn SVG icon set + brand mark.
├── sidepanel/ · page/ The 12-line shells for panel and full page.
├── assets/ Generated toolbar PNGs.
└── scripts/
├── selftest.mjs 155 pure-module checks.
├── integration.mjs 123 end-to-end checks (mocked Chrome + YouTube).
├── check.mjs Parse-check every JS file; validate manifest + icons.
└── make-icons.mjs Dependency-free PNG icon generator.
FAQ
YouTube intercepted the request with its not-a-robot page. Open youtube.com, clear the check once, wait a few minutes (Prism pauses searching for 5 minutes on its own), then try again.
YouTube's embed identity rules. Prism's fix is automatic; if you still see it, reload the extension at chrome://extensions (this re-registers the referer rule) or use Open in a new tab. Some videos simply forbid embedding — that message means it's the owner's choice.
Shown after a 10-second stall — often a YouTube hiccup or a pending human-check. Try Try again, or open in a new tab.
Chrome invalidates open extension pages when the extension reloads. Close the panel (or the full-page tab) and open it again.
Check the You tab: Background listening and Personalization must both be on. Also note that only sessions of 15+ seconds of actual playback count, only while the tab is visible, and likes only register when clicked during a tracked session.
Yes. Search, the time machine, learning paths and captions all work; only the graph tuning of results and the For You deck stop.
The You tab: benchmark, memories timeline, topic list, eras and formats. “Export my data” gives you the raw JSON.
You tab → Delete everything (two clicks). Or Clear memories to keep chats, saves and playlists but reset the taste model.
It re-attaches on navigation and steps aside in fullscreen. After an extension reload it self-heals with a “takeover” token when you next visit YouTube. Worst case, refresh the YouTube tab.
Chrome 116+ is the target. Chromium-based browsers may work but are untested; Firefox's extension system differs (no side-panel API in the same form).
The panel itself works and your data is local, but search, captions and playback need youtube.com reachable — that's the only network Prism uses.
Glossary
sp is a tiny protobuf message, base64-encoded.Early access
Prism is in the post-development phase and soon releasing. Early-access members get the packaged Chrome build first, fresh-picks updates as they ship, and a direct line for feedback.
Join the early-access community and help shape the future of Prism.
npm test).This spot is reserved for the early-access Google Form. Check back soon — or use the direct link once it's live.