Local Browse Analytics

Overview
Powered by modern browser APIs, Local Browse Analytics is a privacy-first Chrome extension that helps you track your digital habits and productivity—without ever sending a single byte of data to the cloud.
Technologies
- TypeScript
- Chrome Extension API (Manifest V3)
- Vanilla CSS
- HTML5
- IndexedDB
Features
Originally built to solve the growing problem of invasive data tracking, Local Browse Analytics was designed with a strict zero-telemetry philosophy. With recent updates, here are the core features:
- 100% local, offline-first data storage ensuring absolute privacy.
- Dynamic productivity scoring based on a semantic categorization engine.
- A robust custom rules engine to override domain classifications.
- A sleek, real-time popup dashboard for quick-glance tracking.
Development and Challenges
I find it is easier to focus on solving problems when the flow and architecture are firmly established, so I always start with a strict privacy-first architecture plan. Local Browse Analytics was no exception. Here is what the main dashboard looks like:

The Local Data Challenge
While building Local Browse Analytics, ensuring absolute data privacy presented unique challenges. Most modern analytics tools rely on cloud databases to process and aggregate data. I had to shift this entire paradigm to the client side.
I utilized IndexedDB for robust, asynchronous local storage. However, structuring the database to handle thousands of browsing events efficiently—without blocking the browser's main thread or slowing down the user's computer—required careful optimization and indexing.

Adapting to Manifest V3
Transitioning tracking logic to Chrome's Manifest V3 posed another significant challenge. Because MV3 relies on ephemeral background service workers that the browser can terminate at any time to save memory, keeping an accurate, continuous timer for active tabs was tricky.
To address this, I shifted away from continuous background loops. Instead, I engineered the extension to persist state changes immediately to local storage upon tab updates, and utilized the Chrome alarms API to handle background synchronization cleanly.
Here is an example of the required manifest configuration for this setup:
manifest.json
{
"manifest_version": 3,
"background": {
"service_worker": "background.js",
"type": "module"
},
"permissions": [
"tabs",
"storage",
"alarms",
"activeTab"
]
}Additionally, running strict Content Security Policies (CSP) verified that the extension remained secure from external script injections.
Conclusion
Building Local Browse Analytics was a rewarding experience that enhanced my understanding of privacy-first architecture. Overcoming challenges, such as adapting to Manifest V3 constraints and configuring highly optimized local databases, helped me discover valuable tools and optimization techniques. I'm excited to share more about the development process in a later article.