Skip to content
Muhammet Şafak
tr
Cover — a phone reading BLUETOOTH RSSI: -58 dBm, STATUS: VERIFIED PRESENT over a graph with LOCK THRESHOLD and SIGNAL DROP (BUFFERED) lines; the laptop shows SignalLock: ACTIVE
Security & verifiability Became a product

Screen lock by Bluetooth proximity: present/absent is not enough

A proximity lock that locks the machine when the device in your pocket walks away; it became the SignalLock menu bar app.

What it does today

Locks the macOS screen when the device you carry moves away; the call rests on a proximity assessment rather than a raw present/absent signal, so fluctuation no longer produces false locks. The menu-bar app is published and ready to install.

Started
March 2026 — May 2026
Left Labs

Form

Open source

Technologies

Swift SwiftUI CoreBluetooth CoreLocation C# .NET 8

This one became a product:

SignalLock

Asking whether a Bluetooth device is in range is easy; getting the answer right is a different job. The raw “present / absent” signal lies several times a second, and every lie is a wrong lock.

”Present / absent” lies

An unlocked Mac in a shared workspace is a privacy risk, and remembering to lock it should not be the user’s job. The solution tried: treat a Bluetooth device the user already carries (iPhone, Apple Watch, AirPods, a BLE tag) as a trusted device, and lock the screen when it leaves range.

The real subject turned out to be the signal itself. A Bluetooth signal fluctuates by nature; the device disappears from a few samples even while it is sitting on the desk. A lock that reads plain visibility locks the screen while the user is still in their chair.

Proximity assessment instead of visibility

The core of the app was built on a proximity assessment rather than plain visibility: a smoothed RSSI value is read together with a last-seen timestamp. The RSSI threshold, the away delay and the smoothing window are all user-adjustable; the defaults were deliberately chosen on the conservative side to minimise false locks.

Never going near the network

For a tool like this the cloud is the easy road: keep the device pairing on a server, sync the settings, add features like “find my desk”. All of it means an account system and a backend.

The constraint chosen was the opposite: the app makes no network requests at all. There is no backend server, no cloud sync, no account, no telemetry, no analytics; location services are not used and every setting stays on the user’s own machine.

The cost is plain — no sync across devices, no remote management — and with no usage data, the default thresholds rest on a conservative choice rather than a measurement. In exchange, a user who wants their screen locked does not have to hand the identity of the phone in their pocket to a server. For a security tool that is the right trade.

Two codebases, one algorithm

The second consequence of the zero-network decision is on the platform side. An app that never goes online, that scans Bluetooth continuously and triggers the screen lock, touches the lowest layers of the operating system it runs on: CoreBluetooth and the lock API on macOS, its own Bluetooth stack and session management on Windows.

A single cross-platform shell would have kept both versions in one codebase. The cost would have been writing that platform difference underneath the shell anyway and carrying a runtime on top of it — a heavy bill for a tool that sits in the menu bar and stays open all day.

The path chosen was two separate native versions: Swift/SwiftUI for macOS, .NET 8 for Windows. What is shared is not code but the proximity algorithm and the configuration model itself — the thresholds, the delay and the smoothing window mean the same thing on both sides. The maintenance surface doubles, the behaviour stays single.

The road to the menu bar app

It shipped as a menu bar app; the product page and the download live on their own domain. Details in the portfolio.

Tags: #bluetooth#macos#security
Share:

More Records

All records

A swipe-based true/false trivia game; the real subject is not the game but making a client-computed score verifiable through a signature.

What it does today

The swipe-based true/false quiz runs end to end in its core loop as a mobile app; the score is produced on the client but verified server-side with a server_nonce and an HMAC signature. swipenor.com is the app's landing page, not the game itself.

Mobile app Laravel PHP PostgreSQL +6 more
July 2026 — Ongoing

A free, publicly open, text-first learning platform that holds textbook theory and problems actually met in the industry inside a single lesson flow.

What it does today

Live as a free learning platform with no signup wall: the field–curriculum–course–unit–lesson hierarchy, full-text search, progress tracking and verifiable certificates all work. Anyone who wants to read the computer-science curriculum can use it today.

Web app Laravel PHP Livewire +6 more
August 2026 — Ongoing

An open, free resource for reading, understanding and learning the Qur'an, gathering Qur'an- and hadith-centred research under one roof.

What it does today

Live as a free, open resource for reading and searching the Qur'an and hadith side by side; letter-level fingerprint matching gives 91–99% coverage across the hadith collections. Readers and researchers who want to go straight to the source can use it today.

Web app Laravel PHP Livewire +7 more
August 2026 — Ongoing

Search the site

Start typing to search posts, projects and pages.

Esc to close Powered by Pagefind