Soft-block distracting websites with psychological friction, not force.
Like a trumpet mute that softens without silencing, Sordino creates gentle resistance to distraction rather than hard blocks you'll just disable.
The goal isn't to cage you. It's to create a moment of mindfulness before you mindlessly scroll.
Chrome Web Store (In Review) · Firefox Add-ons
- Soft blocking — Bypass-able overlays, not hard blocks
- Flexible schedules — Work hours, evenings, always-on, or custom (supports overnight spans)
- Daily bypass budget — 3× 5-minute bypasses, resets at midnight
- Pause controls — 15 min, 1 hour, until tomorrow, or manual override
- Music-themed block screen — 40+ jazz/classical-themed titles with rotating focus-based quotes
- Category presets — Social, Video, and News sites pre-configured
- Custom sites — Add any domain from popup or settings
- Stats tracking — Daily blocks, bypasses, and per-site breakdowns
- Countdown alerts — Toast notifications before bypass/pause expires
Sordino runs entirely on your machine:
- No external API calls
- No analytics or tracking
- No data leaves your browser
- All settings stored in local browser storage
Chrome Web Store Coming Soon (In Review)
Manual install:
- Download sordino-chrome-v1.0.0.zip
- Unzip it
- Open
chrome://extensions - Enable Developer mode (top right)
- Click Load unpacked → select the unzipped folder
Manual install:
- Download sordino-firefox-v1.0.0.zip
- Unzip it
- Open
about:debugging#/runtime/this-firefox - Click Load Temporary Add-on → select
manifest.jsonfrom the unzipped folder
Note: Temporary add-ons reset when the browser closes. Use the store version for persistence.
Coming Soon
git clone https://github.com/tflaim/sordino.git
cd sordino
npm install
npm run build # builds both Chrome and FirefoxOutput: .output/chrome-mv3/ and .output/firefox-mv3/
- React 19 + TypeScript
- Tailwind CSS v4
- WXT — build tooling (Vite underneath); one source for Chrome and Firefox
- Manifest V3
src/
├── entrypoints/ # WXT entrypoints
│ ├── background.ts # Background (scheduling, bypass logic, stats)
│ ├── content.ts # Content script (the overlay)
│ ├── popup/ # Toolbar popup
│ └── options/ # Settings page (the browser's Options entry)
├── assets/ # Bundled assets (logo)
└── shared/ # Shared types, storage, schedule logic, styles, fonts
public/icons/ # Extension icons
scripts/ # Post-build guards
tests/e2e/ # Playwright smoke tests against the built extension
wxt.config.ts # Manifest and build config for both browsers
| Command | Description |
|---|---|
npm run dev |
Run the extension in a dev browser with reload (dev:firefox for Firefox) |
npm run build |
Clean, typecheck, build Chrome and Firefox, check the content script |
npm run build:chrome / build:firefox |
Build one browser only |
npm run typecheck |
tsc over the whole project |
npm run lint |
ESLint and Prettier check |
npm test |
Unit tests (Vitest) |
npm run test:smoke |
Playwright smoke tests: overlay on a muted site, popup and settings make no network requests |
npm run lint:firefox |
web-ext lint on the Firefox build |
A pre-commit hook formats staged files and runs typecheck and tests. CI runs every check on each push.
If Sordino helps you stay focused, consider buying me a coffee. It funds late-night vibe coding sessions and keeps this project free and ad-free.
MIT @tflaim
