Skip to content

Latest commit

 

History

36 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Portal Remote

Control a Windows desktop from an Android phone over the local network — a Monect-style remote: touch trackpad, keyboard, media keys, screen mirroring, casting and file transfer. No cloud, no relay — the phone talks directly to a small server running on the PC.

The Windows tray app: the share thread with the phone on the left, and on the right the connected phone, port, shared folder, cast link and assistant status

Pairing and settings — find the PC on the LAN, then tune how the trackpad feels

Pairing screen: the PC found by discovery on the LAN as a one-tap card, with QR scan and typed address as fallbacks Settings: pointer speed and fine control, scroll momentum and natural scrolling, then a reference list of every trackpad gesture

Control — the four ways to drive the PC by hand, behind one tab

Control tab, trackpad mode: a full-surface trackpad with reticle marks at its corners and a scroll rail down the right edge, a tap-to-type field above and left/right click buttons below Control tab, keyboard mode: Esc, Tab, Enter, Space, Backspace, Win, Alt+Tab and clipboard shortcuts as chamfered key caps, with a directional pad below Control tab, media mode: what the PC is playing with a scrubber, transport and volume, and the card that streams the PC's sound to the phone instead of its own speakers Control tab, remote mode: a TV-style round D-pad with OK, transport and volume controls, plus rows of function keys for the couch

Monitor — the PC's desktop, live

Monitor tab: the PC's desktop mirrored live, letterboxed in near-black, with per-monitor and quality chips underneath

The mirror full-screen in landscape: turning the phone sideways rotates it and drops the shell, so the PC's desktop fills the display edge to edge with the controls hidden behind a single floating button

Transfer — push things across, or go and fetch them

Transfer tab, share mode: a thread of links and notes moving both ways, each bubble squared off on the sending device's side, with the composer below Transfer tab, files mode: the PC's shared folder as a list of files and folders with sizes, a download button per row and an upload action

Deck — what the machine is running, and how hard it is working

Deck tab, shortcuts mode: a grid of quick actions — search, Explorer, task manager, lock, sleep — above which a context row follows whatever window has focus on the PC, here offering Explorer's own shortcuts Deck tab, stats mode in dark: lit CPU and memory dials, a minute-long load trace, and a lit cell per logical core The same dashboard in light mode: identical panels, dials and meters redrawn as ink on paper rather than light on black Deck tab, stats mode scrolled down: the mirrored network trace, a segmented meter per fixed drive, and the processes using the most CPU

Browser and Assistant

Browser tab: an in-app browser showing this project's own repository, with the address bar at the bottom within thumb reach Browser tab on canyoublockit.com's adblock test: every ad slot on the page is empty and the site's own script is complaining that an adblocker is preventing it from loading Assistant tab: a question answered in text, followed by a proposed pair of PC actions the user must approve before either one runs

Real captures of one running build — a paired phone over adb, and the tray window straight off the PC. The phone's status bar is cropped so the set frames identically; the shared folder, the share thread and the assistant conversation are staged; and the LAN addresses, the Windows username and the phone's own name are redrawn as neutral stand-ins. Nothing else is retouched. Re-shooting them is in docs/development.md.

What you can do with it

  • Drive the PC by hand — a precision trackpad (multi-finger gestures, momentum, fine-control gain curve), a keyboard, media keys, and a TV-style D-pad remote for the couch.
  • See the screen — live MJPEG mirroring at ~14.5fps, per-monitor, pinch to zoom to 4×, tap to click where you looked.
  • Watch the machine — a live resource dashboard drawn as an instrument panel: CPU per core, memory, a minute of history, network throughput, every drive, and what's using the most CPU right now. The PC only samples itself while that screen is open.
  • Play and cast — what the PC is playing shows up with cover art and a real scrubber; send a link or a local file to the PC, a Roku or a DLNA television.
  • Browse the web — an in-app browser that blocks ads, trackers and popups as you go, auto-declines cookie prompts from the major consent-banner vendors, and hands any video it finds straight to the cast button.
  • Move things across — the phone's system share sheet and the PC's Ctrl+Alt+V push links, images and files either way, onto the receiving device's clipboard before the notification lands.
  • Browse and transfer files — list, download and upload against a shared folder on the PC.
  • Make it yours — light and dark are the same instrument under different lighting, and Settings → Colour swaps the accent between four pairs. Every one of them is checked against WCAG on both themes, so the picker can't produce a screen you can't read.
  • Ask the assistant — one conversation shared by the phone and the PC, which can also act on the PC (media keys, shortcuts, typing, power) with every action approved separately. Needs agent-platform — see below.

Try it

