Scan on your phone. Paste on any computer.
A temporary phone-to-PC barcode scanner. Open a website on any computer, pair your phone by scanning a QR code, then scan a barcode — the value appears in the browser, ready to copy. For labels with no barcode on them, the phone can read the printed text instead; you tap the line you want and that exact line is what gets sent.
Built for retail and technical support, where a technician setting up a customer's machine needs to enter product keys, activation codes, serial numbers, or Wi-Fi credentials, and installing software on that machine is inconvenient or impossible.
No accounts. No install on the PC. No permanent pairing. The session expires and nothing is left behind.
| Document | Contents |
|---|---|
| Product overview | What this is, who it is for, and what it must not become |
| Architecture | Components, technology choices, deployment |
| Protocol | Session lifecycle, WebSocket messages, limits, error codes |
| Security and privacy | Threat model, logging rules, data handling |
| UI specification | Receiver and scanner states, copy, failure modes |
| Scope and roadmap | MVP scope, phases, what is deliberately excluded |
| Operations runbook | Deploy, roll back, read logs, troubleshoot |
packages/protocol/ shared message types, limits, pairing URLs, WS client
packages/relay/ Fastify + ws server; sessions live in memory only
packages/web/ one app for both devices; role comes from the pairing fragment
npm ci
npm run build # protocol, both front-ends, then the relay
npm test # relay unit + integration tests
npm run typecheck
npm start # serves the app at / and /p/ on :3000Open http://localhost:3000 on the computer. The phone needs HTTPS for camera
access, so for real device testing point a tunnel at port 3000 and set
PUBLIC_ORIGIN to the tunnel's HTTPS URL — pairing URLs are built from it.
docker compose up -d --build behind Caddy, driven by ./deploy.sh, which rolls
back automatically if the new build does not come up healthy. See the
operations runbook.
Phase 0 complete: relay, web receiver and phone web scanner, working end to end, plus on-device text capture for labels with no barcode. Native Android is Phase 1.