<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: I_See_You</title>
    <description>The latest articles on Forem by I_See_You (@i_see_you).</description>
    <link>https://forem.com/i_see_you</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3925867%2Fc0febf92-a536-4335-89c9-626bb8f45caa.jpg</url>
      <title>Forem: I_See_You</title>
      <link>https://forem.com/i_see_you</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/i_see_you"/>
    <language>en</language>
    <item>
      <title>I built a Chrome extension to mute Google Meet from any tab — here's what I learned</title>
      <dc:creator>I_See_You</dc:creator>
      <pubDate>Sat, 23 May 2026 07:04:39 +0000</pubDate>
      <link>https://forem.com/i_see_you/i-built-a-chrome-extension-to-mute-google-meet-from-any-tab-heres-what-i-learned-340h</link>
      <guid>https://forem.com/i_see_you/i-built-a-chrome-extension-to-mute-google-meet-from-any-tab-heres-what-i-learned-340h</guid>
      <description>&lt;p&gt;Every remote worker knows this ritual: you're deep in a doc, the dog starts barking, and you frantically Ctrl+Tab through 30 tabs to find the Meet window and hit mute. By the time you get there, your entire team has heard everything.&lt;/p&gt;

&lt;p&gt;I got tired of it, so I built &lt;a href="https://chromewebstore.google.com/detail/meetmute-mute-control-for/jogneopkjiibhdappecehdkghdkpeaep" rel="noopener noreferrer"&gt;MeetMute&lt;/a&gt; — a Chrome extension that puts a floating mute button on every tab during a Google Meet call. Click it from anywhere, or press Ctrl+Space, and you're muted. No tab switching.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Floating button on every tab&lt;/strong&gt; — A small circle sits in the corner. Red = muted, green = live. Drag it to any screen edge; it remembers where you put it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyboard shortcut (Ctrl+Space)&lt;/strong&gt; — Mute mid-sentence in a doc without lifting your hands off the keyboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Push-to-talk&lt;/strong&gt; — Hold the button or shortcut to unmute, release to auto-mute. Walkie-talkie style for noisy environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Toolbar icon&lt;/strong&gt; — Green, red, or gray so you know your mic state at a glance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Site exclusions&lt;/strong&gt; — Right-click the float to hide it on specific sites.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The tech stack
&lt;/h2&gt;

&lt;p&gt;I used &lt;a href="https://wxt.dev/" rel="noopener noreferrer"&gt;WXT&lt;/a&gt; (a framework for building web extensions) with TypeScript and Chrome Manifest V3. Here's the architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;background.ts (service worker)  — central hub, manages state
meet.content.ts                 — injected into Meet tabs, detects call/mute state
float.content.ts                — injected into all tabs, renders the floating button
popup/                          — toolbar popup UI
options/                        — settings page
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;WXT made the developer experience significantly better than raw MV3. Hot reloading, auto-generated manifest, TypeScript support out of the box — it let me focus on the actual extension logic instead of fighting with build tooling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Interesting problems I solved
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Detecting mute state without an API
&lt;/h3&gt;

&lt;p&gt;Google Meet doesn't expose a public API for microphone state. The content script on the Meet tab watches the DOM — specifically the mute button's &lt;code&gt;data-is-muted&lt;/code&gt; attribute and aria labels. It's fragile (Google can change it anytime), but it works reliably and I haven't had to patch it since launch.&lt;/p&gt;

&lt;h3&gt;
  
  
  Floating button on every tab with Shadow DOM
&lt;/h3&gt;

&lt;p&gt;The float button is injected as a custom element (&lt;code&gt;&amp;lt;meetmute-float&amp;gt;&lt;/code&gt;) using Shadow DOM so it's completely CSS-isolated from the host page. No matter what styles a website uses, the button looks the same. I inline the CSS at build time to avoid FOUC.&lt;/p&gt;

&lt;h3&gt;
  
  
  Service worker keep-alive
