Ongoing Maintenance · What I Offer
Ongoing Website Maintenance & Management
WordPress, Shopify, and React/Next.js production sites, maintained, monitored, and looked after under SLA.
Solo, South African, and technical to the metal. The opposite of a retainer that quietly bills you for plugin updates.
The short version
An SLA with TurboPress is a monthly agreement where a senior engineer becomes accountable for the health of your production website. Not a ticket queue, not a generic support desk. One person who knows your stack, your history, and what changed last Tuesday at 3am.
It is built for production site owners who care about uptime, performance and security. WordPress and WooCommerce operators sit at the centre of the practice. Shopify merchants and React / Next.js teams are covered under the same retainer framework. Technical founders who have taken things as far as they want to on their own, and small agencies that need a specialist sitting behind their delivery team, both fit too.
The day an agreement starts, three things change. You stop worrying about updates and vulnerability advisories. Your performance and security baselines get measured honestly. And you have a direct line to someone who can actually fix things, rather than escalate them.
Availability and the support promise
Every agreement runs on a 24/7 availability model. Production sites do not stop being production at 5pm, and neither does the monitoring that sits behind them. If something breaks at midnight, the alert reaches me, not an autoresponder.
Retainer clients get priority over everything else: ahead of prospects, ahead of new work, ahead of anyone who is not yet under agreement. That is what you are paying for. Not the cheapest hour, but the first hour when something actually matters.
Response commitments are written into your specific agreement, based on the tier and the nature of your site. The rule is simple. Urgent things (outages, active attacks, security incidents) are handled immediately. Everything else is handled on a cadence that fits the work, not an artificial SLA clock. The promise is realistic response, not a made-up countdown.
This is the foundation every section below sits on. Without serious availability, the rest is marketing copy.
What the retainer covers
Stacked narratively, not as a tick-box feature grid. Each area below is real monthly work, not a line item.
Migrations between providers
Moving a live site between hosts is one of those jobs where the difference between a careful engineer and a checklist follower shows up in your analytics the next morning. Migrations under this retainer cover the full move: replica builds on the destination, DNS staged with low TTLs ahead of time, search-and-replace on serialised data, media and uploads synced, and a cutover window chosen against your actual traffic curve.
The primary case is WordPress, moving between Hetzner, DigitalOcean, Cloudways, Kinsta or WP Engine (or off them, onto tuned infrastructure). The same discipline applies to Shopify store-to-store migrations, where theme, apps, Liquid customisations, metafields and DNS cutover all have to land together, and to React / Next.js moves between Vercel, Cloudflare and self-hosted Node, where env vars and secrets have to transfer cleanly alongside the code and the database.
The target is zero downtime and zero lost orders. Where that is not physically achievable, the plan is agreed in writing before we start. Post-cutover, I keep the old environment warm for a rollback window and watch error rates, 404s, and payment flows until everything has settled.
Server provisioning and infrastructure
For WordPress, I provision and manage servers on Hetzner, DigitalOcean, Cloudways and the usual managed WordPress hosts. For teams that want the price-to-performance of bare VPS, the typical stack is Docker-composed: Caddy as the edge, PHP-FPM tuned for your workload, MariaDB with sensible innodb settings, and Redis for object and page caching.
Shopify is SaaS, so "infrastructure" shifts meaning. There, the work is theme and app infrastructure: structured sections, Liquid organisation, app choice and app permissions, webhook integrity, and the admin and checkout hardening that a store owner cannot see from the dashboard. For React / Next.js, infrastructure runs across Vercel, Cloudflare and self-hosted Node: runtime configuration, caching strategy, ISR behaviour, and the glue between the front-end and whatever database or content API sits behind it.
If you are already on a managed host, that is fine. A good chunk of this work is knowing when to leave a host alone and when to move off it. The development practice sits behind this, because infrastructure is treated as engineering and not as something to shove at a support ticket.
Advanced security hardening
Beyond default plugins. Server-level hardening, WAF rules, fail2ban, application-level auth checks, secret rotation. What this looks like in practice depends on the stack: plugging a Redis instance that is quietly listening on a public interface, auditing a Shopify app’s scopes before it gets installed store-wide, or catching an env var that made it into a Git commit on a Next.js repo.
For WordPress specifically, that means SSH keys only and no root login, fail2ban tuned against the actual attack patterns your logs show, firewall rules that default-deny, Redis bound to localhost so it never leaks to the internet, and MariaDB users scoped to what they actually need. At the application level, WAF rules (Cloudflare or equivalent) tuned to your site, admin URLs obscured or IP-restricted, login rate-limits enforced server-side rather than via a plugin that can be bypassed, file-integrity monitoring, and a disciplined approach to user roles. XML-RPC and REST surfaces are audited, not just ignored.
Automated backups
Backups that have never been restored are not backups. Under this retainer, backups are scheduled, off-site, encrypted at rest, and tested on a rotation. On WordPress the typical toolchain uses restic against object storage, with S3 for the working set and Glacier for longer retention. Credentials and keys sit separate from the production environment so that a compromised server cannot wipe its own backup history.
Shopify cannot be backed up the way a self-hosted site can, so the work shifts to structured exports of store state: Admin API and GraphQL-Admin pulls of products, variants, metafields, customers and orders, plus CSV exports on a schedule, all kept outside the Shopify account that owns the store. For React / Next.js, backups cover the three surfaces that matter: repo snapshots (usually already via Git, but mirrored), database dumps tested against a clean restore, and media or asset storage kept on the same rotation.
Retention is set against your actual risk: hourly snapshots for databases on commerce sites, daily for content sites, and longer-tail archives for compliance. The important bit is the restore drill. I periodically pull a backup down to a clean environment, bring the site up, and confirm it actually works. That is the only way to know the backups are real.
Flagship capability
Data integrity and recovery
Most site owners discover their data was quietly corrupting for months at exactly the wrong moment, usually during a restore, or when an accounting report stops adding up. Data integrity is the discipline of catching that drift before it becomes a disaster: checksummed backups, foreign-key audits, orphaned-row checks, reference sanity passes, and media-to-database reconciliation.
On WordPress and WooCommerce that is orphaned rows on wp_posts, wp_postmeta and the Woo order tables, post-meta that no longer points at a real post, and media files that exist on disk but not in the database (or the other way round). On Shopify it is product, variant, metafield and customer state that has drifted between apps, CSV imports and manual admin edits. On React / Next.js it is the Postgres or MySQL behind the app, and the state of whichever content API (headless CMS, third-party commerce, media provider) is authoritative for the front-end.
Recovery is the other half. When something has already gone wrong (a bad migration, a broken plugin or app update, a compromised admin account, a database table truncated by mistake, a webhook that silently duplicated rows for a week), the retainer covers forensic recovery work: pulling the right backup, diffing against the live state, surgically restoring the rows that matter without blowing away the ones you want to keep, and writing up what happened so it does not happen twice.
This is one of the hardest parts of the job to do well, and the one most maintenance providers quietly avoid. It gets its own section here because it deserves one.
Custom plugin maintenance, security and updates
Most WordPress sites of any age carry at least one bespoke plugin, written by a previous developer, an agency, or the site owner themselves. These are the plugins that break first when WordPress or PHP is updated, and the ones nobody wants to touch. Under this retainer I keep custom plugins compatible with current WordPress, PHP and MySQL/MariaDB versions, rewrite deprecated function calls, patch known vulnerability classes (nonces, capability checks, SQL injection surfaces, unescaped output), and align them with current best practice.
The same attention extends to custom Shopify apps (private or custom public apps built on Remix or Node, with their own webhook handlers and scope requirements) and to React / Next.js modules and integrations, which drift the moment React, Next, Node or any pinned SDK moves a major version. Keeping this code current, rather than rewriting it in a panic two years later, is the whole point of the retainer.
If you have inherited code you are not sure about, I also offer a standalone plugin audit, a structured review of a specific plugin, app or module, or a full site’s plugin load, that either stands on its own or feeds into an ongoing retainer.
DDoS prevention and mitigation response
Proactively, this means sensible Cloudflare configuration (or equivalent): proxying the origin, firing origin-lock rules so that only the CDN can reach your server, rate-limits on expensive endpoints like search and WooCommerce cart, bot-fight policies tuned to your traffic, and challenge pages set against known-bad ASNs rather than turned up blindly to the point of hurting conversions. On React / Next.js the same model applies, with Cloudflare or Vercel edge rules fronting the app runtime.
Shopify sits behind its own edge, so the equivalent work is bot and checkout-abuse mitigation: carding protection, rate-limits on sensitive endpoints, blocking the script kiddies hammering gift-card lookups, and tightening storefront and admin access where it matters. Same posture, different levers.
Reactively, if you come under an active attack, mitigation is immediate: under-attack mode, tighter rate limits, custom rules against the specific signature, origin hardening, and clear communication while it is going on. Once the attack has stopped, the rules are walked back to a sane steady state rather than left on forever, quietly hurting real users.
SEO maintenance
Technical SEO health is part of the retainer: crawlability, indexation, structured data, canonical tags, sitemaps, internal linking, and Core Web Vitals as they affect ranking. Search Console is monitored rather than forgotten, and regressions are chased down the same week they appear. On Shopify that means collection templates, canonical handling across variants and tags, and product JSON-LD; on React / Next.js it means SSR or ISR rendering choices, sitemap routes, and canonicals that actually resolve.
Deeper content and keyword work, the kind that actually moves rankings, sits in the Growth tier, where it gets its own monthly hour bucket.
AI visibility: AEO and GEO
Answer Engine Optimisation and Generative Engine Optimisation make your brand and content legible to ChatGPT, Gemini, Perplexity, Claude and Google AI Overviews. Both are emerging disciplines, not solved ones. Under this retainer they are treated as real work: structured data that models can trust, content rewritten into quotable answer form, explicit entity definitions, and monitoring of which AI surfaces actually cite your site.
It is early, it is genuinely moving, and the honest framing is that: an emerging discipline, covered seriously rather than sold as a finished product. It is included in the Growth and Deluxe tiers.
Periodic full website audits
Retainers include scheduled full website audits at a cadence that fits the tier, typically every quarter. A structured review across performance, security, SEO, accessibility and infrastructure, written up in plain English with prioritised actions, so you always have a current picture of where the site stands and what is worth doing next.
Stacks supported
TurboPress is WordPress-first, but not WordPress-only. A lot of the interesting work these days sits at the boundary where WordPress meets something else, and most of the retainers that actually matter are mixed stacks. Three platforms are supported under the same retainer framework:
WordPress. Primary expertise. Traditional monolith sites, WooCommerce stores, and headless builds where a Next.js or React front-end talks to WordPress via the REST API or GraphQL. The WooCommerce, custom plugin, and headless build specifics sit on their own page. If you are considering a headless move, the development page goes deeper on how that looks in practice.
Shopify. Themes, custom Liquid sections, app selection and permissions, webhooks, admin and checkout hardening, and headless Shopify via Hydrogen or custom front-ends talking to the Storefront API. The Hydrogen builds, custom app maintenance, and Plus checkout specifics sit on their own page.
React / Next.js. Apps running on Vercel, on Cloudflare (Workers, Pages), or self-hosted on Node. SSR and ISR tuning, edge and runtime configuration, secrets and env var hygiene, and the database or content layer behind the app. The Vercel and Cloudflare deployment, middleware, and revalidation specifics sit on their own page.
Languages. Python, Ruby, PHP, JavaScript, TypeScript, HTML and CSS. Enough coverage to read, fix and extend whatever is actually sitting in your repository, rather than asking you to rewrite it first.
Data. SQL and relational database design. Schema review, index tuning, query profiling, and migrations that do not lose rows.
The tiers
Four plans. All prices are "from", because the final number depends on site complexity, traffic, and infrastructure. Every tier is priced in South African Rand and billed monthly.
| Plan | From | Technical | SEO / AEO / GEO | Website / Server Optimisation | Strategy & Reporting |
|---|---|---|---|---|---|
| Essentials | From R3,800/mo | 4 hrs | — | — | 2 hrs |
| Growth | From R7,600/mo | 4 hrs | 4 hrs | — | 2 hrs |
| Performance | From R7,600/mo | 4 hrs | — | 4 hrs | 2 hrs |
| Deluxe | From R12,350/mo | 4 hrs | 4 hrs | 4 hrs | 4 hrs |
Essentials
From R3,800/moTechnical cover for a single production site: updates, security, monitoring, and the small jobs that keep a site healthy.
- Technical
- 4 hrs
- SEO / AEO / GEO
- —
- Optimisation
- —
- Strategy
- 2 hrs
Growth
From R7,600/moEssentials plus dedicated time for search and AI visibility. Built for sites that need to keep winning new traffic.
- Technical
- 4 hrs
- SEO / AEO / GEO
- 4 hrs
- Optimisation
- —
- Strategy
- 2 hrs
Performance
From R7,600/moEssentials plus dedicated time for speed, server tuning and infrastructure work. Built for sites where latency directly costs money.
- Technical
- 4 hrs
- SEO / AEO / GEO
- —
- Optimisation
- 4 hrs
- Strategy
- 2 hrs
Deluxe
From R12,350/moFull coverage. Technical, visibility, optimisation and strategy hours every month, with priority on every lane.
- Technical
- 4 hrs
- SEO / AEO / GEO
- 4 hrs
- Optimisation
- 4 hrs
- Strategy
- 4 hrs
Growth and Performance sit at the same price point on purpose. They are a fork, not a ladder. Growth puts its extra hours into visibility work (SEO, AEO, GEO), and Performance puts them into speed and infrastructure. Choose the one that fits where your site is actually bottlenecked. Deluxe is the option when both lanes matter and neither can wait.
Hours reset monthly, with no roll-over, to keep the engagement focused. If you need more than your tier in a given month, we either flex up temporarily against an agreed rate or move you to the next tier, whichever is cheaper for you. Scope is deliberately flexible inside the retainer: your technical hours can become optimisation hours if that is what the site actually needs that month, within reason.
If none of this quite fits, a call is the right next step for anything custom.
How an engagement actually starts
Discovery call
A short call to understand the stack, the business behind the site, where the pain currently sits, and what success looks like three months in. No slide deck, no sales team. Just the person who will do the work, asking the questions that matter.
Baseline audit
Before anything is promised, the current state of the site is measured honestly. Performance, security posture, infrastructure, and SEO health are all captured so that "before" is a number, not a vibe. If the full website audit has already been commissioned, that becomes the baseline and the retainer picks up from there.
Onboarding
Access is provisioned under least-privilege principles, monitoring and alerting are wired up, backups are tested with a real restore, and the first week is spent on whatever will move the needle fastest. That is usually a mix of quick security wins and the most obvious performance regressions.
Ongoing cadence
From month two onwards, the engagement settles into a monthly rhythm under SLA: planned work against your tier's hour buckets, regular reporting, and unplanned response capacity for the things production sites always throw at you. Every month closes with a short written summary of what was done, what is queued, and what to think about next.
Ready to hand off the technical weight?
One call is enough to know whether this is the right fit. If it is not, I will tell you, and point you at someone who is.
Or read more about who you'd actually be working with.