≻=PlayingFild uses on device machine learning to classify tabs by content, not URL. The same website can be productive or distracting based on the page. Classification happens entirely on your device. Raw page content, HTML and personal text don't leave your browser. Earn break time by focusing and spend it when you need it. Tabs reorder themselves based on what you actually use, and unused tabs close. Includes per window rules, focus timer modes, recap cards, and productivity analytics.
I built PlayingFild because every productivity extension I tried had the same problem they only understood websites, not what I was actually doing.
If I was watching a programming tutorial on YouTube, I'd get blocked. If I was procrastinating on Reddit, it looked exactly the same as researching a bug. Eventually I got frustrated enough to build something that understands page content instead of just URLs.
As a beginner developer with dyslexia (and probably ADHD), I realised punishment wasn't helping me focus. Blocking everything just made me uninstall the extensions. So PlayingFild takes a different approach: it rewards focus, earns you break time, automatically organises your tabs, and quietly cleans up the browser instead of constantly blocking everything.
I do wish it could "read my mind" sometimes, like if I want to use unproductive tabs for a break when I actually need one but stop me from being unproductive when I don't. I know that's a very ambitious, probably impossible goal and hard balancing act but that's the goal of PlayingFild.
I would love feedback, good or bad. Every feature in PlayingFild exists because I ran into the problem myself, and I'm still actively improving it. If something feels confusing, missing, or annoying, let me know.
Thanks, >=PlayingFild's dev
Report
Congrats on the launch! I really like the approach of not just blocking entire pages. How does it handle multi-tasking? Does it only track whichever tab is active? I'll definitely give it a try!
@hannesh Hi, Hannes. Yes, it's great, very overwhelming and a bit stressful about all the bugs everyone will find. I'm glad you like the idea. I think we can do some really cool work in the future based on that idea of understanding user intent and context.
To answer your questions, yes and no, and the distinction matters.
Time only accrues on the tab that you are currently looking at, in the window that has focus. Background tabs neither earn nor burn anything, and if you alt-tab or exit out of Chrome entirely, everything pauses. The exception is media, if a tab is audible or a video is playing, that counts as engagement even with no mouse or keyboard input, so a lecture does not get flagged as idle at minute three.
Classification is the opposite, though. That runs across every open tab continuously, not just the active one, because the tab limit has to rank all of them to decide what closes when you go over.
The part that actually matters for multitasking is that settings are per Chrome window. A work window can run a strict limit with the timer economy on while a separate personal window is left alone, and they don't share anything. So "multitasking" tends to mean two windows rather than fighting one set of rules.
I use it every day, so most of the edge cases got found the hard way.
Hope you find it useful, and I would genuinely like to hear what breaks.
Report
@notredfox Thanks for such a detailed reply! The media playback exception and per-window settings are actually super clever solutions. That completely answers my multi-tasking question! I'll definitely give it a spin and let you know if I run into any issues.
Report
This looks like a useful productivity tool. The context-aware tab management is an interesting approach. How does it handle tabs from different workspaces or projects? Does it group by domain or by user-defined categories?
Thanks Shahryar, a good productivity tool is hard to find these days.
Great question, so I plan on implementing a more advanced layer that would let you input specific keywords (e.g. "Tech, Coding") and define your own goal for that workspace, along with the time you want to spend on it. This would let different windows act as their own workspace, and not be capped at 10 tabs, since researchers or coders often need 10+.
But to directly answer your question. It currently classifies each page as productive or unproductive using a combination of a global model (weighted by what other users have said) and your own local input. Obviously there are edge cases a site no one's classified yet falls back to reading the page content directly with the local model.
But as mentioned, combining the global model, your local model, and (hopefully soon) richer user input context should let the AI build predefined workspaces for specific windows.
Report
rewarding focus instead of just blocking is a much better fit for how people actually slip into procrastination, congrats on shipping it. one thing I'm trying to square - you mention a global model weighted by what other users have classified, but also that raw page content and personal text never leave the browser. what's actually feeding the global model then, is it just a productive/unproductive vote tied to the domain, or something more granular than that?
@galdayan Thanks Gal, appreciate that. Good question, and it's more granular than a flat domain vote but still nowhere near raw content.
What actually leaves your browser is just a hostname (for most sites) or hostname + a shallow, non-sensitive path segment for a very short list of allowlisted sites (such as YouTube etc., to allow it to be page specific for certain sites), paired with a small productive/unproductive score nudge that is weighted by your own contributor reliability as a user, which fluctuates depending on how closely aligned you are with other users votes. That's the only signal feeding the global model a number, never the page text itself.
Locally it goes further individual keywords you flag get their own weight, as do their pairings e.g. the model can learn that gaming + development equals productive while gaming + playthrough equals unproductive. This helps solve the cold start problem when no users have classified a site yet.
Report
@notredfox that's a genuinely well thought out privacy boundary - hostname plus a reliability-weighted score is granular enough to be useful without being creepy. the local keyword pairing bit for cold starts is a nice touch too. appreciate the thorough answer
@galdayan Thanks, Gal. I have spent a, very long time on this project thinking about meany different things like this, and I still have many more features to go. It was a very hard balancing act to get the extension smart but not creepy.
Report
@notredfox makes sense, that kind of balancing act never really ends with these tools. good luck with the rest of the roadmap
Report
rewarding focus instead of punishing distraction is the right call, the uninstall-when-blocked pattern is very real. practical question though: you said classification runs continuously across every open tab, not just the active one. on a laptop with 20+ tabs open all day, does that show up as a noticeable battery or CPU hit, or is the on-device model light enough that it's a non-issue in practice
@omri_ben_shoham1 Thanks, glad that lands. Fair question. It's not a constant scan classification fires when a tab loads or its URL changes, and again when you switch to it, and results get cached per site so revisiting do not re-run anything. Most tabs resolve through a as prior mentioned lightweight keyword based model, the heavier on device model only kicks in for pages that are genuinely ambiguous. It's also gated on Chrome being in the foreground, so nothing runs while it's backgrounded or your laptops idle. In practice 20+ tabs isn't meaningfully different from a handful.
Report
the event-driven + per-site caching design makes sense, that's the right way to keep it cheap. one edge case - what about a tab that's a single-page app where the URL never changes but the content totally does, like a webmail inbox that goes from empty to a long work thread? does the cached classification just stick until you close the tab, or is there some heuristic for detecting that kind of drift
@omri_ben_shoham1 Good catch, that's exactly the case that breaks naive caching. There's a mutation observer watching for content drift, debounced and run on idle so it's cheap. If the extracted text grows meaningfully past what was last classified, it then re-analyses rather than trusting the cache. There is a per-URL extraction budget so a chatty SPA can't spin it forever, and once that's spent the observer disconnects. Soft navigations that never fire a real page load (pushState, hash routes) are caught separately by comparing against the last URL, which resets the extraction state entirely.
Your specific example never gets there: webmail is on the excluded host list (Gmail, Outlook, Proton), so it's not classified at all. The drift handling matters more for things like a docs app or a dashboard that starts empty and fills in.
rewards focus instead of just blocking sites, which fits how procrastination actually happens. classifying by page content instead of URL is the right call, since the same site can be work or a distraction depending on what tab you're actually on.
What needs improvement
would like more visibility into the classification decisions, like a quick log of why a given tab got flagged productive or not, mainly for the edge cases where it guesses wrong
Thanks Omri, and thanks for the questions on Product Hunt too. You've hit the exact thing that's been bugging me.
Slightly embarrassing honest answer: the correction flow partly exists already. There's a prompt that asks "was this site productive?" so you can override wrong guesses and train your own local model. It works in my dev build, but a packaging bug meant the file never made it into the store build, so store users have never seen it.
I found the fix a while back but held off pushing mid-launch because I didn't want to break a build people were actively installing. I've been running the fixed version myself for a while now and it's stable, so it's going out now. Chrome review takes a few days.
The full "why did this get flagged" log is the next layer. The diagnostics exist internally from when I was debugging the classifier, they show which signals fired for a page. Surfacing that to users is what I'm building next, and your review moved it up the list.
>=PlayingFild
Hello,
I built PlayingFild because every productivity extension I tried had the same problem they only understood websites, not what I was actually doing.
If I was watching a programming tutorial on YouTube, I'd get blocked. If I was procrastinating on Reddit, it looked exactly the same as researching a bug. Eventually I got frustrated enough to build something that understands page content instead of just URLs.
As a beginner developer with dyslexia (and probably ADHD), I realised punishment wasn't helping me focus. Blocking everything just made me uninstall the extensions. So PlayingFild takes a different approach: it rewards focus, earns you break time, automatically organises your tabs, and quietly cleans up the browser instead of constantly blocking everything.
I do wish it could "read my mind" sometimes, like if I want to use unproductive tabs for a break when I actually need one but stop me from being unproductive when I don't. I know that's a very ambitious, probably impossible goal and hard balancing act but that's the goal of PlayingFild.
I would love feedback, good or bad. Every feature in PlayingFild exists because I ran into the problem myself, and I'm still actively improving it. If something feels confusing, missing, or annoying, let me know.
Thanks,
>=PlayingFild's dev
>=PlayingFild
@hannesh Hi, Hannes. Yes, it's great, very overwhelming and a bit stressful about all the bugs everyone will find. I'm glad you like the idea. I think we can do some really cool work in the future based on that idea of understanding user intent and context.
To answer your questions, yes and no, and the distinction matters.
Time only accrues on the tab that you are currently looking at, in the window that has focus. Background tabs neither earn nor burn anything, and if you alt-tab or exit out of Chrome entirely, everything pauses. The exception is media, if a tab is audible or a video is playing, that counts as engagement even with no mouse or keyboard input, so a lecture does not get flagged as idle at minute three.
Classification is the opposite, though. That runs across every open tab continuously, not just the active one, because the tab limit has to rank all of them to decide what closes when you go over.
The part that actually matters for multitasking is that settings are per Chrome window. A work window can run a strict limit with the timer economy on while a separate personal window is left alone, and they don't share anything. So "multitasking" tends to mean two windows rather than fighting one set of rules.
I use it every day, so most of the edge cases got found the hard way.
Hope you find it useful, and I would genuinely like to hear what breaks.
@notredfox Thanks for such a detailed reply! The media playback exception and per-window settings are actually super clever solutions. That completely answers my multi-tasking question! I'll definitely give it a spin and let you know if I run into any issues.
This looks like a useful productivity tool. The context-aware tab management is an interesting approach. How does it handle tabs from different workspaces or projects? Does it group by domain or by user-defined categories?
>=PlayingFild
@shahryar_ahmad
Thanks Shahryar, a good productivity tool is hard to find these days.
Great question, so I plan on implementing a more advanced layer that would let you input specific keywords (e.g. "Tech, Coding") and define your own goal for that workspace, along with the time you want to spend on it. This would let different windows act as their own workspace, and not be capped at 10 tabs, since researchers or coders often need 10+.
But to directly answer your question. It currently classifies each page as productive or unproductive using a combination of a global model (weighted by what other users have said) and your own local input. Obviously there are edge cases a site no one's classified yet falls back to reading the page content directly with the local model.
But as mentioned, combining the global model, your local model, and (hopefully soon) richer user input context should let the AI build predefined workspaces for specific windows.
rewarding focus instead of just blocking is a much better fit for how people actually slip into procrastination, congrats on shipping it. one thing I'm trying to square - you mention a global model weighted by what other users have classified, but also that raw page content and personal text never leave the browser. what's actually feeding the global model then, is it just a productive/unproductive vote tied to the domain, or something more granular than that?
>=PlayingFild
@galdayan Thanks Gal, appreciate that. Good question, and it's more granular than a flat domain vote but still nowhere near raw content.
What actually leaves your browser is just a hostname (for most sites) or hostname + a shallow, non-sensitive path segment for a very short list of allowlisted sites (such as YouTube etc., to allow it to be page specific for certain sites), paired with a small productive/unproductive score nudge that is weighted by your own contributor reliability as a user, which fluctuates depending on how closely aligned you are with other users votes. That's the only signal feeding the global model a number, never the page text itself.
Locally it goes further individual keywords you flag get their own weight, as do their pairings e.g. the model can learn that gaming + development equals productive while gaming + playthrough equals unproductive. This helps solve the cold start problem when no users have classified a site yet.
@notredfox that's a genuinely well thought out privacy boundary - hostname plus a reliability-weighted score is granular enough to be useful without being creepy. the local keyword pairing bit for cold starts is a nice touch too. appreciate the thorough answer
>=PlayingFild
@galdayan Thanks, Gal. I have spent a, very long time on this project thinking about meany different things like this, and I still have many more features to go. It was a very hard balancing act to get the extension smart but not creepy.
@notredfox makes sense, that kind of balancing act never really ends with these tools. good luck with the rest of the roadmap
rewarding focus instead of punishing distraction is the right call, the uninstall-when-blocked pattern is very real. practical question though: you said classification runs continuously across every open tab, not just the active one. on a laptop with 20+ tabs open all day, does that show up as a noticeable battery or CPU hit, or is the on-device model light enough that it's a non-issue in practice
>=PlayingFild
@omri_ben_shoham1 Thanks, glad that lands. Fair question. It's not a constant scan classification fires when a tab loads or its URL changes, and again when you switch to it, and results get cached per site so revisiting do not re-run anything. Most tabs resolve through a as prior mentioned lightweight keyword based model, the heavier on device model only kicks in for pages that are genuinely ambiguous. It's also gated on Chrome being in the foreground, so nothing runs while it's backgrounded or your laptops idle. In practice 20+ tabs isn't meaningfully different from a handful.
the event-driven + per-site caching design makes sense, that's the right way to keep it cheap. one edge case - what about a tab that's a single-page app where the URL never changes but the content totally does, like a webmail inbox that goes from empty to a long work thread? does the cached classification just stick until you close the tab, or is there some heuristic for detecting that kind of drift
>=PlayingFild
@omri_ben_shoham1 Good catch, that's exactly the case that breaks naive caching. There's a mutation observer watching for content drift, debounced and run on idle so it's cheap. If the extracted text grows meaningfully past what was last classified, it then re-analyses rather than trusting the cache. There is a per-URL extraction budget so a chatty SPA can't spin it forever, and once that's spent the observer disconnects. Soft navigations that never fire a real page load (pushState, hash routes) are caught separately by comparing against the last URL, which resets the extraction state entirely.
Your specific example never gets there: webmail is on the excluded host list (Gmail, Outlook, Proton), so it's not classified at all. The drift handling matters more for things like a docs app or a dashboard that starts empty and fills in.