Scope first, then a number, then code.
You send what you need and when you need it. You get back a written scope: what ships, what does not, and what it costs. No hourly meter, no open-ended retainer.
Work goes out behind a gate - a machine definition of done that measures the pages in a real browser before anything reaches you. Performance and accessibility are checks that can fail the build, not promises in a proposal.
You own the code and the accounts it runs on. Hosting is yours from day one, so nothing is hostage to me staying interested.