2026-03-23
Building a Website from My Phone with Claude Code + Telegram
I built 0xkaz.com almost entirely from my phone. My machine runs at home in KL. I was in a café in KL, or traveling in Baguio or Abu Dhabi — opening Telegram, typing what I wanted, and watching the site change.
The tool is Claude Code's Telegram channel plugin. You run Claude Code on a machine at home, install the plugin, and point it at your repo. After that, your Telegram chat works like a terminal. Claude can read files, edit code, run shell commands, and deploy — all from a message. Location no longer matters.
How the loop actually works
Setup is simple. Install the plugin, set your bot token, and set TELEGRAM_STATE_DIR in .claude/settings.json to a folder inside the repo instead of ~/.claude/. That one setting matters: it keeps the bot state in version control with the project, not loose in your home directory.
{
"env": {
"TELEGRAM_STATE_DIR": "/path/to/repo/.claude/channels/telegram"
}
}From that point, the interaction is just messaging. I'd send “add a dark mode toggle to the nav” and Claude would read the relevant components, make the edits, and reply with what it changed. I'd send “deploy” and it would run the build and push to Cloudflare Pages.
Skills make it one-command
The big speed boost came from creating skills — small SKILL.md files that define slash commands for common operations. I have /commit, /push, /deploy, and /feedback. Each one tells Claude exactly what to run and what to report back.
Sending /deploy from Telegram and getting back a live URL two minutes later, without touching a laptop, doesn't get old.
The feedback form got built this way too
The best part: the feedback form at the bottom of each article was built entirely through Telegram. I described what I wanted — a Cloudflare Worker to receive submissions, D1 for storage, Resend for email, Telegram notification when someone submits — and Claude built the whole stack. Wrangler commands to create the database, migration SQL, the Worker code, the form component in Next.js, all connected.
That took a few messages over an afternoon. Async. I'd send something, close Telegram, come back an hour later, read the result, send the next instruction.
The Async Loop: What Actually Clicks
Full async development. This is the real win. You don't have to watch a terminal. Send the message, do something else, come back to results. If you only have 20 minutes here and there for a side project, this changes everything.
No context switching. One thread. Claude keeps context across the session — it knows we use Tailwind v4 syntax, that the deployment target is Cloudflare Pages, that the Worker is in /worker and the site is in /site. I don't explain the project structure every time.
Shipping is fast. “Commit and push this.” One message. Done.
Three Limitations to Know Before You Start
No visual feedback. You can't see the rendered site in Telegram. For layout and CSS work this is a real problem — Claude can make confident but wrong choices about spacing and responsive behavior without a browser. Complex UI changes still need a laptop.
Session limits. Long tasks — especially multiple shell commands in a row — can hit context limits or time out. For anything complex, ask Claude to commit often.
Credentials need care. .claude/settings.json holds environment variables. Secret tokens belong in .claude/settings.local.json (gitignored), not in the tracked file.
Verdict: Yes, for Side Projects on Cloudflare
For a side project on Cloudflare's stack, yes, clearly. The setup is already light — no servers to SSH into, everything is wrangler deploy — and Telegram removes the laptop need for most tasks.
What surprised me is how much of software development works this way. Reading logs, querying databases, deploying, committing, adding features from a plain-text description — that's most of what I do on a side project. The parts that don't work (visual QA, debugging with browser devtools) are a small part.
The site you're reading this on was built this way.
How close to fully automated?
Close, but not there. The loop handles execution well — once you know what you want, Claude can build it. The part that still needs a human is direction. What feature to add next, whether a design choice feels right, whether the copy says the right thing. These are judgment calls that go wrong if you hand them off fully.
The risk isn't that Claude does things wrong — it's that it does things confidently in a direction you didn't quite mean. Catching that needs enough technical skill to read a diff and spot when something is off. You don't need to write all the code, but you need to know what good looks like.
Think of it as a skilled contractor who needs clear instructions. The less specific you are, the more the output reflects Claude's defaults instead of your intent. Technical knowledge makes your instructions better.
Notes from building 0xkaz.com. Other articles built using this workflow: Building RAG on Cloudflare Workers + Vectorize and Crawling GCC Government Documents.
// feedback