A freelance web development project can be technically finished and still be commercially unfinished.
The site is live. The agreed features work. The client has approved the deliverables. Yet the developer still holds the hosting login, the analytics account is tied to the wrong email, nobody knows who renews the domain, the client expects future edits to be included, and a month later someone asks where the source files are.
None of those problems requires bad code. They come from an incomplete transfer of responsibility.
That is what project handoff is supposed to prevent.
A useful handoff is not a folder of files and a final email saying the project is complete. It is the controlled transition from developer-owned delivery work to client-owned operating responsibility. The client should know what they own, what they need access to, what they are responsible for next, what the developer remains responsible for, and how future work will be handled.
That makes handoff part of delivery, not an administrative task after delivery.
Handoff begins before launch
The worst time to discover an ownership problem is after the project is live.
If the developer created the domain account personally, registered a third-party service under an address the client cannot access, or deployed production from infrastructure only the developer controls, handoff has already become harder than necessary. The same is true when nobody established whether the client expects editable design files, repository access, deployment ownership, analytics administration, documentation, or training.
A clean handoff therefore starts with decisions made earlier in the project.
During onboarding and delivery, distinguish between infrastructure that belongs to the client and tooling that belongs to your own business. A client’s production domain, hosting or deployment account, billing relationship, analytics property, business email service, and other durable business assets should not accidentally become dependent on your personal account simply because that was convenient during setup.
That does not mean every client must administer every tool from day one. You may legitimately manage services on their behalf. The important point is that ownership, access, billing, and future responsibility are intentional rather than accidental.
This is one reason a proper client onboarding process matters. Onboarding establishes who can authorize decisions and provide access. Handoff closes that loop by confirming what the client now controls.
Do not confuse acceptance, launch, and handoff
These events are related, but they are not the same thing.
Acceptance answers whether the agreed deliverable meets the conditions that define completion. Launch changes the production state: the site or application becomes available in its intended environment. Handoff transfers the information, access, assets, and responsibilities the client needs after delivery.
Sometimes they happen close together. They should still remain conceptually separate.
A client can accept a staging build before launch. A site can launch while a final documentation session remains scheduled. A handoff can include post-launch verification without reopening the entire project for subjective revision.
Keeping these states distinct prevents a common failure: the project reaches launch, everyone emotionally treats it as finished, and the administrative transfer gets handled piecemeal over the following weeks.
The acceptance criteria established for the project should tell you when the contracted work is complete. Handoff should tell both parties what happens because that completion has now occurred.
Transfer access, not just credentials
A password list is not an ownership model.
For every system the client needs after the project, determine four things: who owns the account, who has administrative access, who pays for it, and who is expected to operate it.
Those answers may differ.
A client might own a hosting account while granting you administrator access for a support engagement. The client may own an analytics property while a marketing agency handles day-to-day reporting. A repository might remain in your organization during development and then move to the client’s organization at handoff. A third-party service might be billed directly to the client even though you configured it.
What matters is that the arrangement is visible.
Common handoff categories include the domain and DNS, hosting or deployment platform, source repository, CMS administration, database or backend service, transactional email provider, analytics and tag management, search-console access, third-party integrations, licensed assets, and any service whose continued operation affects the delivered system.
Do not email raw passwords around as the default transfer mechanism. Prefer the account’s own invitation, role, ownership-transfer, or secure credential-sharing mechanism where one exists. More importantly, verify the transfer. Sending an invitation is not the same as confirming that the client’s authorized person can actually sign in and reach the required controls.
A handoff record should be able to answer, later, “Who controls this?” without requiring either party to reconstruct the project from memory.
Give the client operational knowledge, not a technical autobiography
Documentation is useful when it helps the next responsible person operate the delivered system.
It becomes much less useful when it is a dump of everything the developer knows about the implementation.
The client usually does not need a narrative of every library choice, CSS decision, abandoned approach, or debugging episode. They need to know what they can safely change, what routine tasks they are expected to perform, what dependencies matter, where important controls live, and when a change should come back to a developer.
For a marketing website, that might mean how to publish or edit content, where form submissions go, how redirects are handled, what service sends transactional messages, how backups or deployments work, and which actions could break the site. For an application, the operational record may need to be deeper because there are more environments, services, data responsibilities, scheduled jobs, integrations, or deployment procedures.
Match the documentation to the obligation you sold and to the client’s likely operating role.
The test is not “Did I document the project?” It is “Can the person who now owns this responsibility make the next ordinary decision without guessing?”
That keeps documentation commercially useful rather than performative.
Record the production state you are handing over
A handoff should establish a known state.
Imagine the client contacts you six weeks later and says a form has stopped working. If nobody recorded which form provider was configured, where notifications were sent, which production environment was live, or whether another vendor changed DNS after launch, diagnosis begins with archaeology.
You do not need an enterprise configuration-management system for a five-page website. You do need enough information to distinguish the state you delivered from changes that happened later.
Record the important production facts at the level appropriate to the project: the production URL, deployment or hosting location, relevant repositories or source location, major external services, client-controlled administrative accounts, and any known operating dependency that would materially affect future support.
For projects where the distinction matters, record the release or commit that represents the accepted production version.
This is not bureaucracy for its own sake. It creates a boundary around the thing you actually delivered.
Without that boundary, future support conversations can quietly assume that every problem visible today belongs to the original project, even after the client, another developer, a plugin, an integration provider, or a platform change has altered the system.
Make client responsibilities explicit
A project can fail after handoff even though the delivered software was correct.
A domain expires. A card on file fails. A third-party subscription is cancelled. Nobody monitors the inbox receiving form leads. A staff member deletes content. API credentials are rotated without updating the application. An account invitation is never accepted and later expires.
The developer should not imply responsibility for business operations that were never part of the engagement.
At handoff, make ongoing client responsibilities visible. That may include renewals, account billing, content administration, user management, legal or compliance content supplied by the client, internal monitoring, backups where applicable, or maintaining access to third-party services.
Be precise about responsibilities you actually retained as well. If your agreement includes a defined warranty period for defects, say what that covers. If you sold maintenance, identify the service boundary. If no ongoing support was purchased, say how new requests will be evaluated.
Clarity here protects both sides. The client knows what not to neglect, and you avoid becoming the invisible owner of every operational detail simply because you built the system.
A warranty is not unlimited post-project support
The period immediately after launch creates an understandable expectation that the developer will address genuine defects in the delivered work.
That expectation should not turn every future request into free project continuation.
A defect is generally something the agreed deliverable was supposed to do but does not do under the agreed conditions. A new request changes the obligation. A support issue may involve a system that was working at handoff but later changed because of a third-party service, content edit, credential change, platform update, or another actor.
Those categories can require investigation before you know which one applies.
The commercial mistake is promising “support after launch” without defining what support means.
Instead, establish the post-handoff path before the first request arrives. Explain how the client should report a suspected defect, what information you need, what period or terms apply to corrections if your agreement includes them, and how work outside that obligation becomes a new project, support request, or recurring engagement.
This is the same principle behind good revision control: classify the request before deciding who owes what.
Training should reduce dependence, not create another project
Some projects require a client training session. That can be valuable, particularly when the client will maintain content, manage users, review submissions, or operate a custom workflow.
But training needs a boundary too.
The goal is to teach the client’s designated people the normal operating tasks included in the handoff. It is not to provide indefinite consulting on every possible use of the system.
A useful session follows actual responsibilities. Show the client how to perform the tasks they are expected to own. Let them perform important actions themselves where practical. Capture questions that reveal missing documentation. If the session exposes a new workflow, feature request, or administrative need that was never part of the project, record it separately rather than silently extending training until it becomes new implementation work.
Training also gives you a final test of the handoff. A process that only makes sense while you are driving the screen may not yet be transferable.
Do not use handoff to manufacture a retainer
A clean handoff should make the client less dependent on you for the work they are supposed to own.
That can feel uncomfortable if you are hoping to create recurring revenue. It should not.
A legitimate retainer exists because there is continuing work or responsibility worth paying for, not because the developer deliberately leaves the client unable to operate what they purchased.
After handoff, there may be real recurring needs: ongoing technical maintenance, a defined support commitment, conversion experiments, continuous development, monitoring, content implementation, integration management, or reserved development capacity. Those can support a recurring relationship when the need, workload, boundaries, and economics make sense.
But the decision should come from evidence about the client’s continuing job. The article on whether a client belongs on a retainer after launch covers that decision directly.
Good handoff and recurring revenue are not opposites. In fact, clean ownership makes a retainer easier to define because both parties can see what the client owns and what continuing responsibility they are specifically paying you to retain.
Close the commercial record, not only the technical work
Handoff is also the point where the project becomes evidence for running the business better.
Record the final commercial state. Was the agreed work accepted? Are required payments complete or correctly scheduled? Were all approved changes incorporated into the final scope record? What did the project actually consume in time and coordination? What assumptions turned out to be wrong? Is there legitimate proof you can capture? Is a referral request appropriate? Is there evidence of future work?
These questions should not all become client-facing paperwork. They belong in your own project closeout record.
This is where delivery feeds the next business decision.
If a project consistently required more stakeholder coordination than you priced, that should affect future estimates. If the client repeatedly needed a service you excluded, that may suggest an offer change. If the project produced a clear before-and-after business condition you can substantiate, it may become a useful case study. If no recurring need exists, do not invent one just because the project is ending.
A project that closes cleanly should leave you with more than an empty task board. It should leave evidence.
Define a handoff gate before you call the project closed
You do not need a ceremonial process. You need a completion condition.
For a typical freelance web project, the handoff gate should establish that the agreed deliverable has reached its acceptance state, the production state is known, required client assets and access have been transferred or verified, necessary operational documentation has been delivered, client responsibilities are understood, any agreed training has occurred, and the path for defects, support, and future work is clear.
The exact gate should change with the project. A custom application with multiple services and environments requires more operational transfer than a static marketing site. A client with an internal technical team may need repository and deployment documentation that a small-business owner would never use. A managed-service engagement may deliberately leave more operational responsibility with you.
The principle does not change: the project is not fully handed off until responsibility has somewhere explicit to go.
That is the difference between finishing the build and finishing the engagement.
The Freelance Developer Launch Kit treats handoff as part of a connected freelance operating system rather than an isolated checklist. It carries the same commercial record from scope and pricing through qualification, onboarding, delivery, acceptance, handoff, realized economics, proof, referrals, and legitimate future demand.
What needs work next?
Fix the project problem without guessing at the next business problem.
Start Here helps you diagnose the part of the freelance business that is actually holding you back and routes you to the smallest system that fits.

