Browser vs tablet

July 21, 2026 · View on GitHub

What the phone is for vs what the tablet is for. How the system fits: architecture.md. Wishlist: improvements.md.

The phone is a keyboard bridge, paste helper, and place to paste the GitHub token. Day-to-day files and settings live on the tablet Lobby. Download starts on the tablet and asks open phone browsers to save the file.

Phone

After the PIN (or with PIN set to none): the page lands on the keyboard shell — gray Writerdeck mark centered. Keys forward to the tablet whenever the page is connected. There is no phone document list and no phone Edit. When Writerdeck has quit (stock UI) a Launch Writerdeck button appears under the logo; on the Documents tab that button is hidden. Labels follow the Lobby language (en / no / es / de / fr via GET /api/phone-ui).

When the tablet opens a document for edit, the phone shows that document’s name and keeps capturing keys. Paste from phone inserts clipboard text at the tablet cursor — only while that document is open for edit, not on Lobby Documents. Bluetooth keyboards pair to the phone. The phone also forwards keys during read preview, Lobby name prompts, delete confirm, and private PIN entry. While a document is open (or Lobby/read is taking keys), the page asks the browser to keep the screen awake so the phone does not sleep and drop the keyboard (Screen Wake Lock; Safari 16.4+ and modern Chrome).

When Lobby taps Download, open phone pages get a “Download here?” prompt. Accepting uses the normal attachment download (encrypted documents still ask for the private PIN on the tablet first).

Observe is off by default. Enable over the LAN (keeps the phone Observe button hidden for everyone else):

source scripts/_env.sh
curl -s -X POST "http://$RM_HOST:8000/api/settings" -H 'Content-Type: application/json' -d '{"observe":true}'

Or edit /home/root/.Writerdeck/settings.json ("observe": true) over SSH. After Stop, the trace sits at GET /api/observe/export — say in Cursor chat that you found a bug and the agent pulls it. USB keys typed on the tablet are not recorded.

Sync setup, connection status, and “Show PIN on tablet” live here too. Plain LAN http has no reliable iOS Share sheet.

Tablet

Documents tab lists notes on fixed pages (Up/Down, PgUp/PgDn) — no flick scroll, no sliding one-row window (decisions.md §35). When notes spill one screen, Prev / Page N/M / Next sits above the action buttons, separated by a line. Edit to type; Read to preview; tapping the already-selected file opens edit when a keyboard is connected, otherwise read (no connect tip). Download offers the selected note to open phone browsers. Esc toggles edit/preview. Rename and delete from Documents. Settings opens pop-ups for language, reading font (with pangram samples), and phone PIN length, plus rotation and Exit; in landscape a right scroll gutter (visual.settingsLandscapeScrollGutter) leaves room to flick without hitting buttons. Keyboard tab: two boxes — Bluetooth first (phone URL, PIN, same QR as the connect tip), then USB layout (US / Norwegian / Spanish / German / French). Each headline shows (connected) or (not connected) and refreshes about every two seconds while you stay on that tab. Sync tab can run Sync now. About shows one Writerdeck version (server and editor together) and checks GitHub for a newer stamp (decisions.md §38).

Lobby is driven by the keyboard: focus returns after touch, and every main control has a Ctrl-chord (Shortcuts tab). Switch Lobby pages with Tab, Shift-Tab, and Left/Right (optional per-tab Ctrl-letters in lobby-ui.json; no hardwired 1–6). Borders, help text, dialog copy, language, and which letter each Ctrl-chord uses come from /home/root/.Writerdeck/lobby-ui.json on the tablet (decisions.md §36–§37). The phone page follows that language. Action chords avoid browser-reserved letters where possible so a phone keyboard can reach the tablet. Private PIN on the tablet accepts USB digits and digits forwarded from the phone. Without a USB keyboard or an open phone/laptop page, Edit / New / Rename show a short connect tip (QR for the phone URL). An open page counts after WebSocket hello; Cursor’s embedded browser is excluded (User-Agent Cursor/ or Electron/), so agent tabs do not hide the tip.

Physical Home (hardware_home) from edit returns to Documents with that note selected. Keyboard Home is not that button — it keeps caret Home/End and must not drive Lobby or quit. Launch from stock UI with USB Esc, both page buttons, phone Show PIN on tablet, or rmlobby / ~/wd. File ops use the trusted socket (decisions.md §19).