Iyakku
A remote controller app that turns your phone into a wireless remote for your laptop - browse folders, swipe through photos, play videos, and control presentations over WiFi.
Why I Built This
It started with photos. Family visits, trips, random moments on the phone - at some point someone says “show it on the big screen.” So you connect your laptop to the TV, open a folder, and then you’re stuck. You’re standing next to the laptop clicking through photos while everyone else is on the couch. You can’t sit down because the next photo requires a click. And if someone says “go back two,” you’re leaning over the keyboard again.
The same thing happens with presentations. You’re tethered to your laptop, or you’re buying a dedicated clicker that does exactly one thing. And with videos, you’re getting up to pause or skip.
I wanted something simple: launch an app on my laptop, scan a QR code with my phone, and now my phone is the remote. No cables, no dongles, no accounts, no cloud. Just two devices on the same WiFi talking to each other.
That’s Iyakku. The name comes from Tamil (இயக்கு) - it means “to operate” or “to control.”
What It Does
You launch Iyakku on your laptop and it shows a QR code. Scan it with your phone, enter a 4-digit PIN, and you’re connected. Your phone becomes a full remote controller for media on your laptop. See it in action on the Iyakku site.
From your phone, you can browse your entire filesystem - drives, folders, everything. There are filters for photos, videos, audio, and documents, plus a search bar. Tap a folder to open it, tap a media file to display it on the laptop. The laptop becomes a viewer, your phone becomes the controller.
Photos are where it feels the most natural. Swipe left and right to navigate. Pinch to zoom, pan when zoomed in, double-tap for quick zoom. There’s a slideshow mode with configurable intervals (3s, 5s, 10s) and shuffle. A thumbnail strip at the bottom lets you jump around quickly.
Videos and audio get play/pause, a seek bar, skip forward/back 10 seconds, and volume control. You can scrub the timeline with a long press and drag.
Presentations open in their native app (PowerPoint, Keynote, or Preview for PDFs) and you control slides with swipe gestures. No more clicker dongles.
A few things that make it feel solid rather than hacky:
- PIN authentication - A 4-digit PIN prevents random people on the same WiFi from taking control. Created on first launch, cached on your phone.
- Single controller lock - Only one phone can control at a time. No conflicts.
- PWA support - Add the controller to your phone’s home screen and it feels like a native app.
- Zero config - No accounts, no cloud, no internet required. Just WiFi.
Built with Claude Code
The first working version came together in a couple of evenings with Claude Code. The core idea is simple - WebSocket relay between two web pages - but the details add up fast. Touch gesture recognition with proper swipe/pinch/pan detection, media streaming with range requests, filesystem browsing with security boundaries, EXIF rotation, PyInstaller bundling for standalone distribution.
Claude Code handled the boilerplate and the fiddly parts (getting Socket.IO rooms right, making the seek bar responsive on mobile, handling HEIC images), which let me focus on how the controller should feel. The touch interactions took the most iteration. Early versions would sometimes confuse a swipe with a pinch, or the zoom would drift. Getting gestures to feel natural on a phone-sized screen took a few rounds of tweaking thresholds and debounce timings.
The distribution story was another area where Claude Code saved time. Building a standalone macOS .app and Windows .exe with PyInstaller, with the right icons, entitlements, and resource bundling - that’s the kind of thing that takes hours of trial and error the first time. Claude Code got it working end to end, including the GitHub Actions workflow for automated releases.
What I’ve Learned
Local-first is underrated. No server to maintain, no auth system to build, no latency from round-tripping through the cloud. Two devices on the same WiFi, talking directly. It just works, every time, with zero dependencies on external services.
Touch gestures are harder than they look. Distinguishing a swipe from a pan from a pinch requires careful threshold tuning. What feels “right” on a phone is subjective and varies by screen size. I spent more time on gesture feel than on the entire server.
People use it for things I didn’t expect. I built it for showing photos to family. But it turns out it’s also great for playing music at gatherings (browse and queue songs from the couch), for classrooms (control slides while walking around), and for showing reference images while working on a project at a desk.
The QR code is the onboarding. No instructions needed. People see a QR code, they scan it, they’re in. The PIN adds just enough friction to prevent accidental connections without making setup annoying.
What’s Next
Iyakku does what I need right now. If I add anything, it would probably be playlist/queue support for music, or maybe AirPlay-style casting where you can push content from your phone to the laptop without browsing the laptop’s filesystem. But honestly, the current version has been solid for months. It does the thing it was built to do, and it does it well.