skrufvia treechat·1w
❤️ 3 Likes · ⚡ 0 Tips
{
  "txid": "3be7cb21e8262e4b7226f38799dacbb69d430f06be44aefd88d8a87b0676a735",
  "block_height": 0,
  "time": null,
  "app": "treechat",
  "type": "post",
  "map_content": "Vibecoding from Your Phone \u2013 Your Own AI Dev Server on a Raspberry Pi.\r\nYou get an idea. You're on the bus. You pick up your phone, open an app, and start building a website \u2013 AI writes the code, on your own server at home. You test it live in your browser. Done.\r\nThis guide shows you how to set that up. No prior server experience needed. When something is unclear, just paste the command or error into Claude, ChatGPT, or any AI \u2013 they'll help you through it.\r\n\r\nWhat you need\r\nRaspberry Pi 5 (8GB) ~$75\r\nmicroSD card (32GB+) ~$10\r\nStorage device (USB stick or external drive) ~$10\r\nClaude Pro account $20/month\r\nTailscale \u2014 free\r\nTermius (phone app) \u2014 free\r\nWindows, Mac or Linux? All terminal commands in this guide work on Mac and Linux out of the box. Windows users should use WSL2 (Windows Subsystem for Linux) \u2013 ask an AI how to set it up, it takes about 5 minutes.\r\n\r\nWhat you end up with\r\n\u2705 A server at home that's always on and always ready\r\n\u2705 Control it with AI from your phone, anywhere in the world\r\n\u2705 Test your sites on a real mobile browser as you build\r\n\u2705 No monthly cloud bills just to test an idea\r\n\u2705 Your code stays on your own hardware\r\n\r\nPart 1 \u2013 Flash the operating system\r\nThink of this as installing Windows or macOS \u2013 but on a tiny card that goes into the Pi.\r\nDownload Raspberry Pi Imager at raspberrypi.com/software (available for Windows, Mac and Linux)\r\nInsert your microSD card into your computer\r\nOpen Imager and select:\r\nDevice: Raspberry Pi 5\r\nOS: Raspberry Pi OS Lite (64-bit) \u2014 the \"Lite\" version has no desktop, which saves resources on a server\r\nClick the pencil/settings icon before writing \u2013 this is important:\r\nHostname: pick a name, e.g. myserver\r\nEnable SSH: \u2705\r\nUsername: pick a username, e.g. dev\r\nPassword: choose something strong\r\nWiFi: fill in if not using an ethernet cable\r\nTimezone: set to your local timezone\r\nClick Write and wait for it to finish\r\nInsert the card into your Pi, plug in ethernet and power\r\nWait 2\u20133 minutes for the first boot\r\n\r\nPart 2 \u2013 Connect to your Pi\r\nYour Pi has no screen. You'll connect to it from your computer via SSH \u2013 a way of controlling one computer from another through text commands.\r\nFind your Pi's IP address \u2013 check your router's admin page (usually at 192.168.1.1 or 192.168.0.1) under \"Connected devices\". Look for your Pi's hostname.\r\nOr from your terminal:\r\nnmap -sn 192.168.1.0/24\r\n\r\nConnect via SSH:\r\nssh yourusername@192.168.1.x\r\n\r\nReplace yourusername with the username you chose and x with your Pi's IP. Enter your password when asked.\r\nYou're now inside your Pi. Everything from here is typed into this window.\r\n\r\nPart 3 \u2013 Update and install essentials\r\nsudo apt update && sudo apt full-upgrade -y\r\nsudo apt install git curl build-essential fail2ban -y\r\n\r\nsudo means \"run as administrator\". The Pi will ask for your password the first time.\r\n\r\nPart 4 \u2013 Set up your storage device\r\nYour project files should live on a separate storage device, not the microSD card (which is just for the OS).\r\n# See what storage devices are connected\r\nlsblk -f\r\n\r\nYou'll see something like sda \u2013 that's your USB stick or drive. Double-check it's the right one before continuing \u2013 this will erase everything on it.\r\n# Format and set up the storage device (replace 'sda' if yours is different)\r\nsudo wipefs -af /dev/sda\r\nsudo parted /dev/sda -- mklabel gpt\r\nsudo parted /dev/sda -- mkpart primary ext4 1MiB 100%\r\nsudo mkfs.ext4 -L projects /dev/sda1\r\n\r\n# Mount it permanently (auto-mounts on every reboot)\r\nsudo mkdir -p /mnt/projects\r\nsudo chown $USER:$USER /mnt/projects\r\necho \"UUID=$(sudo blkid -s UUID -o value /dev/sda1)  /mnt/projects  ext4  defaults,nofail,noatime  0  2\" | sudo tee -a /etc/fstab\r\nsudo mount -a\r\n\r\n# Create a shortcut to it from your home folder\r\nln -s /mnt/projects ~/projects\r\n\r\nVerify it works:\r\nls ~/projects\r\ndf -h /mnt/projects\r\n\r\n\r\nPart 5 \u2013 Tailscale (access from anywhere)\r\nTailscale creates a secure, private connection between your Pi and your phone \u2013 no router settings, no port forwarding, no technical networking knowledge needed.\r\nOn the Pi:\r\ncurl -fsSL https://tailscale.com/install.sh | sh\r\nsudo tailscale up\r\n\r\nA link appears \u2013 open it in your browser and log in with Google or GitHub.\r\nOn your phone: Install the Tailscale app and log in with the same account. Your Pi appears automatically in the list.\r\nNote your Pi's Tailscale IP:\r\ntailscale ip -4\r\n# Looks like 100.x.x.x \u2013 save this number\r\n\r\n\r\nPart 6 \u2013 Security\r\nSSH keys \u2013 log in without a password\r\nOn your computer:\r\n# Create a key if you don't have one\r\nssh-keygen -t ed25519 -C \"my-computer\"\r\n\r\n# Copy it to your Pi\r\nssh-copy-id yourusername@192.168.1.x\r\n\r\nWindows users, run this in PowerShell instead:\r\ntype $env:USERPROFILE\\.ssh\\id_ed25519.pub | ssh yourusername@192.168.1.x \"mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys\"\r\n\r\nThen disable password login on the Pi:\r\nsudo nano /etc/ssh/sshd_config\r\n\r\nFind and change these lines:\r\nPasswordAuthentication no\r\nPermitRootLogin no\r\n\r\nSave with Ctrl+O \u2192 Enter \u2192 Ctrl+X, then:\r\nsudo systemctl restart ssh\r\n\r\n\u26a0\ufe0f Test that you can still log in from a new terminal window before closing your current session.\r\nFirewall\r\nsudo ufw allow from 192.168.0.0/16 to any port 22 proto tcp\r\nsudo ufw allow from 100.64.0.0/10 to any port 22 proto tcp\r\nsudo ufw enable\r\n\r\nFail2ban\r\nAlready installed \u2013 it automatically blocks repeated failed login attempts. Verify it's running:\r\nsudo systemctl status fail2ban\r\n\r\n\r\nPart 7 \u2013 GitHub setup\r\nGitHub stores your code and keeps everything in sync between your computer, your Pi and your phone.\r\nCreate a GitHub account\r\nGo to github.com and sign up for a free account.\r\nGenerate an SSH key on your Pi\r\nThis lets your Pi push and pull code to GitHub without a password:\r\nssh-keygen -t ed25519 -C \"my-pi\"\r\n\r\nPress Enter on all questions (no passphrase needed on a server).\r\nShow the public key:\r\ncat ~/.ssh/id_ed25519.pub\r\n\r\nCopy the entire output.\r\nAdd the key to GitHub\r\nGo to github.com \u2192 click your profile picture \u2192 Settings\r\nClick SSH and GPG keys \u2192 New SSH key\r\nGive it a name like \"My Pi\" and paste the key\r\nClick Add SSH key\r\nTest the connection\r\nssh -T git@github.com\r\n# You should see: Hi yourusername! You've successfully authenticated...\r\n\r\nConfigure Git\r\ngit config --global user.name \"Your Name\"\r\ngit config --global user.email \"your@email.com\"\r\n\r\nCreate your first repo\r\nOn github.com, click New repository, give it a name, and copy the SSH clone URL.\r\nClone it to your Pi:\r\ncd ~/projects\r\ngit clone git@github.com:yourusername/your-repo.git\r\ncd your-repo\r\n\r\n\r\nPart 8 \u2013 Install Claude Code\r\nUse the native installer:\r\ncurl -fsSL https://claude.ai/install.sh | sh\r\n\r\nIf that doesn't work on your Pi, fall back to npm:\r\ncurl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -\r\nsudo apt install nodejs -y\r\nmkdir -p ~/.npm-global\r\nnpm config set prefix ~/.npm-global\r\necho 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc\r\nsource ~/.bashrc\r\nnpm install -g @anthropic-ai/claude-code\r\n\r\nLog in \u2013 a link appears, open it in your browser:\r\nclaude\r\n\r\n\r\nPart 9 \u2013 Install Docker\r\nDocker lets you run apps in isolated containers \u2013 perfect for backends, databases and full-stack projects.\r\ncurl -fsSL https://get.docker.com | sudo sh\r\nsudo usermod -aG docker $USER\r\nsudo apt install docker-compose-plugin -y\r\n\r\nLog out and back in, then verify:\r\ndocker --version\r\ndocker compose version\r\n\r\n\r\nPart 10 \u2013 The workflow\r\nAt home \u2013 working from your computer\r\nConnect to your Pi from your computer's terminal:\r\nssh yourusername@myserver.local\r\n\r\nNavigate to your project and start Claude Code:\r\ncd ~/projects/my-project\r\nclaude\r\n\r\nWhen done, ask Claude to push your changes:\r\n\"Commit everything and push to GitHub\"\r\nTest your site in your phone's browser while still at home:\r\nhttp://myserver.local:3000\r\n\r\n\r\nOut and about \u2013 idea strikes\r\nOpen Termius on your phone \u2192 connect via Tailscale IP (100.x.x.x)\r\nCreate or navigate to your project:\r\nmkdir ~/projects/my-idea && cd ~/projects/my-idea\r\n# or: cd ~/projects/existing-project && git pull\r\n\r\nStart Claude Code with Remote Control:\r\nclaude --remote-control\r\n\r\nA link appears \u2013 open it in your phone's browser\r\nClose Termius\r\nOpen the Claude app \u2192 your session appears \u2192 start describing what you want to build\r\nAsk Claude to start a server:\r\n\"Start a dev server so I can test this in my browser\"\r\nOpen your mobile browser:\r\nhttp://100.x.x.x:3000\r\n\r\nSee your site live on your actual phone\r\nWhen done:\r\n\"Commit everything and push to GitHub\"\r\n\r\nWhy this works so well\r\nWhen you start a Remote Control session, Claude Code keeps running locally on your Raspberry Pi the entire time. Nothing moves to the cloud \u2013 your filesystem, tools and project configuration all stay available. The web and mobile interface is just a window into that local session.\r\nThe Pi runs 24/7 on about 5\u201310W of power \u2013 less than a phone charger. It's always there, always ready, and costs almost nothing to run.\r\nAnd because you're testing on your actual phone against a real server, what you see is what your users will see.\r\n\r\nTotal setup time: ~2 hours. Total cost: one Pi + Claude Pro. Total vibe: immaculate.",
  "media_type": "text/markdown",
  "filename": "|",
  "author": "14aqJ2hMtENYJVCJaekcrqi12fiZJzoWGK",
  "display_name": "skruf",
  "channel": null,
  "parent_txid": null,
  "ref_txid": null,
  "tags": null,
  "reply_count": 1,
  "like_count": 3,
  "timestamp": "2026-04-08T17:50:46.000Z",
  "media_url": null,
  "aip_verified": true,
  "has_access": true,
  "attachments": [],
  "ui_name": "skruf",
  "ui_display_name": "skruf",
  "ui_handle": "skruf",
  "ui_display_raw": "skruf",
  "ui_signer": "14aqJ2hMtENYJVCJaekcrqi12fiZJzoWGK",
  "ref_ui_name": "unknown",
  "ref_ui_signer": "unknown"
}
⬇️
metamityavia treechat·1w
❤️ 0 Likes · ⚡ 0 Tips
{
  "txid": "35afd2cb57ca16223fccd1e81b268d28a8a004ca77e266814316108eac8743ea",
  "block_height": 0,
  "time": null,
  "app": "treechat",
  "type": "reply",
  "map_content": "[[ai dev]] [[mobile dev]]",
  "media_type": "text/markdown",
  "filename": "|",
  "author": "14aqJ2hMtENYJVCJaekcrqi12fiZJzoWGK",
  "display_name": "metamitya",
  "channel": null,
  "parent_txid": "3be7cb21e8262e4b7226f38799dacbb69d430f06be44aefd88d8a87b0676a735",
  "ref_txid": null,
  "tags": null,
  "reply_count": 0,
  "like_count": 0,
  "timestamp": "2026-04-08T18:48:24.000Z",
  "media_url": null,
  "aip_verified": true,
  "has_access": true,
  "attachments": [],
  "ui_name": "metamitya",
  "ui_display_name": "metamitya",
  "ui_handle": "metamitya",
  "ui_display_raw": "metamitya",
  "ui_signer": "14aqJ2hMtENYJVCJaekcrqi12fiZJzoWGK",
  "ref_ui_name": "unknown",
  "ref_ui_signer": "unknown"
}
Signed by14aqJ2hMtENYJVCJaekcrqi12fiZJzoWGKAIP!