What I learned building a real app with Claude Code
Description and use
ShuttleSCP was built as a public beta at version 0.13.0, approximately 22,000 lines of Rust with 149 automated tests, running on Linux, macOS and Windows. Key engineering features included GitHub Actions CI/CD, safe self-updates via Ed25519-signed release manifests with SHA-266 verification, secrets stored in desktop keyrings, and release hygiene. Bugs found through manual use were fixed and some now have automatic checks. The author learned that writing code was the smallest part of software development; decision-making, user testing, noticing subtle issues, and scope control were the main remaining work.
Problem
The author wanted to learn what it is like to rely on Claude and Claude Code for a real project with real bugs and real releases, rather than just taking a course.
Outcome
ShuttleSCP was built as a public beta at version 0.13.0, approximately 22,000 lines of Rust with 149 automated tests, running on Linux, macOS and Windows. Key engineering features included GitHub Actions CI/CD, safe self-updates via Ed25519-signed release manifests with SHA-266 verification, secrets stored in desktop keyrings, and release hygiene. Bugs found through manual use were fixed and some now have automatic checks. The author learned that writing code was the smallest part of software development; decision-making, user testing, noticing subtle issues, and scope control were the main remaining work.
Workflow
- Decided to build ShuttleSCP as a real project after finishing the Claude Code masterclass.
- Described requirements in plain words and let Claude write the code.
- Set ground rules: each feature on its own branch, explain each step as it happens, never handle passwords directly (use a script that asks for them), and be honest that AI built the app in README and web page.
- Reviewed changes by reading what each change did and why, and testing the app manually.
- Fixed bugs found during manual use, including missing GTK add-ons causing icons not to load, packaging forcing default theme, and debug build rewriting desktop launcher entry.
- Fixed version number reuse by checking actual released versions before publishing.
- Fixed CI status line trust issue where Claude watched GitHub Actions label instead of result.
- Added automatic checks for first two bugs so they cannot recur.
Evidence
I recently finished The Complete Claude Code & Claude Cowork Masterclass. A course shows you what Claude and Claude Code can do. It doesn't show you what it's like to lean on that tool for a real project, with real bugs and real releases. I wanted to find out.
So that became the project. The result is ShuttleSCP, a free, open-source SFTP, SCP and FTP/FTPS client for Linux, macOS and Windows, written in Rust with GTK 4. It's a public beta at version 0.13.0.
Every feature goes on its own branch, and nothing merges until I've tried it. Explain each step as you go. Never handle my passwords or keys. When something needed a secret, it gave me a script that asked me for it directly. Be honest that an AI built this, in the README and on the web page.
The speed is real. ShuttleSCP is now about 22,000 lines of Rust with 149 automated tests. It runs on Linux, macOS and Windows, and has had eight public beta releases.
Every pull request is linted and tested on GitHub Actions. Pushing one release tag builds, checks and publishes the Linux AppImage, the macOS disk image and the Windows installer.
The app checks a release manifest signed with an Ed25519 key, verifies the download's SHA-266, and swaps the file in one step.
Saved passwords go to GNOME Keyring, the macOS Keychain or the Windows Credential Manager, never a plain file.
- Record date: 2026-10-22T18:11:16.597Z