{"id":49581276,"url":"https://github.com/nvusdev/simple-productivity-blocker","last_synced_at":"2026-05-16T07:15:05.817Z","repository":{"id":355302057,"uuid":"1227547996","full_name":"nvusdev/simple-productivity-blocker","owner":"nvusdev","description":"Open-source Windows focus app for blocking distracting websites, apps, files, and folders with scheduled profiles, DNS/hosts filtering, content categories, and recovery-safe system enforcement.","archived":false,"fork":false,"pushed_at":"2026-05-12T16:27:31.000Z","size":56091,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-12T18:28:14.886Z","etag":null,"topics":["adhd","app-blocker","content-filtering","customtkinter","digital-wellbeing","distraction-blocker","dns","focus","focus-app","hosts-file","open-source","productivity","productivity-tools","python","screen-time","self-improvement","studying","time-management","website-blocker","windows"],"latest_commit_sha":null,"homepage":"https://nvusdev.github.io/simple-productivity-blocker/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nvusdev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-02T20:51:28.000Z","updated_at":"2026-05-12T16:54:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nvusdev/simple-productivity-blocker","commit_stats":null,"previous_names":["nvusdev/simple-productivity-blocker"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/nvusdev/simple-productivity-blocker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nvusdev%2Fsimple-productivity-blocker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nvusdev%2Fsimple-productivity-blocker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nvusdev%2Fsimple-productivity-blocker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nvusdev%2Fsimple-productivity-blocker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nvusdev","download_url":"https://codeload.github.com/nvusdev/simple-productivity-blocker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nvusdev%2Fsimple-productivity-blocker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33093853,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T04:41:52.686Z","status":"ssl_error","status_checked_at":"2026-05-16T04:41:52.009Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adhd","app-blocker","content-filtering","customtkinter","digital-wellbeing","distraction-blocker","dns","focus","focus-app","hosts-file","open-source","productivity","productivity-tools","python","screen-time","self-improvement","studying","time-management","website-blocker","windows"],"created_at":"2026-05-03T20:00:33.850Z","updated_at":"2026-05-16T07:15:05.810Z","avatar_url":"https://github.com/nvusdev.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Simple Productivity Blocker (SPB)\n\n![Version](https://img.shields.io/badge/version-1.4.4-blue.svg)\n![Platform](https://img.shields.io/badge/platform-windows-lightgrey.svg)\n![License](https://img.shields.io/badge/license-MIT-green.svg)\n![Status](https://img.shields.io/badge/status-stable-success.svg)\n\nA system-level focus and time management suite for Windows.\n\nSimple Productivity Blocker is designed for people who need absolute focus. Browser extensions are too easy to turn off. Basic app blockers can be bypassed or closed. SPB operates directly at the Windows operating system level to ensure that when you decide to lock in and work, your computer enforces that decision.\n\nIt combines advanced website filtering, application termination, strict file and folder access controls, profile schedules, network safety checks, and recovery tooling into one clean interface.\n\n## Why use SPB?\n\n* **System-Level Enforcement:** Instead of just asking you to stop scrolling, SPB uses Windows process monitoring, policy controls, file handles, and NTFS ACLs to lock down apps, files, and folders. During a focus session, the operating system itself helps enforce your rules.\n* **Smart DNS Interception:** SPB catches website requests before they leave your computer when local DNS interception is safe. You can block specific sites, use wildcard patterns, block keywords, or apply curated filters for categories like Social Media, Gaming, Shopping, and Adult Content.\n* **Schedule Your Focus:** Create different profiles for different needs. Each group can have its own schedule, selected days, time window, or all-day enforcement.\n* **Crash-Proof Recovery:** SPB logs permission-sensitive changes to recovery history. If your computer loses power, crashes, or a block becomes orphaned, the daemon and recovery tools can reconcile and restore normal access.\n* **Network Fail-Safes:** SPB audits adapters before changing DNS, skips risky VPN or security-managed adapters, preserves original DNS state, and falls back to hosts-file blocking when local DNS proxying is unsafe.\n* **Battery-Aware Performance:** The background service uses caching and performance profiles (Passive, Balanced, Strict) to control how aggressively it scans for running programs.\n\n## The Enforcement Engine (Under the Hood)\n\nSPB is built to eliminate the \"willpower gap\" by removing easy bypasses while keeping recovery paths available. Here is how it secures your focus behind the scenes:\n\n* **The Triple-Lock Suite:** SPB does not just look for running apps and close them. It can register blocked applications with Windows `DisallowRun`, apply exclusive file handle locks, and modify NTFS ACLs (`icacls`) so blocked files and folders cannot be opened during an active session.\n* **Deep Process Scanning:** SPB checks process names, executable paths, current working directories, and command-line arguments to catch blocked apps or files even when launched indirectly.\n* **Active Window Interception:** If a user tries to browse into a blocked folder through Windows File Explorer, SPB detects the restricted path and closes or redirects the Explorer window.\n* **Dual-Layer Network Protection:** SPB prefers a local DNS proxy for flexible pattern matching. When DNS proxying is unavailable or unsafe, it falls back to managed `hosts` file entries.\n* **DNS State Preservation:** Before redirecting DNS, SPB captures adapter state in `dns_state.json`. If the proxy fails or blocking is disabled, SPB restores the saved adapter settings.\n* **SSRF \u0026 Path Hardening:** Custom blocklists are validated to reduce unsafe network and local path access. Local lists are restricted to the application configuration area.\n* **Encrypted Vulnerability Lists:** Sensitive category lists can be stored in an obfuscated form to make casual tampering harder during a moment of weakness.\n\n## Core Capabilities\n\n### Website and Network Control\n\n* Block specific domains, wildcard patterns, and keyword-style matches.\n* Apply pre-built filters for common distractions such as streaming, shopping, ads, gaming, and adult content.\n* Add exceptions for sites that should remain accessible inside a blocked category.\n* Use a read-only DNS safety audit to inspect active adapters, VPN-style services, stale loopback DNS, and stored DNS recovery state.\n\n### Application and File Locking\n\n* Instantly close any program by executable name or file path.\n* Block individual files during active focus windows.\n* Block entire directories so applications cannot open protected content inside them.\n* Prevent Windows File Explorer from opening or viewing blocked folders.\n* Automatically release blocks when a group becomes inactive, goes off schedule, or is deleted.\n\n### Profiles, Schedules, and Global Settings\n\n* Create multiple blocking groups for different contexts.\n* Give each group its own days, time window, or all-day schedule.\n* Keep global safety settings above all groups, including performance mode, cloud allowlist, protected path keywords, startup behavior, and notifications.\n* Maintain a cloud and system allowlist so important tools like OneDrive, Git, code editors, and Windows services are not accidentally blocked by broad folder rules.\n\n### Recovery and Safety\n\n* Restore stored DNS state if local DNS proxying fails.\n* Fall back to hosts-file blocking when adapter rewriting is unsafe.\n* Keep recovery history for ACL-protected files and folders.\n* Use `recovery_uplift.exe` as an emergency tool to restore DNS, clean hosts entries, clear browser DNS-over-HTTPS policies, remove the daemon scheduled task, and force-unlock protected paths.\n\n## Installation\n\nBecause SPB modifies system permissions and network settings to do its job, it requires Administrator rights.\n\n1. Download the latest release zip file from the Releases page.\n2. Extract the downloaded archive to a folder on your computer.\n3. Right-click `spb_installer.exe` and select \"Run as Administrator\".\n4. Once installed, use the desktop shortcut to open the dashboard and configure your first profile.\n5. Add blocked websites, apps, files, or folders, then configure each group schedule.\n\n## Safe Uninstallation\n\nSPB takes system modifications seriously. If you ever need to remove the software, please use the provided uninstaller rather than deleting files manually.\n\nRun `spb_uninstaller.exe` located in the installation directory, usually:\n\n```text\nC:\\Program Files\\Simple Productivity Blocker\n```\n\nThe uninstaller stops SPB processes, removes startup persistence, restores stored DNS state, cleans SPB hosts-file entries, releases file and folder ACL blocks, and removes installed files.\n\nIf you need emergency recovery without a full uninstall, run:\n\n```text\nrecovery_uplift.exe\n```\n\nThis helper is intended for restoring access or connectivity if an install, uninstall, or daemon state becomes broken.\n\n## Troubleshooting \u0026 Security\n\n### Antivirus False Positives\nBecause SPB performs high-integrity system actions (modifying DNS, changing file permissions, and managing background tasks), some Antivirus software (like SentinelOne or Bitdefender) may flag the executables as suspicious. \n* **Recommendation:** If you encounter blocked actions or missing files, add the SPB installation directory (`C:\\Program Files\\Simple Productivity Blocker`) to your Antivirus allowlist/exclusions.\n\n### Safe Mode Recovery\nIf you are unable to access your system or network in Normal Mode, SPB is designed to be fully manageable in **Windows Safe Mode**.\n1. Boot into Safe Mode (The daemon will not run).\n2. Run `recovery_uplift.exe` from the installation folder.\n3. Select \"Full Restore\" to strip all blocks and reset network settings.\n\n## For Developers\n\nSPB is built with Python and uses a decoupled architecture to separate the interface from the enforcement engine.\n\n1. **The Dashboard:** A CustomTkinter interface that edits configuration state, groups, schedules, and global settings.\n2. **The Daemon:** A background service that evaluates active groups, manages website protection, monitors processes, applies file and folder enforcement, and performs safety recovery.\n\nTo build the project from source, install the required dependencies, then run the PowerShell build script.\n\n```powershell\npip install -r requirements.txt\n.\\build.ps1\n```\n\nWhen possible, run builds from a non-administrator PowerShell terminal. PyInstaller warns on administrator builds today and may block them in future versions.\n\nThe release package is written to:\n\n```text\ndist\\SimpleProductivityBlocker\n```\n\nIt contains the dashboard, daemon, installer, uninstaller, recovery helper, changelog, and bundled pywin32 components.\n\nUseful development checks:\n\n```powershell\npython -m unittest discover tests\n```\n\nRun the stress suite:\n\n```powershell\npython test_environment\\stress\\run_suite.py\n```\n\nCompile-check the main modules:\n\n```powershell\npython -m compileall core blockers daemon.py spb_uninstaller.py recovery_uplift.py\n```\n\nThe DNS stress tests use high ports and should not rewrite system adapter DNS.\n\n## Repository Notes\n\nGenerated build output belongs in `dist/` and `build/`, both of which are ignored. Local runtime state such as `config.json`, recovery history, DNS snapshots, logs, coverage reports, PyInstaller specs, scratch files, and local agent indexes should not be committed.\n\n## Legal Documents\n\nThis project is released under the following terms:\n\n*   **[License (MIT)](LICENSE)**\n*   **[Privacy Policy](PRIVACY_POLICY.md)**\n*   **[End User License Agreement (EULA)](EULA.md)**\n\n## Disclaimer\n\nThis software modifies Windows security descriptors, scheduled tasks, browser policy keys, DNS settings, and the system hosts file. While SPB includes recovery and safety mechanisms, please use it responsibly, test changes carefully, and maintain backups of critical work.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnvusdev%2Fsimple-productivity-blocker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnvusdev%2Fsimple-productivity-blocker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnvusdev%2Fsimple-productivity-blocker/lists"}