&lt;/h3&gt;

&lt;p&gt;MV3 service workers get killed after 30 seconds of inactivity. During an active call, I use &lt;code&gt;chrome.alarms&lt;/code&gt; to keep it alive so mute state updates don't get dropped. When the call ends, the alarm stops and the worker is free to sleep.&lt;/p&gt;

&lt;h3&gt;
  
  
  Push-to-talk with pointer events
&lt;/h3&gt;

&lt;p&gt;PTT uses &lt;code&gt;pointerdown&lt;/code&gt;/&lt;code&gt;pointerup&lt;/code&gt; on the float button and &lt;code&gt;keydown&lt;/code&gt;/&lt;code&gt;keyup&lt;/code&gt; via &lt;code&gt;chrome.commands&lt;/code&gt; for the keyboard shortcut. The tricky part was handling the intent delay — a quick click when PTT is enabled should still toggle (not start a PTT session), so there's a short delay before entering "hold" mode.&lt;/p&gt;

&lt;h3&gt;
  
  
  Handling extension reloads gracefully
&lt;/h3&gt;

&lt;p&gt;When the extension updates or reloads, old content scripts become orphaned but their DOM elements stick around. On injection, the float script removes any stale &lt;code&gt;&amp;lt;meetmute-float&amp;gt;&lt;/code&gt; elements before creating a new one — otherwise you'd get duplicate buttons stacking up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Things I'd do differently
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Start with &lt;code&gt;optional_host_permissions&lt;/code&gt; from day one.&lt;/strong&gt; I initially declared &lt;code&gt;*://*/*&lt;/code&gt; as a required host permission, which triggered Chrome Web Store's "Broad Host Permissions" review. Switching to optional permissions with a runtime prompt was better UX anyway — users grant access when they first see the float prompt, and it's less scary than a wall of permissions at install.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test the DOM selectors against Meet's UI updates.&lt;/strong&gt; This is the biggest maintenance risk. Google Meet's DOM changes without warning. I'd set up a periodic smoke test if I were doing this again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy
&lt;/h2&gt;

&lt;p&gt;No data leaves your browser. No analytics, no tracking, no accounts, no external servers. Your preferences (button position, settings) are stored in &lt;code&gt;chrome.storage.local&lt;/code&gt; and that's it. The source code is open.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it out
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Chrome Web Store:&lt;/strong&gt; &lt;a href="https://chromewebstore.google.com/detail/meetmute-mute-control-for/jogneopkjiibhdappecehdkghdkpeaep" rel="noopener noreferrer"&gt;MeetMute - Mute Control for Google Meet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you work remotely and use Google Meet, give it a shot. It's one of those tools where the value is hard to explain until you're mid-call reaching for the mute button and it's just... already there.&lt;/p&gt;

&lt;p&gt;Feedback welcome — I'm still actively developing it. Happy to answer questions about WXT, MV3 development, or anything else in the comments.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F15y0g3wb5e67uzrixkbr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F15y0g3wb5e67uzrixkbr.jpg" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>extensions</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I Built a Chrome Extension to Track How Long You Actually Spend on Each Tab</title>
      <dc:creator>I_See_You</dc:creator>
      <pubDate>Sat, 23 May 2026 06:47:18 +0000</pubDate>
      <link>https://forem.com/i_see_you/i-built-a-chrome-extension-to-track-how-long-you-actually-spend-on-each-tab-24jb</link>
      <guid>https://forem.com/i_see_you/i-built-a-chrome-extension-to-track-how-long-you-actually-spend-on-each-tab-24jb</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;You open a tab to "quickly check" something. Forty minutes later you're still there.&lt;/p&gt;

