Part I — Privacy Policy
Section 1

What We Collect

Undistracted Me is designed to keep your data on your device.

The short version

We do not operate a user database. We do not collect your name, email, or any personally identifiable information on our own servers. We do not track your browsing history. All widget configuration stays in your browser's local storage.

Data that stays on your device

Data passed through our Vercel proxy

Some API calls are routed through our backend at undistractedme.sarojbelbase.com.np so that secret API keys are never embedded in the extension bundle. These calls are:

Our proxy does not log user-identifiable information. Standard web-server access logs (IP address, timestamp, HTTP method) may be retained for up to 30 days by our hosting provider (Vercel) for security and abuse-prevention purposes.

Geolocation

The Weather widget can optionally use your location to show local weather. The browser prompts you for permission before any coordinates are read. Coordinates are sent directly to Open-Meteo (a privacy-respecting, open-source weather service) and are never stored or sent to us. If you decline, you can enter a city name manually.

As a last resort when neither browser geolocation nor a manual city is available, the extension may call a public IP-based geolocation service (freeipapi.com for extension origins; ipapi.co additionally in website mode). Only your IP address is sent; no personal identifier is stored. Both domains are declared in the extension’s host_permissions and are only contacted for this fallback purpose.

Section 2

Third-Party Services

The following external services are contacted when you use specific features. No service is contacted until you enable or use the corresponding feature.

Service Purpose PII sent?
api.open-meteo.com Weather data — no API key, open source None
geocoding-api.open-meteo.com City name → coordinates lookup None
nominatim.openstreetmap.org Reverse geocoding (coordinates → city name) IP only
freeipapi.com IP-based location fallback IP only
ipapi.co IP-based location (website mode only) IP only
nepalipaisa.com Nepali stock company list None
www.merolagani.com Nepali stock chart data None
api.spotify.com Spotify playback control & now-playing OAuth token
accounts.spotify.com Spotify OAuth authentication Credentials
www.googleapis.com Google Calendar events (read-only) OAuth token
tasks.googleapis.com Google Tasks — read, create, update, delete OAuth token
people.googleapis.com Google Contacts search (read-only) OAuth token
oauth2.googleapis.com Google token endpoint (Firefox — via our server) Via server
undistractedme.sarojbelbase.com.np Our Vercel proxy (photos, favicon, FF token exchange) API key

Note on OAuth tokens

When you connect Google or Spotify, an OAuth access token is issued by the respective service and stored in your browser's local storage (or session storage in website mode). This token is sent with each API call to authenticate you — it is never sent to our servers except during the Firefox Google token exchange, where it is forwarded immediately to your browser without being persisted.

Section 3

Google Integration

Undistracted Me can optionally connect to your Google account. No Google feature is active until you explicitly sign in.

Permissions requested

Scope Used by Access level
userinfo.profile Display your name and avatar Read only
userinfo.email Identify which account is connected Read only
calendar.readonly Google Calendar widget — upcoming events Read only
contacts.readonly Contact search in the events panel Read only
tasks Tasks panel — view, create, complete, delete tasks Read & Write

What we do with Google Tasks

What we do NOT do

  • Read task notes, sub-tasks, or due dates beyond what the API returns.
  • Sync, cache, or transmit your task data to any server — it exists only in React memory while the tab is open.

Data Protection for Sensitive Data

We protect your sensitive Google user data (Calendar events, Contacts, and Tasks) by ensuring it never leaves your device. We do not operate any database or remote storage servers. Your data is securely stored purely locally on your device within your browser's sandboxed chrome.storage.local or localStorage environment, which is accessible only by the extension itself. We employ encryption in transit (HTTPS) for all direct API calls between your browser and Google's servers.

Data Retention and Deletion

We retain your Google user data locally only for as long as your account remains connected to the extension. We provide an explicit "Disconnect" mechanism in the extension's Account Settings panel. The moment you click Disconnect, all cached Google user data, profile information, and authentication tokens are immediately and permanently deleted from your local storage. Furthermore, uninstalling the extension prompts the browser to automatically delete all associated local storage data.

Revoking access

In addition to disconnecting within the extension, you can revoke the extension's permissions entirely at any time from myaccount.google.com/permissions. Revoking access does not delete any data from Google's servers — it only removes our application's ability to read or interact with your Google data.

