Hamza Yerrou
Hamza Yerrou
Software Engineer
Index/Writing/Freelance
2026 · 01 · 30 · 6 min read

How I quote a freelance project in 48 hours

The intake form, the back-of-the-envelope math, and the boring email template that closes more clients than my portfolio does.

Most freelancers I know take one of two approaches to quoting. Either they send a number on gut feel right away, or they disappear for a week writing a proposal document before committing to anything.

Both are wrong. Fast gut-feel quotes lose you money. Slow quotes lose you the client.

My target: 48 hours from first contact to a written fixed price.

Before the call

Every inbound enquiry gets redirected to a short form. Four questions:

  1. What are you building? One paragraph, not a spec.
  2. What does success look like in 30 days?
  3. Do you have designs, or is that part of the work?
  4. What's your rough budget range?

The budget question is the most important one. It filters out projects that could never be viable even if the work was perfect, and it filters out people who want to "pick your brain" rather than actually hire someone. Serious clients answer it. People who just want a quick chat don't fill out forms.

Breaking it down

After reading the intake, I break the project into deliverables, not tasks. Things I can point to and say: this exists and it works.

For a typical SaaS project that might look like:

  • Auth flow (login, signup, password reset, session management)
  • Core dashboard views
  • Settings and account management
  • API integrations
  • Deployment setup and CI
  • Handoff documentation

Six things. Each one gets a day count. I'm honest about uncertainty and I always round up, never down.

The math

Total days, plus 30%. Not padding. Honest accounting for the things that always happen: the API that turns out to be undocumented, the design revision mid-build, the feedback cycle that takes longer than expected.

Multiply by my day rate. Send one number.

Not a range. Ranges invite negotiation on the price. If the client needs a lower number, we cut scope, not the rate. The moment you discount your rate, you've established what your real rate is, and it becomes the default for every future conversation with that client.

The quote email

The quote email does one thing: confirm I understood what they described, and make saying yes easy.

Structure:

  • What I heard the project to be, in my words — this is the most important part
  • The deliverables list, short and specific
  • Total price and payment terms (50% up front, 50% on delivery)
  • Start date
  • One clear next step: "reply to confirm the scope looks right and I'll send the contract"

The goal of the quote email is to make saying yes the path of least resistance.

No long "why I'm the right person" sections. The brief already did that work. No line-item breakdowns that invite negotiation on individual hours. One number, one list of what it covers.

The things I've stopped doing

Quoting before I know the design situation. "We'll sort designs later" means I'm inheriting risk I can't price. The design stage is almost always the biggest unknown in a front-end project.

Sending ranges. "Between $4,000 and $7,000" sounds flexible but it just anchors the conversation to $4,000.

Discounting the rate for interesting work. I've done this. It feels generous. It isn't. It sets a precedent, and the interesting project usually turns into a normal project two weeks in anyway.

Writing the quote before the call. The call is where I find out the things the form didn't cover. The thing described as "a small fix" is often three weeks of work. The form is a filter. The call is the actual scoping.

What works

Fast turnaround signals that you're organised, that you understood the brief, and that you take the work seriously. A quote that arrives in 48 hours beats a more detailed quote that arrives in two weeks, almost every time.

For the ChainsAtlas engagement: intake form on Tuesday, 30-minute call Wednesday morning, quote email by Thursday afternoon. They replied Friday. Contract signed Monday. Started the week after. That speed is part of what clients are paying for.

← Older
Designing AI chat UIs that don't lie about what's happening
Newer →
Three years of Next.js: what I'd start with today