&lt;p&gt;Browser history tells you &lt;em&gt;what&lt;/em&gt; you visited. It never tells you &lt;em&gt;how long&lt;/em&gt; you stayed. I kept losing track of time across research sessions, YouTube rabbit holes, and work dashboards — so I built something to fix it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Introducing Tab Timer
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tab Timer&lt;/strong&gt; is a Chrome extension that tracks time spent on any website and shows it live via a small floating widget directly on the page — no need to click anything, it's just always there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/tab-timer-website-time-tr/jecijahceghcehppgdadndecenoajpkc?authuser=0&amp;amp;hl=en" rel="noopener noreferrer"&gt;Install on Chrome Web Store&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Floating On-Page Widget
&lt;/h3&gt;

&lt;p&gt;A draggable timer widget lives right on the page. Choose from 4 sizes (Extra Compact to Large). You can customize which buttons show — pause, reset, and lock — or hide them entirely.&lt;/p&gt;

&lt;h3&gt;
  
  
  Focus Mode
&lt;/h3&gt;

&lt;p&gt;When enabled, only the &lt;strong&gt;currently active tab's timer runs&lt;/strong&gt;. Switch tabs, and the previous one pauses automatically. This gives you an honest measure of time actually spent looking at something, not just time it sat open.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lock Timers
&lt;/h3&gt;

&lt;p&gt;Refreshing a page normally resets a timer. Lock a tab's timer and it survives reloads. New timers start locked by default — so a page refresh doesn't wipe your session time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Per-Site Control
&lt;/h3&gt;

&lt;p&gt;Enable Tab Timer only on sites you want to track, or flip on "enable all sites" to track everything. You stay in control of what gets monitored.&lt;/p&gt;

&lt;h3&gt;
  
  
  Analytics
&lt;/h3&gt;

&lt;p&gt;Tab Timer records your time locally and gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Daily time breakdowns per site&lt;/li&gt;
&lt;li&gt;Top sites by time spent&lt;/li&gt;
&lt;li&gt;Trends over time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;(Insert analytics screenshot here)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;All data is stored in Chrome's local storage. &lt;strong&gt;Nothing is ever sent to any server.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Manifest V3&lt;/strong&gt; — built on the latest Chrome extension platform&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service Worker&lt;/strong&gt; for background timer tracking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chrome Storage API&lt;/strong&gt; for persisting timers and analytics locally&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content Scripts&lt;/strong&gt; for injecting the floating widget into pages&lt;/li&gt;
&lt;li&gt;No frameworks, no build tools — plain JS, HTML, and CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trickiest part was handling the Focus Mode logic: pausing timers across all tabs when the active tab changes, while making sure timers survive tab reloads and browser restarts without drifting.&lt;/p&gt;




&lt;h2&gt;
  
  
  Privacy
&lt;/h2&gt;

&lt;p&gt;No accounts. No servers. No tracking of your data by me.&lt;/p&gt;

&lt;p&gt;Everything Tab Timer records stays in your browser's local storage and never leaves your device.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Time limits and alerts (e.g. notify after 30 min on a site)&lt;/li&gt;
&lt;li&gt;Weekly email/export reports&lt;/li&gt;
&lt;li&gt;Dark mode widget theme&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/tab-timer-website-time-tr/jecijahceghcehppgdadndecenoajpkc?authuser=0&amp;amp;hl=en" rel="noopener noreferrer"&gt;Install Tab Timer from the Chrome Web Store&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd love feedback, bug reports, or feature ideas — drop them in the comments below!&lt;/p&gt;

</description>
      <category>extensions</category>
      <category>productivity</category>
      <category>management</category>
    </item>
    <item>
      <title>I Built a Chrome Extension to Track How Long You Actually Spend on Each Tab</title>
      <dc:creator>I_See_You</dc:creator>
      <pubDate>Mon, 11 May 2026 21:17:49 +0000</pubDate>
      <link>https://forem.com/i_see_you/i-built-a-chrome-extension-to-track-how-long-you-actually-spend-on-each-tab-2d1k</link>
      <guid>https://forem.com/i_see_you/i-built-a-chrome-extension-to-track-how-long-you-actually-spend-on-each-tab-2d1k</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;You open a tab to "quickly check" something. Forty minutes later you're still there.&lt;/p&gt;

