Home / Blog / I Debugged a Production Server Crash From the Berl...

I Debugged a Production Server Crash From the Berlin U-Bahn — Here's How

By CaelLee | | 6 min read

I Debugged a Production Server Crash From the Berlin U-Bahn — Here's How

TL;DR: Codex Appshot turns your phone into a real remote coding terminal. I'll walk through setup, show you how I fixed a 500 error from a subway train, and explain why this weird little app is now my favorite on-call tool.

Picture this: You're underground, packed into the U8 like a sardine, no laptop in sight. Then your phone buzzes with that notification. The one that makes your stomach drop. Server's down. ☕ Panic?

Not anymore. Not since I found this thing.

Last Tuesday, my production API decided to throw a spectacular 500 error while I was commuting through Berlin. No laptop. Just me, my phone, and about 200 strangers who definitely didn't care about my uptime SLA. That's when I truly fell for Codex Appshot.

Here's the deal: it's a mobile app that connects to your actual dev environment. Not some watered-down toy editor — we're talking real VS Code Server in your browser, optimized for touch. Well... mostly optimized. We'll get to that part.

🔥 What Even Is Codex Appshot?

Codex Appshot is a tool that bridges your phone to a cloud or local dev machine. I first heard about it back in March after some buzz on X (Twitter, whatever — I still call it Twitter). Honestly? I was skeptical. Phone coding apps have a history of being... let's call it "aspirational."

But this one's different.

You code on your phone, but execution happens on your beefy server. Think of it as a native protocol rather than screen mirroring — which is why the latency doesn't make you want to frisbee your phone across the train car. I've tried VNC solutions before. This ain't that.

Key features that actually matter:

Version 2.4.1 dropped last week and finally fixed the bug where the terminal would randomly eat your first keystroke. That one drove me nuts. Thank god it's gone.

🚀 Setting Up in 5 Minutes (For Real This Time)

I run a DigitalOcean droplet for side projects. Let's connect it.

First, install the server component on your machine:


# SSH into your dev server
ssh alex@my-droplet

# Download and run the Codex setup script
curl -sSL https://get.codex-appshot.io/setup | bash

# Start the service
codex-appshot serve --port 8080 --auth-password "berlinCoffee42"

The script spits out a QR code and a pairing key. Took maybe 90 seconds total. I'm not exaggerating — I timed it.

On your phone, open the Appshot app, scan the code, and boom — you're staring at your actual VS Code workspace. The first time this worked, I actually laughed out loud on the train. People stared. Whatever. Worth it.

⚠️ Mistake alert: I used localhost instead of my server's IP the first time. Spent three hours debugging firewall rules that were perfectly fine. Don't be like me — use 0.0.0.0 if you want external access. The docs have improved since then, I think, but at the time they were... sparse. Let's go with sparse.

💡 Real-World Debugging: The U-Bahn Incident

Back to my subway story. The error log showed this gem:


File "/app/utils/auth.py", line 47, in validate_token
 decoded = jwt.decode(token, SECRET, algorithms=['HS256'])
jwt.exceptions.InvalidSignatureError: Signature verification failed

I opened the file right on my phone. The touch-optimized keyboard has these swipe gestures for symbols — swiping right on j gives >, swiping up on k gives +. It's surprisingly fast. Not "mechanical keyboard" fast, but definitely "I can't believe this is actually working" fast.

Found the issue in about two minutes: A config sync script had overwritten the SECRET key. Classic. Absolutely classic.

I edited the env file, restarted the service with a terminal command, and the alerts stopped. All before my stop at Hermannplatz. Maybe seven minutes from alert to resolution. Felt like a wizard. A very cramped, underground wizard who really needed coffee.

Three data points that impressed me:

  1. Connection time: Under 1.2 seconds on 4G (tested with curl -o /dev/null -s -w '%{time_total}')
  2. Latency per keystroke: ~80ms, barely noticeable
  3. Battery usage: 12% for a 45-minute session (iPhone 13)

That battery number surprised me. I expected way worse. Like, "phone is now a hand warmer" worse.

🔐 Security: Please Don't Skip This Part

You're exposing a dev environment to the internet. I'm going to be that person for a minute.

Seriously. Don't skip this.


# Always use TLS
codex-appshot serve --port 8080 --tls-cert /path/to/cert.pem --tls-key /path/to/key.pem

# Restrict IP ranges if possible
sudo ufw allow from 192.168.1.0/24 to any port 8080

What I actually recommend:

The app stores credentials locally with AES-256 encryption. Not perfect, but solid for most use cases. From what I've seen in the GitHub issues, there was a minor CVE filed in January about session token handling, but the 2.4.0 release patched it. Keep things updated. Obviously.

🎯 When Phone Coding Actually Makes Sense

I'm not suggesting you build an entire SaaS from your phone. That would be insane. Please don't do that.

But for specific scenarios? It's ✨ magical:

Speaking of that döner shop — the owner now thinks I'm some kind of hacker. I didn't correct him. He gives me extra meat now. Totally worth it.

📱 Touch-Friendly Tricks Worth Knowing

The app has some clever UX that took me weeks to discover:

My absolute favorite: shaking the phone undoes the last action. It's like a real-life Ctrl+Z, minus the weird looks from fellow passengers. Well... you still get the looks. Just for different reasons now.

I keep stumbling on new gestures. There's probably a manual somewhere. I should probably read it.

⚠️ The Honest Limitations

It's not all sunshine and artisanal espresso. Some rough edges that bug me:

For serious refactoring sessions, I still reach for my laptop. But for quick fixes? This is now my first choice. Which probably says more about my lifestyle than the app, honestly.

One thing that genuinely frustrates me: the extensions that don't work either crash silently or just... don't appear. No error message. No warning. Just absence. The maintainers say they're working on it. We'll see.

🤔 What's Coming Next?

The team behind Codex Appshot is working on offline editing with sync-on-connect. I'm cautiously excited — offline coding on a phone sounds ambitious. Maybe too ambitious? I don't know. The devlog on their Discord shows some promising prototypes though.

I'm also experimenting with connecting it to my Raspberry Pi home server. Imagine: a $35 computer doing the heavy lifting while you code from a hammock. We're living in the future, friends. Or maybe just a very specific, nerdy version of it. Either way, I'm here for it.

What's your experience with mobile coding? Have you debugged production from an unlikely place? Or do you think this whole idea is absurd and I should just carry my laptop like a normal person? Drop a comment — I'll be here with my coffee, probably coding from my phone. ☕

mobile #webdev #python #productivity #devops

C

Cael Lee

Full-stack developer with 8+ years of experience. Currently building AI-powered developer tools. I've tested 20+ AI API providers and coding assistants.

Ready to get started?

Get your API key and start building with 180+ AI models.

Get API Key Free