A sample handover documentation

This is the set that stays with the client after our work: here for a typical company website on WordPress, on shared hosting. Names, addresses and figures are examples; the layout and the scope are real. All of it lives in the client’s repository as Markdown and configuration written as code; passwords and keys never go into the repository, only into the client’s password manager.

The first conversation is free: 30 minutes online, no preparation and no commitment.

What the handover contains

  • Service card: what it is, what it runs on, who is responsible for what and what it costs.
  • Access register: who has access to what, how, and when it is reviewed.
  • Backups and restore: what, how often, where, and a restore procedure proven in a test.
  • Emergency procedures: symptoms, steps, escalation, contacts.
  • Updates and changes: rhythm, staging environment, change log.
  • Monitoring: what is checked and who gets the alerts.
  • Acceptance checklist: what must hold before we call the handover complete.

1. Service card

FieldValue (example)
ServiceCompany website example.com
PlatformWordPress 6.x, PHP 8.3, MariaDB 10.11; custom theme, 11 plugins (listed in plugins.md)
HostingShared hosting, account example-prod, server s12.hosting.example, PHP and database managed in the provider’s panel
Domains and DNSexample.com, www.example.com; registrar: provider A, renewal 14 March 2027; DNS: Cloudflare, zone example.com
CertificateLet’s Encrypt, renewed automatically; monitoring check 30 days before expiry
E-mailGoogle Workspace; MX, SPF, DKIM and DMARC records in DNS (export in dns/example.com.zone)
FormsContact and recruitment forms, sent through the e-mail provider’s SMTP to contact@example.com, copy to the CRM
IntegrationsVisit statistics (self-hosted, cookieless), newsletter, directions map, CRM
Business ownerName, role, contact
Technical ownerName on the client’s side; Kol.ski within the scope of the operations contract
Monthly costsHosting 12 €, domain 2 €, 2 premium plugins 8 €, off-site backups 2 €

2. Access register

Access is always personal, with two-factor authentication wherever the provider offers it. Shared accounts are removed on the day of the handover. The list is reviewed every quarter and on the day any collaboration ends.

ResourceWhoType of accessWhere it is keptLast review
Hosting panelTechnical owner, Kol.ski on-callPersonal accounts, 2FAClient’s password manager2026-10-01
SFTP and SSHKol.ski on-callPersonal keys, no passwordsKeys with their owners, public keys in access/keys.md2026-10-01
DatabaseApplication; administrative accountApplication account limited to its own databasewp-config.php on the server; password manager2026-10-01
WordPress2 administrators, 3 editorsWordPress roles, 2FA for administratorsClient’s password manager2026-10-01
Domain registrarBusiness owner onlyOwner’s account, 2FAClient’s password manager2026-10-01
DNSTechnical owner, Kol.ski on-callRoles: zone editing, no billing accessClient’s password manager2026-10-01
RepositoryTechnical owner, Kol.skiPersonal accounts, SSH keysClient’s repository provider2026-10-01
RevokedPrevious agency: 4 accounts, 1 SSH key, 1 FTP accountRemoved 2026-09-15Confirmation in access/log.md–

3. Backups and restore

What and how often

Database daily, wp-content files daily incremental, a full copy once a week, a configuration copy (wp-config.php, .htaccess, DNS zone export) after every change. Retention: 30 daily and 12 monthly copies.

Where

Off the hosting, in object storage in the client’s account, encrypted. A second copy at the hosting provider, treated as extra, never as the only one. A copy on the same server as the site is not a backup.

Targets

Acceptable data loss (RPO): 24 hours. Recovery time (RTO): 1 hour, confirmed by a test. Last restore test: 2026-10-07, on the staging environment, 25 minutes, result in backups/restore-tests.md.

Restore procedure

  1. Freeze changes: maintenance mode on production, a note to the business owner.
  2. Fetch the copy from object storage (latest or the one specified) and verify the checksums.
  3. Restore the database into a new database and the files into a temporary directory; compare with production.
  4. Swap the directory and point wp-config.php at the new database; clear the caches.
  5. Run the checklist from section 5: home page, subpages, login, form, e-mail, certificate.
  6. Record in backups/restore-tests.md: date, copy, duration, who, result. Lift maintenance mode.