&lt;p&gt;Browser history tells you &lt;em&gt;what&lt;/em&gt; you visited. It never tells you &lt;em&gt;how long&lt;/em&gt; you stayed. I kept losing track of time across research sessions, YouTube rabbit holes, and work dashboards — so I built something to fix it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Introducing Tab Timer
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tab Timer&lt;/strong&gt; is a Chrome extension that tracks time spent on any website and shows it live via a small floating widget directly on the page — no need to click anything, it's just always there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/tab-timer-website-time-tr/jecijahceghcehppgdadndecenoajpkc?authuser=0&amp;amp;hl=en" rel="noopener noreferrer"&gt;Install on Chrome Web Store&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Floating On-Page Widget
&lt;/h3&gt;

&lt;p&gt;A draggable timer widget lives right on the page. Choose from 4 sizes (Extra Compact to Large). You can customize which buttons show — pause, reset, and lock — or hide them entirely.&lt;/p&gt;

&lt;h3&gt;
  
  
  Focus Mode
&lt;/h3&gt;

&lt;p&gt;When enabled, only the &lt;strong&gt;currently active tab's timer runs&lt;/strong&gt;. Switch tabs, and the previous one pauses automatically. This gives you an honest measure of time actually spent looking at something, not just time it sat open.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lock Timers
&lt;/h3&gt;

&lt;p&gt;Refreshing a page normally resets a timer. Lock a tab's timer and it survives reloads. New timers start locked by default — so a page refresh doesn't wipe your session time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Per-Site Control
&lt;/h3&gt;

&lt;p&gt;Enable Tab Timer only on sites you want to track, or flip on "enable all sites" to track everything. You stay in control of what gets monitored.&lt;/p&gt;

&lt;h3&gt;
  
  
  Analytics
&lt;/h3&gt;

&lt;p&gt;Tab Timer records your time locally and gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Daily time breakdowns per site&lt;/li&gt;
&lt;li&gt;Top sites by time spent&lt;/li&gt;
&lt;li&gt;Trends over time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;(Insert analytics screenshot here)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;All data is stored in Chrome's local storage. &lt;strong&gt;Nothing is ever sent to any server.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Manifest V3&lt;/strong&gt; — built on the latest Chrome extension platform&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service Worker&lt;/strong&gt; for background timer tracking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chrome Storage API&lt;/strong&gt; for persisting timers and analytics locally&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content Scripts&lt;/strong&gt; for injecting the floating widget into pages&lt;/li&gt;
&lt;li&gt;No frameworks, no build tools — plain JS, HTML, and CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trickiest part was handling the Focus Mode logic: pausing timers across all tabs when the active tab changes, while making sure timers survive tab reloads and browser restarts without drifting.&lt;/p&gt;




&lt;h2&gt;
  
  
  Privacy
&lt;/h2&gt;

&lt;p&gt;No accounts. No servers. No tracking of your data by me.&lt;/p&gt;

&lt;p&gt;Everything Tab Timer records stays in your browser's local storage and never leaves your device.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Time limits and alerts (e.g. notify after 30 min on a site)&lt;/li&gt;
&lt;li&gt;Weekly email/export reports&lt;/li&gt;
&lt;li&gt;Dark mode widget theme&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/tab-timer-website-time-tr/jecijahceghcehppgdadndecenoajpkc?authuser=0&amp;amp;hl=en" rel="noopener noreferrer"&gt;Install Tab Timer from the Chrome Web Store&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd love feedback, bug reports, or feature ideas — drop them in the comments below!&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>extensions</category>
    </item>
    <item>
      <title>I Built a Chrome Extension to Track How Long You Actually Spend on Each Tab</title>
      <dc:creator>I_See_You</dc:creator>
      <pubDate>Mon, 11 May 2026 21:17:49 +0000</pubDate>
      <link>https://forem.com/i_see_you/i-built-a-chrome-extension-to-track-how-long-you-actually-spend-on-each-tab-4k7k</link>
      <guid>https://forem.com/i_see_you/i-built-a-chrome-extension-to-track-how-long-you-actually-spend-on-each-tab-4k7k</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;You open a tab to "quickly check" something. Forty minutes later you're still there.&lt;/p&gt;

