I needed a designer.

The CVCO website worked. The copy said what it needed to say. But it looked like what it was: a site built by an engineer who cares about words more than whitespace. The content deserved a visual skin from someone with actual design taste — a real typographic eye, a considered color palette, the kind of restraint that separates “clean” from “empty.”

So I decided to hire one. On Upwork. And I decided to see what would happen if I let Claude drive.

Scoping the engagement

Before opening Upwork, I spent time in conversation with Claude working out what I actually wanted. Not “redesign the website” — that’s too vague to hire against. We landed on something specific:

That last part matters. If you can’t put a number on it before you post the job, you’re not ready to post the job. We drafted the posting together too — the brief you write is the filter you get. Vague postings attract vague proposals, and getting specific upfront is what made the proposal comparison useful later.

Connecting Claude to the browser

This is where it gets interesting.

I used a tool called Claude-in-Chrome that gives Claude access to a real Chrome browser session. Not a headless browser, not a screenshot-and-guess loop — actual browser automation in a real Chrome window. Claude can read pages, click buttons, fill forms, and navigate around like a person would.

I pointed it at my Upwork dashboard.

There was a snag: the Chrome extension only runs in one profile. My Upwork session was open in a different profile than the one the extension was connected to. It took a few tries to sort out. Not a dramatic failure — just the kind of thing you learn once and remember.

Once connected, Claude had full access to the Upwork hiring interface. No API integration. No OAuth flow. No developer portal. Just a browser and a tab.

Reviewing proposals

Six freelancers applied. Claude read every proposal — every cover letter, every portfolio link, every milestone breakdown — and gave me a structured comparison.

The evaluation criteria weren’t complicated, but they were specific:

Claude surfaced all of this in a clean table. I didn’t have to open six tabs and read six cover letters. The information was organized, compared, and ready for a decision.

The one who asked the right question

One stood out. Their proposal wasn’t the longest or the cheapest. But they asked a question that none of the other candidates thought to ask:

“Conservative like McKinsey or modern like Stripe?”

That’s a taste question, not a task question. It tells you the designer is already thinking about the feel of the work, not just the deliverables. Their milestone breakdown was also the most design-aware — they separated the style direction phase from the implementation phase, which meant there’d be a real checkpoint before anyone wrote code.

$570 total. Two milestones: $270 for style direction and wordmark, $300 for coded implementation.

Messaging and hiring

Claude drafted a response to the proposal. It answered the question — “Closer to Stripe than McKinsey” — shared the live site URL so they could see what they’d be working with, asked for their GitHub username for PR-based delivery, and established the communication norms.

After they replied with their GitHub handle, Claude navigated the Upwork hiring flow:

  1. Clicked “Hire” on the proposal
  2. Acknowledged Upwork’s payment safety policy
  3. Reviewed the offer form — contract title, work description, milestone structure
  4. Confirmed the milestones: $270 for Style Direction + Wordmark (due in 3 days), $300 for Coded Implementation (due 4 days later)
  5. Accepted Terms of Service
  6. Clicked through to the checkout page

I filled in the billing address. Claude clicked “Fund milestone & hire.”

Total for the first milestone escrow: $293.49. That’s $270 plus Upwork’s $13.50 marketplace fee and a $9.99 contract initiation fee. Offer sent.

What this actually demonstrates

The whole arc — scoping an engagement, writing a job posting, reviewing proposals, evaluating candidates, messaging a freelancer, hiring, and funding the first milestone — happened in a single conversation session. No context switching. No tab juggling. No “let me come back to this tomorrow.”

A few things stand out:

No API was needed.

Browser automation through a Chrome extension was sufficient for a complete hiring workflow. Upwork doesn’t have a public API for most of this. It doesn’t matter. The browser was the API. I don’t know that this holds over the long term, but it worked when we did this.

Claude is a surprisingly good hiring advisor.

Not because it has opinions about design — it doesn’t. But it’s excellent at reading six proposals, identifying patterns, spotting red flags, and organizing the comparison in a way that makes the decision obvious. The signal-to-noise ratio in freelancer proposals is brutal. Having something read them all carefully and surface what matters is genuinely useful.

The Claude-in-Chrome experience was wonky as hell.

I don’t think that this is ready for prime time. If i did anything to the browser, it seemed to confuse Claude. I did need to click into fields a time or two. Once I noticed how it was typing line by line and character by character, into some of the longer fields, I did copy/paste it directly because I was impatient. Overall though, this approach saved me time. I was able to do other things while Claude was summarizing feedback on the candidates. This part will get better.