An exploration using Claude and Claude Code to design and build a responsive budgeting tool from scratch, with real learnings about what AI-assisted design looks like as a practice, not just a talking point.
A living project
"The tool is live and stands on its own — but I keep refining it. What's documented here are real learnings from the process, not a polished retrospective."
This page will evolve as the tool improves. Try it below.
Try Budget ControlOverview
I built this personal finance dashboard in collaboration with Claude AI, without prior React experience. I started with a concept of what I wanted, focused on specific use cases, and added features as I went. Development was fast, which let me stay focused on realistic use cases, testing, and design adjustments rather than getting stuck in setup and syntax.
Connecting Claude with Figma gave me more control over the visual design. I'd iterate on designs in Figma, then Claude would update the tool to match. The loop between design and build was tighter than anything I'd experienced working with a traditional engineering handoff.
The tool
Responsive views
The starting point
This is version 7, designed by Claude inside Figma. As engineering, it was genuinely impressive: working tabs, live math, a plausible dark theme, all produced in minutes. At a glance it looked like a real product. But a glance is exactly where it fell apart, because the design decisions a person would make were missing:
Every version since has been about undoing those defaults: establishing a real type scale, turning numbers into visualizations, giving the page one clear focal point, and restructuring the tool around how I actually budget.
Lessons learned
I asked Claude what it learned during the session
"The most instructive failure was asking [me] to design custom icons. I iterated through dozens of versions, an airplane, a paw print, a money sack, and the results were consistently poor. AI can generate SVG paths, but it can't see what it's drawing. I eventually maxed out my processing capacity pushing on something that wasn't going to work. The fix was simple: switch to Google's Material Design icon library and reference icons by name."
- Claude Sonnet 4.6
Deployment
Building the tool was half the work. Getting it reliably onto the web was the other half, and Claude was my debugging partner for that too. I set up a CI/CD pipeline using GitHub Actions that deploys over SFTP on every push to main. Getting it working meant debugging three failures in sequence: a misconfigured deployment secret, an SSH key pair I regenerated after a handling mistake, and a genuine bug in the deployment action's bundled SSH library that only appeared on newer Node versions. Claude verified that last one against the maintainer's issue tracker before recommending the fix, an upgrade to v3 of the action, a complete rewrite that sidesteps the buggy library entirely.
The app itself shipped broken once too: a blank page traced to two stacked causes. The deploy action's hash file had silently skipped an upload, and Vite's default absolute base path broke every asset URL in a subdirectory deploy. The fix was switching the build to a relative base (base: './' in the Vite config).
The pattern that mattered: Claude read my workflow logs, told me which errors were my configuration and which were upstream bugs, and flagged a security mistake I would have missed. The result is commit, push, live in under a minute. This section, like the pipeline itself, was written with Claude Code.
name: Deploy to Skystra
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: SFTP Deploy
uses: wangyucode/sftp-upload-action@v3
with:
host: # redacted
port: 22
username: ${{ secrets.SFTP_USERNAME }}
privateKey: ${{ secrets.SFTP_PRIVATE_KEY }}
localDir: ./
remoteDir: # redacted
exclude: ".git*,.github*,node_modules*,.DS_Store"
Status
✦
Live tool, refined and improved over time
0→
Built entirely from scratch using AI-assisted design
↑
Learnings accumulating with each iteration
The tool is live and stands on its own — and I keep refining it as it evolves, so new learnings and screens may appear here over time. Try the tool or get in touch to discuss AI-assisted design.