A client recently asked me to finish a website that was originally built by another developer three or four years ago. The client says it is "99% done," but that doesn't tell me much until I inspect the code and requirements myself. The site is a fairly simple blog with around eight pages, but it currently depends on PHP 5.6 and an older CMS.
The work appears to include fixing the routing, updating the database because the backup is missing a user table, creating or repairing the admin login and password-reset flow, building several unfinished admin pages, and making other small usability improvements. Since the client is not very technical, they may also need help with future image and post updates.
I'm considering quoting $5,000 USD for the initial work, plus a $200 monthly maintenance and hosting retainer for one or two years. I'm also considering upgrading the application to PHP 8 or possibly migrating it to a more modern CMS. Does that sound fair for the scope and risk, or should I structure the price differently?
5 Answers
It may be worth comparing a PHP 8 upgrade with migrating the site to a maintained CMS. A migration could be easier to support long term, especially if the client mainly needs a blog and simple administration, but it still requires accounting for content migration, design recreation, user accounts, URLs, redirects, and testing. Don’t choose the platform until you’ve confirmed the current site’s requirements and what data can actually be recovered.
For a US freelancer in a medium- to low-cost area, $5,000 is not unreasonable if you’re effectively reverse-engineering and modernizing the application. It may even be low if the PHP upgrade exposes many compatibility problems or you end up migrating the site. Price the actual work and risk rather than the number of pages. A paid assessment followed by a fixed proposal would protect you from the “just a few small fixes” problem.
I would avoid bundling hosting and unlimited support into a cheap retainer. Have the client own and pay for the hosting account directly, then charge separately for setup, maintenance, content changes, and troubleshooting. If you offer a monthly plan, define exactly what it includes, such as backups, updates, monitoring, and a limited amount of support. Content edits should either have a separate hourly rate or a higher support tier.
Treat “99% complete” as a client estimate, not a technical fact. An inherited PHP 5.6 application with missing database pieces, unfinished administrative functionality, and unclear requirements could easily become a partial rebuild. Before giving a firm bid, get access to the code, database, deployment environment, and any existing documentation. Define the deliverables and exclusions in writing, and consider a paid discovery or audit first.
I’d be especially cautious if there has already been conflict or legal trouble with the previous developer. If the client can’t clearly explain what happened or provide clean ownership and access to the code, walking away may be safer than accepting an uncertain handoff.
Present the $5,000 as an initial project estimate subject to a technical review, rather than promising to finish an allegedly 99%-complete site for that amount. Break it into milestones and reserve the right to quote newly discovered work separately. If the client expects a much lower price because they think only one percent remains, that mismatch is a warning sign—not a reason to discount your time.

Tools can help with parts of a PHP upgrade, but they won’t eliminate testing, dependency issues, security review, or missing functionality. Moving from PHP 5.6 to PHP 8 should be treated as a real compatibility project, not an automatic conversion.