https://…/s#r=Xk2…&k=pQ9…
The key lives after the “#”
Browsers never send the part of a link after # to the server. So the key never shows up in requests or logs.
The barcode scanner already in your pocket
Open ScanTunnel in your computer’s browser, point your phone at the QR code, and the camera becomes a scanner. Every code lands in a list on your screen in a split second. Nothing to install — and the server can’t read a single value.
01 · How it works
No handheld scanner, drivers, Bluetooth pairing or account. Just a browser on two devices.
The page creates a session with its own encryption key and shows a QR code. The key is born in your browser and never leaves it.
The regular camera app opens the link — and the scanner page is already paired with your computer. Several phones can join at once.
Barcodes, QR, DataMatrix — everything flows into the list on screen. Search, spot duplicates, export to CSV for Excel.
02 · End-to-end encryption
Every scan is encrypted on the phone and decrypted only in your computer’s browser. In between travels a sealed envelope.
📱 Phone sees
☁️ Server sees
💻 Computer sees
https://…/s#r=Xk2…&k=pQ9…
Browsers never send the part of a link after # to the server. So the key never shows up in requests or logs.
HKDF-SHA256 → encKey + authToken
One secret yields both the encryption key and an access token. The server only knows the token’s SHA-256 — not enough to open the session.
QR = qrcodegen(browser)
The server never renders the QR image — it would have to learn the key. Sessions idle for 7 days are deleted.
03 · Features
Confirm — the frame freezes, you check the code and tap “Send & next”. Auto — hands-free flow: the same code is accepted again only after it leaves the frame.
The phone decrypts the list itself and warns you if a code was already scanned. On the computer — a “duplicates only” filter.
Scans queue up on the phone and are sent when the connection is back. Retries never create duplicate entries.
One-click export. CSV opens in Excel correctly and is guarded against formula injection.
Share the QR with colleagues — everyone scans into one shared list, and the computer shows how many devices are connected.
Reloaded the tab, laptop went to sleep, server restarted — the list comes back in exactly the same order.
Chrome and Android use the built-in barcode detector; iPhone and Firefox use a fast zxing engine on WebAssembly.
04 · Who it’s for
Walk the shelves with your phone — the laptop has a ready-made sheet to reconcile.
Check deliveries by EAN without buying handheld terminals. Several staff — one list.
Book ISBNs straight into your catalogue spreadsheet. Duplicates flagged right on the phone.
Check-in by QR ticket: who’s arrived is visible on the screen at the desk.
Equipment serial numbers and asset tags without typing them by hand.
Home library, collections, pantry inventory — faster than typing.
05 · Your own server
Python + SQLite + nginx, no Docker and no runtime dependencies from the outside: all libraries live in the repo with pinned hashes. One script sets up the server, TLS and password.
# locally $ make venv && make dev → http://127.0.0.1:8770 # server, once $ sudo ./deploy/bootstrap.sh --instance prod \ --domain scan.example.com --htpasswd-ask ✓ nginx ✓ systemd ✓ sqlite ✓ tls # updates $ make deploy-dev REF=main $ make deploy-prod
06 · Questions
Didn’t find an answer? Ask on Telegram: @nemilya
No. The scanner is a regular web page. The camera works right in the browser: Safari on iPhone, Chrome on Android.
Browsers only allow camera access over HTTPS and after you grant permission. Make sure the camera is allowed for the site and the address starts with https://.
A code is accepted after two identical reads in a row and only if it’s centred in the frame. In Auto mode the same code counts again only after it leaves the frame. And if the value is already in the list, the phone tells you so.
The server only holds encrypted envelopes that are useless without the key from the QR. A session untouched for 7 days is deleted entirely. The “Clear” button wipes the list immediately.
Up to 5,000 per session — beyond that the oldest entries roll off. For a new job just hit “New session”: you get a fresh room and key.
Yes. Everyone who scanned the QR on your computer writes into the same list. The computer shows how many phones are online.
Launching soon
Want early access, have a use case, or just a question? Drop me a line on Telegram.
Message @nemilya