Skip to content
Homelab & Dev Setup July 17, 2026

Building From My Phone, Not My Laptop

Outside of my day job, the time I get for personal coding projects is scarce and scattered. Two young kids, and a house that always needs something after work. If I waited for a clean two-hour block to sit down and build, I would get a tiny fraction of what I manage now. The only way I make real progress on my own projects, the coding and generative AI ones like the bedtime story app I made for my kids, is by using the small pockets of downtime that turn up in an ordinary day.

For a long time, that meant carrying my laptop everywhere. As recently as three or four months ago, if I was heading to my in-laws’ for the afternoon or settling onto the couch after the kids went down, the laptop came with me, usually open on my lap. It worked, but hauling a laptop into every room and every visit is not a great look. It draws the raised eyebrow: why do you have your laptop out, are you working right now? I got that a lot.

What I wanted was to work on my projects in those same small pockets of time without the laptop always in tow. That is what this setup gave me. Now I just pull out my phone. To anyone nearby I look like everyone else glancing at a screen, maybe scrolling TikTok or Instagram, except instead of scrolling I am nudging five projects forward in parallel. The real proof was a recent two-week trip to Europe: the laptop stayed in the bag the whole time, and I still built more than I do in a normal week.

Here is how it works, and how you can do the same for a few dollars a month even if you do not own any server hardware.

The machine: a cheap mini PC that never sleeps

The heart of it is a small computer on a shelf at home, always on. Mine is a refurbished HP EliteDesk 800 G5 Desktop Mini: a six-core Intel Core i5-9500T, a 256GB NVMe SSD, running Ubuntu Linux. I paid a little over $200 for it refurbished, then about $80 on eBay for memory to bring it to 32GB of RAM. It is the size of a hardcover book, draws almost no power, and sits quietly in a corner I never think about.

Everything I build lives on that machine: my code, my projects, my running processes, my Claude Code sessions. My phone and my laptop are just windows into it. Nothing important lives on the devices I carry, so nothing ever needs to be synced or moved, which, as it turns out, is the whole game.

You do not need anything powerful. A used mini PC or an old desktop you already own is plenty. The only real requirements are that it stays on and runs Linux.

No server? Rent one for about $12 a month

If you do not have a home server and do not want to buy hardware, you do not need to. A small virtual private server (a VPS) runs about $12 a month and does everything in this post: same Linux, same always-on machine, same remote access, no box on a shelf.

I have rented from Vultr, Hetzner, and Contabo over the years, and for this purpose they are mostly interchangeable. Rather than agonize over the comparison, I had Claude research which one offered the best specs for the price that week and went with it. That is the mindset behind the whole setup: hand the tedious research to the agent and act on the answer. If you are starting out, rent the VPS, skip the hardware, and graduate to your own mini later, the way I did. The workflow does not change.

Tailscale: the server feels local from anywhere

What makes a server-on-a-shelf usable from a trailhead in Europe is Tailscale. It stitches all my devices into one private network: the mini, my iPhone, my laptop, and my NAS sit on the same encrypted mesh, as if they shared a router, wherever I physically am. Install it on each device, log in, done. From my phone on hotel Wi-Fi or cellular halfway around the world, the home server has a stable address that just works.

The part I value most is what it does not do. Nothing on my server is exposed to the public internet: no open ports, no public IP to attack, no login page for bots to find. Only my own devices can reach it. It is more secure than the setups I used to run, and far less work. And for personal use like mine, Tailscale is free, which is hard to beat.

The phone becomes a real terminal

With Tailscale connecting everything, my iPhone becomes a genuine terminal on the server. I use Moshi, an iOS terminal built on the Mosh protocol, and it gives me the real shell on the mini, not a stripped-down mobile approximation. Because it is built on Mosh, the session survives the network dropping, the app going to the background, or me locking the phone between one idle moment and the next. I can start something, pocket the phone, pull it out twenty minutes later, and land exactly where I left off.

The other half of that persistence lives on the server: tmux. It keeps multiple sessions and windows running on the mini whether or not I am connected. One window has a Claude Code session, another a second project, a third a log tailing; I detach by locking my phone and reattach later to find it all still running. Between tmux on the server and Mosh on the connection, a session is effectively immortal.

One honest confession: I cannot remember tmux’s keyboard shortcuts to save my life. So I made simplified shortcuts for the few actions I actually use and pinned a small cheat sheet of them to the top of each terminal, right where I can see it. Having the three or four commands I need on screen is the difference between using tmux fluidly and fighting it. Do not let the hotkeys stop you: just keep them somewhere visible.

Claude Code does the building

A terminal on a phone is only useful because I am not typing code on a tiny keyboard. I am directing an agent. Claude Code runs on the server inside those sessions and does the heavy lifting: reading the project, writing the code, running the tests, fixing what breaks. I am on the $100-a-month plan, and at my volume it feels effectively unlimited. That subscription is the single biggest reason any of this works.

Two things make it comfortable from a phone rather than merely possible. The first is parallel sessions: I keep several Claude Code sessions running at once, one per project, each in its own tmux window, and hop between them. While one grinds through a longer task, I get another moving. In scattered minutes that is exactly the right shape: kick something off, switch away, come back to a result.

