Running on Android

Your Phone.
Your Server. Your AI.

A rooted Android phone transformed into an always-on headless Linux server with a local LLM, live vitals dashboard, hardware control, and public access from anywhere.

Chat with Qwen3 View Server Vitals
8
CPU Cores
7.2 GB
RAM
16 GB
Swap
24/7
Uptime
Everything you need in your pocket.
A single Android phone replaces a $20/month VPS. Local AI, remote access, hardware control, and zero-touch auto-boot.
🧠

Local LLM Chat

Qwen3 1.7B runs via Ollama. Chat UI with file upload (PDF/image OCR), streaming responses, and auto web search fallback when the model is unsure.

📊

Live Vitals Dashboard

Real-time monitoring of CPU cores, memory, swap, disk, battery, temperatures, running services, network stats, and top processes. Auto-refreshes every 10s.

🌐

Public Access

Tailscale VPN for private access. Tailscale Funnel for public HTTPS endpoints. No port forwarding, no dynamic DNS, no cloud servers needed.

🔄

Zero-Touch Boot

Android init service auto-starts everything on reboot: WiFi reconnect, swap, chroot mount, SSH, Tailscale, Supervisor, Ollama. No manual intervention.

🔌

Hardware Control

USB OTG and serial communication with Arduino, ESP32, FTDI. GPIO-like control via Python. Android sensor access for battery and temperature.

🛡

Smart Guardrails

Repetition detection stops LLM loops after 100 words. Confusion detection triggers web search fallback. Aggressive debloat frees RAM on every boot.

How it works.
A Ubuntu 22.04 chroot runs inside Android. Services are managed by Supervisor. Everything auto-starts via Android's init system.
📦 Architecture

Linux inside Android

Full Ubuntu 22.04 ARM64 chroot at /data/local/linux/rootfs/. Bind-mounts for /dev, /proc, /sys, USB, and storage. DNS from Android resolvers.

Ubuntu 22.04 ARM64 Python 3.10 Flask Ollama Supervisor Tailscale
⚡ Boot Sequence

30 seconds to online

Android init triggers boot-wrapper.sh on sys.boot_completed. WiFi auto-connects, swap enabled, chroot mounted, all 5 services started. Fully hands-free.

# Boot chain Android Boot → Init System → Boot Wrapper → boot-auto.sh → WiFi (0 retries) → Swap → Chroot → SSH + Tailscale → Supervisor → Ollama + Chat + Scheduler + Watchdog
💻 API Endpoints

One server, every endpoint.

Single Flask server on port 5000. Protected routes require login (browser cookie or Bearer token). Vitals and hardware APIs are public.

# Login to get a permanent Bearer token curl -X POST /api/login -d '{"username":"...","password":"..."}' → {"token": "abc123...", "type": "Bearer"} # Use token for protected endpoints curl -H "Authorization: Bearer abc123..." /api/chat curl -H "Authorization: Bearer abc123..." /api/generate # Public endpoints (no auth needed) curl /api/vitals # CPU, RAM, disk, battery, temps curl /dashboard # Live HTML dashboard curl /health # Quick health check

Try it now.

Chat with the local AI, explore the vitals dashboard, or browse the full API documentation.

Open Chat Server Vitals Read Docs