Skip to content
Shangjin / blog

An Indie Developer's Tool Evolution: How I Build ThoughtEcho

•Shangjin
From hopping between IDEs for free credits and using Codespaces on an iPad, to subscribing to various AI plans, an Azure free VM, and terminal CLI. A candid look at how I build ThoughtEcho without a PC.

I’ve always wanted to build an app of my own, and in daily life, I genuinely needed a lightweight excerpt tool to jot down fleeting thoughts. I first came across the concept of “vibe coding” right around when Claude 3.5 Sonnet launched. Back then, the internet was buzzing with claims that “AI is about to replace programmers.” With a mix of curiosity and an urge to try, I decided to roll up my sleeves and build ThoughtEcho.

Starting out was rough. To keep costs down, I hopped between different AI-enabled IDEs, hunting for free trial credits wherever I could find them. On top of that, Claude 3.5 Sonnet struggled with plenty of practical engineering issues back then—it would loop over a single compilation error multiple times without resolving it, only making the codebase messier with every attempt. Over time, I picked up an important takeaway: when an AI starts spinning its wheels on a problem, just set it aside and wait for newer, more capable models to arrive. There’s no point in banging your head against the wall.

Later, I got approved for the GitHub Student Developer Pack, which gave me free access to Copilot Pro. Because my local machine was too sluggish to handle the build, I switched to GitHub Codespaces, writing code inside the browser on an iPad and letting GitHub Actions handle CI and compilation. That solved part of the hardware bottleneck, but during my Codespaces days, I still had to keep my eyes glued to the web editor, watching the syntax highlights and squiggly errors, and manually copying and pasting error logs back to Copilot to get them fixed.

Eventually, GitHub changed its student benefits, transitioning Copilot for students into a much more restricted Student plan that became practically unusable for my workflow. Fortunately, the GitHub Student Pack also included Azure for Students credits. I registered and spun up a free Linux virtual machine, deciding to move my entire development setup onto the cloud VM.

Around that time, terminal CLI tools were maturing, and I now primarily use Antigravity. I use it mainly because I already subscribe to Google AI Pro for studying, so having it in my terminal setup feels natural. To find the right tool, I experimented with quite a few options along the way—like OpenCode Go, Codex in ChatGPT Plus, and Claude Pro. After trying them all, I don’t think there’s any single tool out there that feels completely frictionless. But when it comes to models alone, Claude remains the best to work with—I wouldn’t claim it’s universally the strongest, but the collaboration experience with it has always felt the most natural.

Switching to the CLI made the whole workflow significantly smoother. I no longer have to babysit an editor or manually copy and paste error logs back and forth. I simply articulate the requirements and logic in the terminal, and the Agent takes care of modifying code, resolving errors, and running tests. Once the changes are pushed to GitHub, I just wait for GitHub Actions to compile the build artifacts and inspect the results.

Within this setup, I also stumbled upon debugging tricks I hadn’t considered before. For instance, using Termius on my iPad to set up an SSH tunnel that forwards ADB, mapping the debugging ports from the remote VM to my local environment. At first, I had no idea this was even possible. But through that tunnel, I was able to connect local DevTools directly to the remote runtime and smoothly diagnose and resolve frame drops on ThoughtEcho’s recording page, polishing its performance.

For me today, a free cloud VM, a terminal window, and an SSH tunnel—paired with automated GitHub Actions—are more than enough to keep building ThoughtEcho forward, without ever needing to rely on a computer.