Chrome vs. Firefox auth path

On Chrome, authentication uses chrome.identity.getAuthToken() — token management is handled entirely by the browser. No client secret is needed.

On Firefox, a PKCE OAuth flow is used. The authorisation code is exchanged for tokens via our Vercel endpoint, which injects the client_secret server-side. The secret is never present in the extension bundle.

Section 4

Spotify Integration

The Spotify widget is entirely opt-in and requires explicit sign-in.

Spotify authentication uses the standard PKCE flow. Only the client_id and a locally-generated code_verifier are sent — no client secret is involved. Token exchange goes directly to accounts.spotify.com/api/token and never through our servers.

Browser media sessions (SoundCloud & others)

A content script is injected into SoundCloud pages (*://*.soundcloud.com/*) only. It polls navigator.mediaSession for track metadata and sends it to the background service worker so it can be displayed in the Focus Mode media panel. No data is sent to any external server. The content script does not modify the SoundCloud page.

Section 5

Data Storage

All user data is stored locally in your browser.

Storage type What is stored When cleared
chrome.storage.local Widget settings, Spotify tokens, Google Calendar cache, OAuth connected flags Extension uninstall
localStorage UI preferences, theme, widget layout, search history, Zustand state Manual clear / uninstall
sessionStorage (website only) Google and Spotify OAuth tokens — scoped to tab session Tab close

Security Measures

No data is synced to the cloud via chrome.storage.sync. Data does not leave your device except for the API calls described in Section 2.

Section 6

Browser Permissions

Undistracted Me declares only the permissions necessary for its features.

Permission Why it is needed
identity Google OAuth (getAuthToken) and Spotify PKCE (launchWebAuthFlow)
storage Widget configuration, Spotify tokens, Google Calendar event cache
geolocation Weather widget auto-location — browser prompts user before coordinates are read
topSites Quick Access widget shows the user's most-visited sites — data is displayed inline only
tabs (a) Check if a new-tab page is active before showing a look-away notification; (b) route media playback commands to the SoundCloud content script
notifications Google Calendar event reminders, Pomodoro timer completion, look-away break alerts
alarms Minute-level periodic alarm for event reminders and look-away timer — required because MV3 service workers do not persist
scripting Re-injects the SoundCloud media content script into already-open tabs when the extension is installed, updated, or Chrome restarts — ensures media controls work without a page reload
Section 7

Children, Changes & Contact

Children's privacy

Undistracted Me is not directed at children under the age of 13. We do not knowingly collect personal information from children. If you believe a child has provided personal information, please contact us and we will remove it.

Changes to this policy

We may update this policy when we add new features that affect data handling. The "Last updated" date at the top will change. Significant changes will be noted in the extension's changelog.

Contact

Questions, concerns, or data requests: hey@sarojbelbase.com.np
Website: https://undistractedme.sarojbelbase.com.np


Part II — Terms of Service
Section 8

Terms of Service

By installing or using Undistracted Me, you agree to these terms.

1. Use of the extension

Undistracted Me is provided free of charge for personal, non-commercial use. You may not reverse-engineer, redistribute, or create derivative works that misrepresent their origin as official Undistracted Me releases.

2. Third-party accounts

Features that connect to Google or Spotify are governed by those services' own terms:

You are responsible for complying with the terms of any third-party service you connect to through the extension.

3. No warranty

Undistracted Me is provided "as is" without warranty of any kind. We do not guarantee uninterrupted availability, accuracy of third-party data (weather, stock prices, etc.), or compatibility with future browser versions.

4. Limitation of liability

To the maximum extent permitted by law, we shall not be liable for any indirect, incidental, special, or consequential damages arising from your use of the extension, including but not limited to data loss, service interruptions, or reliance on displayed information.

5. Acceptable use

You agree not to:

6. Open source

The source code is publicly available. Community contributions are welcome under the terms of the project's licence. Using the source code in your own project must comply with that licence.

7. Changes to terms

We may revise these terms at any time. Continued use of the extension after changes are posted constitutes acceptance of the updated terms.

8. Governing law

These terms are governed by the laws of Nepal. Disputes shall be resolved in the courts of Kathmandu, Nepal.

Questions?

If you have questions about these terms or the privacy policy, reach out at hey@sarojbelbase.com.np. We aim to respond within 3 business days.