&lt;p&gt;Browser history tells you &lt;em&gt;what&lt;/em&gt; you visited. It never tells you &lt;em&gt;how long&lt;/em&gt; you stayed. I kept losing track of time across research sessions, YouTube rabbit holes, and work dashboards — so I built something to fix it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Introducing Tab Timer
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tab Timer&lt;/strong&gt; is a Chrome extension that tracks time spent on any website and shows it live via a small floating widget directly on the page — no need to click anything, it's just always there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/tab-timer-website-time-tr/jecijahceghcehppgdadndecenoajpkc?authuser=0&amp;amp;hl=en" rel="noopener noreferrer"&gt;Install on Chrome Web Store&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Floating On-Page Widget
&lt;/h3&gt;

&lt;p&gt;A draggable timer widget lives right on the page. Choose from 4 sizes (Extra Compact to Large). You can customize which buttons show — pause, reset, and lock — or hide them entirely.&lt;/p&gt;

&lt;h3&gt;
  
  
  Focus Mode
&lt;/h3&gt;

&lt;p&gt;When enabled, only the &lt;strong&gt;currently active tab's timer runs&lt;/strong&gt;. Switch tabs, and the previous one pauses automatically. This gives you an honest measure of time actually spent looking at something, not just time it sat open.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lock Timers
&lt;/h3&gt;

&lt;p&gt;Refreshing a page normally resets a timer. Lock a tab's timer and it survives reloads. New timers start locked by default — so a page refresh doesn't wipe your session time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Per-Site Control
&lt;/h3&gt;

&lt;p&gt;Enable Tab Timer only on sites you want to track, or flip on "enable all sites" to track everything. You stay in control of what gets monitored.&lt;/p&gt;

&lt;h3&gt;
  
  
  Analytics
&lt;/h3&gt;

&lt;p&gt;Tab Timer records your time locally and gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Daily time breakdowns per site&lt;/li&gt;
&lt;li&gt;Top sites by time spent&lt;/li&gt;
&lt;li&gt;Trends over time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;(Insert analytics screenshot here)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;All data is stored in Chrome's local storage. &lt;strong&gt;Nothing is ever sent to any server.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Manifest V3&lt;/strong&gt; — built on the latest Chrome extension platform&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service Worker&lt;/strong&gt; for background timer tracking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chrome Storage API&lt;/strong&gt; for persisting timers and analytics locally&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content Scripts&lt;/strong&gt; for injecting the floating widget into pages&lt;/li&gt;
&lt;li&gt;No frameworks, no build tools — plain JS, HTML, and CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trickiest part was handling the Focus Mode logic: pausing timers across all tabs when the active tab changes, while making sure timers survive tab reloads and browser restarts without drifting.&lt;/p&gt;




&lt;h2&gt;
  
  
  Privacy
&lt;/h2&gt;

&lt;p&gt;No accounts. No servers. No tracking of your data by me.&lt;/p&gt;

&lt;p&gt;Everything Tab Timer records stays in your browser's local storage and never leaves your device.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Time limits and alerts (e.g. notify after 30 min on a site)&lt;/li&gt;
&lt;li&gt;Weekly email/export reports&lt;/li&gt;
&lt;li&gt;Dark mode widget theme&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/tab-timer-website-time-tr/jecijahceghcehppgdadndecenoajpkc?authuser=0&amp;amp;hl=en" rel="noopener noreferrer"&gt;Install Tab Timer from the Chrome Web Store&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd love feedback, bug reports, or feature ideas — drop them in the comments below!&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>extensions</category>
    </item>
  </channel>
</rss>