The second is that I rarely type. Moshi has speech-to-text built in, so when I am on my own I just talk and the words land in the terminal; when I am around people, I type quietly instead, and either way it draws no attention. Describing a change out loud is fast enough that a genuinely tiny window, three or four minutes in a line somewhere, becomes productive. I explain the change, send it, and pocket the phone while the agent works.

The agent taps me on the shoulder

One small piece punches above its weight. When an agent finishes a long task, or hits a decision it needs me for, it sends a push notification to my phone through Pushover, a cheap service that turns a one-line script into a lock-screen alert. So I do not sit and watch a terminal. I kick off the work, put the phone away, and go do something else; when the agent is done or needs me, my phone buzzes. It feels less like babysitting a machine and more like handing work to someone who pings me when it matters.

Personal apps on my home screen

This is the part that goes from convenient to genuinely fun. Because my phone and server share Tailscale’s private network, I can open anything I build on the mini right in my phone’s browser, live, without ever putting it online. iOS lets you save any page to the home screen as a web app, so that is what I do: a tool I built sits next to my real apps with its own icon and opens full screen like a native one. The difference is it is not frozen the way a shipped app is. It is mine, on my own server, and I can change it on the spot. If it is missing something, I open a Claude Code session, describe the change, and the next time I tap the icon the app has evolved. I have built several this way, each shaped to how I actually work, none of them exposed to the public internet.

When the agent needs a browser

Some projects drive a real web browser: testing a site, checking a render, automating something that only exists behind a UI. For those I run Playwright with noVNC in front of it, which I covered in giving Claude Code eyes with Playwright. From my phone I can pull up that virtual browser and see exactly what the agent sees.

What makes it powerful is that it is not just watching, it is taking action. If the agent needs to work inside a site behind a login, I open the virtual browser on my phone, sign in myself, hand control back to the agent to do what it needs in the UI, and sign out when it is done. I stay in the loop exactly where a human should be, at the credentials, and the agent handles the rest, all from my phone.

Files just move

My NAS is on the same Tailscale network, connected to my iPhone as a shared drive, so files move between phone, server, and storage without my thinking about it. The most useful version day to day is showing Claude something visual: I take a screenshot or snap a photo, drop it in the shared folder, and the agent sees it right away. No emailing things to myself, no upload-then-download dance.

On top of that I run Nextcloud, which adds the one thing a plain share does not: offline access. I can keep chosen files on my phone to open with no connection at all, and anything I add or change offline (on a plane, in a dead zone) syncs the moment I am back online.

What if the mini dies?

Putting everything on one cheap computer raises the obvious question: what if it breaks? Nothing important lives in only one place. All my code is in private GitHub repositories, so the source never depends on the mini. On top of that, an encrypted backup runs automatically to Cloudflare R2 (via restic, which handles the encryption and scheduling) alongside a second local copy. If the mini died tomorrow, I could buy another cheap box, restore, and be back within an afternoon. The always-on server is the convenient front door, not the only copy of anything.

When I do want a keyboard

None of this means I have sworn off keyboards. When I want a full screen, I SSH into the same server from a laptop: same projects, same running tmux and Claude Code sessions, same files, nothing to move. The session I started on my phone in a coffee line is right there when I sit down.

Because the laptop is just another node on the Tailscale network, that access runs both ways. If I start something locally on the laptop, I do not package it up and carry it over; I ask the mini to SSH into the laptop and pull the project across. That is how the Europe trip actually worked: the laptop came along and stayed mostly closed, but it was plugged in and on the network, so on the rare occasion I needed something from it, the mini just reached in and grabbed it. Every device is reachable from every other, so a project can start anywhere and end up on the mini without me shuffling files. Nothing to sync, ever. The device I happen to be holding stopped mattering.

Looking ahead

What this setup really did was lower the bar to building until it nearly disappeared. When acting on an idea costs a two-hour block, most ideas quietly die waiting for the block. When it costs three minutes and the phone in my pocket, I act on far more of them, and build far more than I used to.

You do not need much to try it: a cheap used mini PC or a $12 VPS, Tailscale to tie it together, a terminal app on your phone, and an AI coding agent to do the building. Start with the VPS if hardware feels like a hurdle. It is an afternoon of setup, and the shift in how much you build is worth far more.

If you want the actual how-to, I am writing a detailed, step-by-step follow-up that walks through standing this up from scratch, starting with nothing but a rented VPS and your phone, so you can build your own version by following along. If you would like me to email you when it goes live, sign up below.

Notify me when the guide is out

If you try something like this and want to compare notes, or you already run a setup of your own and have ideas, tips, or questions to trade, I would love to connect. That back-and-forth is how I have learned most of what is in this post. Feel free to use the contact form below or reach out on LinkedIn.

Newsletter

Get notified about new posts

I write about building with AI, homelab setups, and automation. Drop your email and I'll let you know when something new goes up, including the step-by-step guide to this setup. No spam, unsubscribe anytime.

Contact

Get in Touch

Interested in collaborating on a project or just want to connect?
Reach out below.