Inspiration
I am inspired by the open source community that builds tools that rival and sometimes surpass proprietary AI products. Open source tools offer self-hosting and control over one's own data, and they apply pressure to proprietary tech to improve their products.
PocketCoder is heavily inspired by OpenClaw and Claude Remote Control. I started building the first version in February and submitted a prototype PocketCoder to a previous hackathon (https://devpost.com/software/pocketcoder-r4oita). I learned a lot but thought that was it for PocketCoder. RevenueCat Shipaton encouraged me to productionize PocketCoder and actually ship it because they allowed previous work as long as it has never been shipped to an app store before.
What it does
1-tap setup from mobile:
- Provisions a VPS from Linode
- Installs NixOS
- Deploys dockerized PocketCoder backend
- Configures TLS certificates with Caddy
- Authenticates mobile app to the backend
PocketCoder enables:
- Users swap between coding agents (Claude Code, Codex, OpenCode, Goose) while using their own subscriptions or API keys via Agent Client Protocol (ACP).
- Agents that ask for permissions and show tool calls, not just a chat
- Agentic memory that remembers why, not just what
- Variety of MCPs through the Docker MCP gateway
- File inspector
- SSH key setup for git repositories
How we built it
Stack:
- Flutter/cubit client
- PocketBase + AG-UI protocol as a contract
- SQLPage for observability
- Docker MCP Gateway for many MCPs
- Docker Compose
- Caddy
- NixOS
- RevenueCat handles billing and entitlements
- Firebase Cloud Messaging for push notifications
- Cloudflare Workers for OAuth, push notifications, and NixOS/Docker images
- GitHub attestations
I used agentic tools such as Claude Code and Codex to speed up the implementation, debugging, and iteration.
Challenges we ran into
The scope and time of the project exceeded my expectations. In order to turn a VPS into an "appliance" — restart, update, backup, and restore, all from the app — a lot of engineering and version compatibility needed to be thought through.
One bug nearly convinced me the project was dead. Provisioning the VPS would hang with no error, even though the exact same flow had worked before. Something had broken, and I couldn't tell what. For about a day or two I thought this was going to block the whole project from shipping. The VPS looked healthy over SSH, and the installer's own log said it had finished, but the client just sat there waiting forever. The answer was on neither side: to signal that an install is done, the VPS powers itself off, and the client watches for three consecutive offline reads. Linode has an account-level watchdog that reboots any instance powered off without its knowledge, and it was winning the race — rebooting the box faster than my poll could catch the shutdown. A fully successful install was disguising itself as a permanently stuck one. I only found this by opening Linode's web portal and reading the raw event log by hand; nothing in my own server or client logs could see it. The fix: disable the watchdog for the duration of a provision, and re-enable it once done.
Additionally, PocketCoder is still not on the Apple App Store at the time of writing despite being on the Google Play Store for 2 weeks already, and submitting PocketCoder to both stores at the same time with the same information and instructions.
Accomplishments that we're proud of
- Getting not only a mobile AI Agent but also a mobile server controller that enables provisioning, deploying, and controlling a real server entirely from a phone, with no desktop step required at any point.
What we learned
- Distributing software onto machines you don't control is a different discipline than shipping an app — image caches, attestation, revocation, signed manifests were new to me.
What's next for Poco the PocketCoder
- Get through iOS review
- Use PocketCoder on my own VPS for real work and to self improve itself.
Log in or sign up for Devpost to join the conversation.