A Rust-based daemon that monitors your browser activity and helps you stay focused using the Pomodoro technique.
- Daemon Mode: Runs continuously in the background as a systemd service
- WebSocket Server: Real-time communication with browser extension (ws://127.0.0.1:8765)
- Universal Domain Extraction: Extracts domains from ANY website (github.com, google.com, docs.rs, etc.)
- Time Tracking: Records time spent on each domain during your session
- Pomodoro Timer: Automatically switches between work (25min) and break (5min) modes
- File Logging: Logs all activity to
~/.local/share/stop_it/daemon.log - Desktop Notifications: Sends native notifications when it's time to switch modes
- Session Statistics: View detailed stats after each work session
- Auto-Reconnect: Extension automatically reconnects if daemon restarts
- Rust 1.70 or later
- systemd (for daemon autostart)
./install_daemon.shThis will:
- Build the Rust application
- Install and enable the systemd service
- Start the daemon automatically
cd browser-extension
npm install
npm run buildThen load the extension in your browser:
- Open
brave://extensions(orchrome://extensions) - Enable "Developer mode"
- Click "Load unpacked"
- Select the
browser-extension/distfolder
# Check daemon status
systemctl --user status stop-it
# Stop the daemon
systemctl --user stop stop-it
# Start the daemon
systemctl --user start stop-it
# Restart the daemon
systemctl --user restart stop-it
# View daemon logs (follow mode)
journalctl --user -u stop-it -f┌─────────────────┐ ┌──────────────────────────┐
│ Browser │ WebSocket │ Rust Daemon │
│ Extension │◄──────────────────►│ (always running) │
│ (JavaScript) │ ws://localhost │ │
│ │ :8765 │ ├─ WebSocket Server │
└─────────────────┘ │ ├─ Pomodoro Timer │
│ └─ Activity Tracker │
└──────────────────────────┘
- Daemon starts: Launches WebSocket server on
ws://127.0.0.1:8765 - Extension connects: Establishes persistent WebSocket connection
- Continuous monitoring:
- Extension sends URL/title updates when tabs change
- Pomodoro timer: Runs every second, tracks work/break cycles
- Auto-reconnect: If daemon restarts, extension reconnects automatically
Daemon not starting:
# Check daemon status
systemctl --user status stop-it
# Check logs for errors
journalctl --user -u stop-it -n 50Extension can't connect:
- Verify daemon is running:
systemctl --user status stop-it - Check if WebSocket port is listening:
ss -tlnp | grep 8765 - Check extension console (Right-click extension → Inspect)
- Should see: "Connected to Stop It daemon"
- If seeing: "WebSocket not connected" - daemon may be down
No activity being tracked:
- Check daemon logs:
journalctl --user -u stop-it -f - Open a website and see if messages appear
- Verify both extension and Hyprland monitoring are working
📘 Documentation: For detailed browser extension setup, see Browser Extension Guide
This tool runs entirely locally and does NOT:
- Send any data to external servers
- Store browsing history
- Decrypt HTTPS traffic
- Track anything beyond active window titles and urls
MIT