Bought a theme, what now?
You have downloaded a design. The ZIP holds pages, tokens, fonts, images and a guide. A few steps remain before it becomes a website that is online, belongs to the client and still runs in two years. Most are quick. A few decide how much work the site will cost you later.
Here they are in the order you need them.
1. Choose an export target: static or WordPress
This first decision shapes almost everything after it.
Static (Astro or plain HTML) means the site is built once and then only files sit on the server. No PHP, no database, no plugins asking for updates at night. For a service page, landing page or funnel with a form, this is almost always the better choice.
WordPress makes sense if the client already knows it, several people publish posts, or a specific plugin is genuinely needed. Then an update plan comes with it, see step 10.
Rule of thumb: if content changes less than once a month, go static. The export commands are in the package README.md.
2. Replace the content
Before you publish anything, replace all sample data: names, addresses, prices, opening hours, photos. Placeholders are marked. Read DESIGN.md first; it lists the building blocks and what they are for.
Three things people forget:
- Alt text for every new image. One sentence describing what is shown. Purely decorative images get empty alt text.
- Heading order. Don’t skip levels, one H1 per page.
- Image rights. Only reuse photos from the client’s old site if you know where they came from. This is the most common trap in migrations.
A simple rule for content structure: five or six section types the client understands beat twenty one-offs nobody touches.
3. Does the client need a CMS?
Honestly: often not. Many small businesses never log in, even when they get an editor. They send an email with the change. You don’t need a CMS for that, only a reliable promise of how fast changes go live.
A CMS pays off when someone publishes regularly without you: blog, case studies, job ads, events. Then the question is which one.
| Type | Examples | Where it runs | For editors | Ongoing effort | Lock-in |
|---|---|---|---|---|---|
| No CMS | Markdown in the repo | nowhere extra | n/a, agency edits | very low | none |
| Git-based | Sveltia CMS, Decap CMS, Keystatic | browser UI, content as files in the repo | fields, not a page builder; good for text and images | low, no database | very low, files stay yours |
| Self-hosted with database | Payload, Directus | your own server with a database | powerful, better for teams | high: updates, backups, monitoring per instance | medium to high |
| SaaS | Storyblok, Contentful | at the vendor | very comfortable, visual editing | low for you, but a licence | medium, tied to an API |
What to look out for:
- Git host: According to its docs, Keystatic works online only with GitHub repositories. Decap supports GitHub, GitLab, Gitea, Forgejo, Bitbucket and Azure. Sveltia CMS positions itself as the successor to Netlify/Decap CMS and supports GitHub, GitLab and Gitea/Forgejo. If your repo lives on your own Gitea or Forgejo, Keystatic is out for online editing.
- Licence and telemetry: Directus is free for organisations under USD 5M revenue and under 50 employees. According to its pricing page, the telemetry opt-out is an Enterprise feature. If you promise clients data minimisation, weigh that.
- Framework: Payload is technically strong but built on Next.js. With Astro you work against the grain.
- EU location: Storyblok is based in Austria. For any SaaS: sign a data processing agreement, check the region, and put the licence in the client’s name, not yours.
- Accessibility: once the client edits, they can break it. Make alt text a required field and don’t let editors pick heading levels freely.
More in the guide Headless CMS for small websites.
4. Hosting in the EU
A static site needs little: web space with a TLS certificate, ideally with SFTP or Git deployment. Two German examples (list prices, checked 31 Oct 2026):
- all-inkl Privat: EUR 4.95 per month incl. VAT, three domains included.
- Hetzner Webhosting S: EUR 1.60 per month net, domain extra.
More important than price: the contract is in the client’s name. Then the site stays online even if you as the agency drop out, and there is no fight when they leave. You get access, the client stays the owner.
Your own server with Coolify or similar is worth it only once you run several sites in a standardised way and have backups, monitoring and updates firmly planned.
5. Domain and DNS
- The domain belongs to the client, not the agency. If a former agency registered it, sort out the transfer (auth code) before the project starts.
- A/AAAA record to the host; pick one main address and redirect
wwwor the bare domain to it. - Don’t touch mail records (MX, SPF, DKIM) unless you know what they do. A wrong MX record takes the business mailbox down.
- On a relaunch: list the old URLs and set up 301 redirects, or you lose search traffic.
6. Deployment
Static means: build locally or in CI, upload the dist/ folder. Aim for a path that works without you:
- A Git repository with a build step that deploys automatically via SFTP/FTPS.
- A documented fallback: build locally, upload the folder via FTPS.
- Forms go to your own route or a small script on the client’s hosting, with a honeypot instead of a captcha service. Avoid third-country form services where you can.
7. Legal pages
German-language designs include scaffolds for imprint, privacy policy and accessibility statement. They are templates with the usual required fields, not legal advice.
- Imprint (Germany: § 5 DDG).
- Privacy policy: host, form, analytics, fonts. With zero third-party requests out of the box, the list is short. Every embedded map, video or chat widget makes it longer.
- Cookie banner: under § 25 TDDDG (Germany, based on the ePrivacy Directive) consent is only needed for device access that is not strictly necessary. Without tracking cookies and external embeds, you need no banner.
- The operator is responsible for these texts. Have them written or checked by a legal-text service or a lawyer.
8. Accessibility statement
The European Accessibility Act has applied since 28 June 2025 to certain consumer services, mainly shops and online booking. In Germany (BFSG), microenterprises (fewer than 10 employees and at most EUR 2M turnover or balance sheet) are exempt for services. A plain information site for a local trade business usually falls outside it.
You can still use the template in the package. Say honestly what was tested, how, and where people can report barriers. Don’t write “guaranteed compliant”. Whether the site stays accessible also depends on what the client adds later.
9. Check before going live
The design was checked before sale. Your content wasn’t. So after filling it in:
- Accessibility: an automated test (axe or WAVE), plus by hand: tab through every page, visible focus, zoom to 200 %, form fields with proper labels.
- Performance: PageSpeed Insights or Lighthouse, mobile. Google’s thresholds: LCP at most 2.5 seconds, INP at most 200 milliseconds, CLS at most 0.1. Only about half of all websites pass on mobile, so it’s worth a look. The most common reason for bad scores after filling in content: oversized photos.
- Links and form: click every link once, submit the form for real once.
- Third-party requests: check the browser’s network tab for anything loaded from foreign servers. Out of the box it should be zero.
For context: automated tests find accessibility errors on 95.9 % of the top one million home pages (WebAIM Million 2026). A checked design puts you far ahead, but one image without alt text throws the lead away.
10. Handover to the client
The package has a template for the end client under UEBERGABE/, without any mention of the design vendor. Fill in the placeholders. It should cover:
- Address, page list, where the source code is.
- How to edit text and images, matching the chosen technology.
- Hosting, domain, mailboxes: provider and contract holder.
- Where credentials are kept (password manager, never in the same document and never by email).
- Backups: how often, where, when a restore was last tested.
- What to do in an outage and who can be reached.
11. Maintenance plan
A website isn’t finished at launch. Decide who does what and write it into the handover:
| How often | What |
|---|---|
| on security advisories | Check whether your stack is affected (PHP version at the host, Node version in the build, CMS). For WordPress: update core, theme and plugins. |
| monthly | Site reachable, TLS certificate valid, form arrives, backup present |
| quarterly | Review content: opening hours, prices, contacts. Update build dependencies and rebuild. |
| yearly | Re-measure accessibility and speed, check domain renewal, try one restore from backup |
For a static site this is little work. For WordPress or a CMS with its own database it’s more, and it belongs in the quote rather than happening on the side. Why this matters more now: Operations matter more than design.
If you would rather not do these steps yourself: Heidrich Digital, the web agency behind Kiekkist, sets up a purchased design and runs the site afterwards, at a fixed price after a short call. What is and is not included is on Setup and operation.
Sources
- WebAIM Million 2026: https://webaim.org/projects/million/
- HTTP Archive, Web Almanac 2025, Performance: https://almanac.httparchive.org/en/2025/performance
- web.dev, Web Vitals: https://web.dev/articles/vitals
- BFSG § 2: https://www.gesetze-im-internet.de/bfsg/__2.html
- DDG § 5: https://www.gesetze-im-internet.de/ddg/__5.html
- TDDDG § 25: https://www.gesetze-im-internet.de/ttdsg/__25.html
- Keystatic, GitHub mode: https://keystatic.com/docs/github-mode
- Decap CMS, Backends: https://decapcms.org/docs/backends-overview/
- Sveltia CMS, Backends: https://sveltiacms.app/en/docs/backends
- Directus, pricing and licence: https://directus.com/pricing
- Payload CMS: https://payloadcms.com
- Storyblok: https://www.storyblok.com
- Contentful, pricing: https://www.contentful.com/pricing/
- all-inkl.com, web hosting (price checked 31 Oct 2026): https://all-inkl.com/webhosting/uebersicht/
- Hetzner, web hosting (price checked 31 Oct 2026): https://www.hetzner.com/webhosting