Every v* tag builds both halves and attaches them to a GitHub release: PortalRemote-Setup-<version>.exe (the installer), PortalRemote.exe (the same app as one portable file) and PortalRemote-<version>.apk. All three are self-contained — no .NET needed on the PC.

  1. Run PortalRemote-Setup-<version>.exe on the PC. It installs for you alone — no admin prompt — leaves a Start-menu entry, and starts Portal Remote when you sign in, so the phone can still find the PC after a reboot. It opens the window above and drops a tray icon.
  2. Install the APK on a phone on the same Wi-Fi and open it.
  3. Tap the PC in the discovered list and click Allow on the PC — or scan the QR code, which pairs without the prompt.

Both halves update themselves from those releases, and neither phones home otherwise — the only request is to GitHub's public release API, when you ask.

Building from source instead: docs/development.md.

Installer or portable exe?

Take the installer unless you have a reason not to. PortalRemote.exe on its own is the same program and runs fine from wherever you put it, but it is a file you have to remember: nothing starts it after a reboot until you tick Start Portal Remote when I sign in in the window, and that setting records the path it was ticked at — move or delete that copy afterwards and the app quietly stops coming back. The installer puts it somewhere stable first and registers that.

It installs to %LOCALAPPDATA%\Programs\Portal Remote, not Program Files, and that is deliberate: the app replaces its own .exe when it updates itself, which a program running as you cannot do inside Program Files. Uninstall from Settings → Apps. Your config and pairing token live in %APPDATA%\portal-remote and are left behind on purpose, so reinstalling does not make every paired phone scan a new code.

"Windows protected your PC"

Expected, on both halves. Neither download is signed by a certificate authority, so Windows and Android each say so in the strongest words they have.

  • PC — SmartScreen shows Windows protected your PC and names an unknown publisher. More info → Run anyway. Defender may also quarantine the download first: the exe is a compressed self-extracting bundle of the whole .NET runtime, which is a shape installers and packers share, and unsigned files in that shape get flagged on reputation alone.
  • PhoneInstall unknown apps has to be allowed for whatever app you downloaded the APK with, because it did not come from Play.

Before clicking through either, check the download against SHA256SUMS.txt on the same release — it is attached to every tag and covers every file on it, and is what tells a real download apart from a tampered one:

Get-FileHash PortalRemote-Setup-0.6.0.exe -Algorithm SHA256

The fix for the PC prompt is a code-signing certificate, not a code change. The release workflow already signs both the exe and the installer when WINDOWS_CERT_BASE64 and WINDOWS_CERT_PASSWORD are set as repository secrets, and ships them unsigned when they are not. Note that an OV certificate quiets SmartScreen only once the signed builds accumulate reputation; an EV certificate clears it from the first download.

The assistant needs agent-platform

Everything above works on its own. The assistant is the one feature with an outside dependency: it is backed by agent-platformagent-platformd, a small Rust server that holds the model provider — and until that is running on the PC, the assistant says Not running and does nothing else.

Portal Remote installs it for you. In the window, next to Assistant, press Set up:

  1. It fetches the newest Windows server build from agent-platform's GitHub releases.
  2. Unzips it into %APPDATA%\portal-remote\agent-platform — no installer, no elevation.
  3. Starts it and waits for it to answer on http://127.0.0.1:18410.

That path is remembered, so afterwards the same button just says Start. Already running your own agent-platformd? Point AgentPlatform.BaseUrl (and ExePath, if you want the button to start yours) at it in %APPDATA%\portal-remote\config.json and Portal Remote leaves it alone.

The phone never talks to agent-platform directly and never sees its token — the PC holds it and reaches the daemon over loopback. What the model provider does with a conversation is agent-platform's business, not this app's: docs/security.md.

Repo layout

android/   Kotlin + Jetpack Compose client
server/    .NET 8 / WinForms tray app + embedded Kestrel web server
           installer/ — the Inno Setup script the release workflow packages it with
docs/      design notes, status, security model, and the screenshot assets above
Doc What's in it
docs/features.md How each surface works and why it's shaped that way — mirroring, control, share, now playing, casting, pairing
docs/status.md Phase-by-phase status, what's next, and what still needs hardware to verify
docs/security.md The trust model — read this before pointing anything at it
docs/development.md Running, testing and packaging both halves from source
docs/process.md What live verification actually found, bug by bug
docs/design-system.md Shared tokens, motion spec and per-screen component guidance
docs/phase4-casting.md · phase5-share.md · phase7-assistant.md Per-phase plans

Status in one line: pairing, trackpad/keyboard/media, files and mirroring are done and verified live; casting, quick share and the assistant are built but only partly exercised against real hardware — see docs/status.md.

Security in one line: LAN-only, one shared bearer token, and holding that token is the practical equivalent of sitting at the PC — see docs/security.md.

About

No description, website, or topics provided.

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages