I work from a van. Sometimes.
That means my internet needs to work everywhere. Or at least, enough places to stay productive.
The Setup
Hardware:
- Starlink Standard (Gen 2) dish
- Roam plan ($150/month, priority data)
- 12V inverter wired to house battery
- Cellular failover (T-Mobile + Visible)
- Peplink router for automatic switching
The dish mounts on the roof. Cable runs inside. Inverter pulls from a 200Ah LiFePO4 battery charged by solar.
When parked, the system auto-connects. When driving, it switches to cellular.
Real-World Speeds
I’ve used this across a dozen states. Here’s what I actually get:
Best case (rural, clear sky):
- Download: 120-180 Mbps
- Upload: 15-25 Mbps
- Latency: 25-40ms
Typical (campgrounds, forests):
- Download: 50-90 Mbps
- Upload: 8-15 Mbps
- Latency: 40-60ms
Worst case (trees, bad weather):
- Download: 5-20 Mbps
- Upload: 1-5 Mbps
- Latency: 80-150ms
Even worst case is usable for code, email, and video calls. Might not stream 4K, but I can deploy code and run my AI infrastructure without issue.
Where It Struggles
Heavy tree cover — Dish needs clear sky view. Dense forest canopy kills signal. I’ve learned to scout for clearings before setting up camp.
Moving vehicles — Roam plan allows in-motion use, but it’s unreliable. I tried working while someone else drove. Dropped constantly. Not worth it.
Storms — Heavy rain degrades signal. Snow less so. Lightning makes me nervous about leaving it powered.
Congested areas — Near cities or popular camping spots, speeds drop during peak hours. Starlink’s priority data helps, but not always.
The Failover System
This is where the setup gets smart:
Peplink router monitors Starlink health. If latency spikes or bandwidth drops below threshold, it fails over to cellular.
Primary: Starlink (unlimited data, good speeds)
Backup: T-Mobile hotspot (100GB/month, decent coverage)
Emergency: Visible line ($25/month, actually unlimited)
The switch happens automatically. No manual intervention. My SSH sessions stay connected.
Power Consumption
The dish pulls about 50-75W when active. That’s significant when running off battery.
Daily usage (8 hours work):
- Starlink: ~400-600Wh
- Laptop: ~200Wh
- Router/misc: ~50Wh
- Total: ~650-850Wh/day
My solar setup (400W panels, 200Ah battery) handles this in sunny conditions. Cloudy days I need to ration or run the van engine to charge.
In practice: I monitor battery levels with the same traffic light system I use for finances. Green = don’t think about it. Yellow = be mindful. Red = drive to charge or find shore power.
The Economics
Monthly costs:
- Starlink Roam: $150
- T-Mobile: $50
- Visible: $25
- Total: $225/month
For comparison:
- Campground WiFi: unreliable, insecure, often unusable
- Coffee shop hopping: $5-10/day = $150-300/month, plus wasted time
- Coworking memberships: $200-400/month, not available everywhere
Starlink is expensive but worth it for the flexibility.
Where I Actually Work
The setup enables some odd office locations:
- BLM land (free camping) — Best speeds, nobody around
- National Forest — Hit or miss depending on trees
- Walmart parking lots — Works fine, not peaceful
- Rest stops — Emergency only, sketchy at night
- Friend’s driveways — Best of both worlds
I’ve taken client calls from a mountain pass in Colorado and deployed code from a beach in Oregon. The location is irrelevant as long as the dish sees sky.
Deployment Workflow
When I’m building infrastructure, the workflow is:
- SSH into my VPS (Hetzner, Germany)
- Git pull changes
- Restart services
- Monitor logs
Latency to Europe from the US is ~120-150ms over Starlink. Not ideal for real-time gaming, but fine for terminal work.
Docker builds run remotely. I’m not compiling on my laptop over satellite. Push to repo, let the VPS handle it.
What Surprised Me
It works better than expected. I was skeptical about satellite internet for dev work. But modern low-earth orbit makes a difference. It’s not dial-up.
Weather matters less than trees. Heavy rain is annoying but manageable. Tree cover is a hard blocker.
The mental shift takes time. I spent the first month paranoid about connection drops. Now I just trust the failover system.
Power is the real constraint. Internet works great. Keeping batteries charged is the actual challenge.
Integration with Neatworld
My monitoring system tracks Starlink performance:
def check_internet_status():
"""Check current connection health."""
speed_test = run_speedtest()
active_connection = get_active_wan()
battery_level = get_battery_soc()
return {
"connection": active_connection, # "starlink" or "cellular"
"download_mbps": speed_test.download,
"upload_mbps": speed_test.upload,
"latency_ms": speed_test.ping,
"battery_level": battery_level
}
I can ask my AI Chief of Staff: “Is my internet working?”
It responds with: “Starlink active. 87 Mbps down, 12 up, 42ms latency. Battery at 78%.”
All without opening a dashboard or running manual tests.
The Tradeoffs
Pros:
- Work from anywhere with sky view
- Reliable enough for production work
- Automatic failover to cellular
- Fast enough for video calls and deployments
Cons:
- Expensive ($150/month before cellular backup)
- Power-hungry (limits off-grid time)
- Requires clear sky (limits forest camping)
- Setup/teardown time (5-10 minutes per move)
Would I Recommend It?
If you’re full-time van life and need real internet: yes.
If you’re weekend camping occasionally: no, just use cellular.
The breakeven is around 10-15 days/month of remote work. Below that, cellular hotspots are cheaper and simpler.
The Future Setup
Things I’m considering:
Smaller dish — Gen 3 mini uses less power, easier to mount Better battery — 300Ah would give more cushion Automatic tracking — Dish that auto-aims for optimal signal Redundant cellular — Third carrier for triple failover
But honestly, the current setup works. I’m not optimizing until I feel real friction.
The Takeaway
Modern satellite internet makes vanlife work viable.
It’s not perfect. It’s not cheap. But it’s functional enough to run three businesses from a vehicle.
The constraint isn’t the internet anymore. It’s everything else: power, water, weather, laundry.
But at least I can deploy code from a forest. That’s something.