4. Emergency procedures

Every procedure has symptoms, steps and escalation. A critical failure is a site down, a break-in or a data leak; it is reported by phone, around the clock, with a response within 15 minutes. Everything else: e-mail or form between 8:00 and 20:00, response within an hour.

The site does not respond

Check the hosting status page and monitoring: server, DNS or certificate. Server: a ticket to the provider with the account number, meanwhile a stand-in page from the cache. DNS or certificate: the procedure below. No cause found after 30 minutes: restore from backup on the standby hosting.

Break-in or suspicious change

Cut off: change administrative passwords, log out all sessions, maintenance mode. Preserve: a copy of the current state for analysis, never overwriting the regular backups. Restore from the last clean copy, update everything, compare the files with the repository. Notify the business owner; where personal data is involved, assess a report to the data protection authority within 72 hours.

Expiring certificate or domain

Monitoring alerts 30 days ahead. Certificate: force the renewal in the hosting panel, check the chain. Domain: renewal by the business owner at the registrar, contact in the service card; after expiry there is the provider’s grace period, do not rely on it.

Forms are not delivered

Send a test submission, check the plugin’s sending log and the SMTP mailbox. Most often: a changed SPF or DKIM record, an expired app password, the e-mail provider’s limit. Until fixed, redirect the form to a backup mailbox and tell the business owner about the gap in submissions.

A failure after an update

Every update has a copy from before. Roll the plugin or theme back to the previous version from the copy, disable the cache, run the checklist. Report the bug to the plugin author, note it in the change log, repeat the update after the fix on staging.

Contacts and escalation

WhenWhoHow
Critical failureKol.ski on-callPhone, around the clock; response within 15 minutes
Other reportsKol.skiE-mail or form, 8:00–20:00; response within an hour
Server-side problemHosting providerHelp desk, account number example-prod; provider SLA 4 hours
DomainRegistrarBusiness owner’s account
Business decisions, communication with customersBusiness ownerPhone from the service card

5. Updates and changes

  • WordPress core, plugins and theme: reviewed weekly; updates go to staging first (a same-day copy of production), then to production in a window, with a copy taken before.
  • Security updates: within 24 hours of release, outside the weekly rhythm.
  • Every plugin has, in plugins.md, the reason it exists and the person responsible for it. Plugins without a reason were removed at the handover: 7 of 18.
  • Change log changelog.md: date, what, who, result, how to undo. No entry, no change.
  • Checklist after every change: home page, 3 subpages chosen by the client, login, form with confirmation, e-mail, certificate, response time.

6. Monitoring

WhatHow oftenAlert to
Site availability from two locationsEvery minuteKol.ski on-call; after 5 minutes also the technical owner
Certificate and domain validityDailyKol.ski on-call 30, 14 and 7 days before expiry
Changes to core and plugin files outside an updateDailyKol.ski on-call
Administrative logins from new locationsContinuouslyKol.ski on-call and the technical owner
Backup completion and sizeDailyKol.ski on-call when a copy failed or its size deviates
Form deliverabilityWeekly, a test submissionKol.ski on-call

7. Acceptance checklist

  • All access recovered, personal, with 2FA; the previous contractor’s accounts removed and confirmed.
  • A backup taken off the hosting and restored on staging; recovery time recorded.
  • Monitoring running; a test alert reached the on-call and the technical owner.
  • Documentation in the client’s repository, secrets in the client’s password manager, nothing in the repository.
  • Emergency procedures rehearsed with a person on the client’s side: one restore, one update rollback.
  • Monthly costs and renewal dates known to the business owner.
  • The date of the next access review and restore test in the calendar.

Handing over your site

Tell us what your site runs on and what is missing from this set: access, backups, procedures, documentation. We will propose a time.

The first conversation is free: 30 minutes online, no preparation and no commitment.

Write to us

Your message is encrypted in your browser — nobody but us can read it on the way. If you like, you can also encrypt the text with our PGP key and paste the result.

Enter at least two characters.
Check the email address.
Check the phone number.

Give an email address, a phone number, or both.

Enter an email address or a phone number.
Do not enter sensitive data (such as health details), passwords or other people’s data.
Write between 10 and 5000 characters.
We cannot accept a message without this consent.