Crafting a Custom Visual Identity
Every site starts with a specific identity in mind. For Skin Perfection, the goal was a clean, premium aesthetic that reflected their brand's commitment to quality. Instead of reaching for a heavy, off-the-shelf theme, I built a lean child theme tailored to their needs.
Skin Perfection works with natural products from brands like Chi, Lakshimi, and Botanical Beauty. Most beauty templates felt too commercial for a niche, organic salon. We chose a Warm Editorial aesthetic, an organic minimalist style using warm creams and sage greens. The goal was an airy, uncluttered grid that prioritizes content and natural imagery over complex UI elements.
To implement this, I built a custom Storefront child theme using Sass and Webpack. This modular frontend architecture allowed us to maintain a lightweight footprint while utilizing PHP hooks to inject bespoke layouts directly into the WooCommerce core.
palette Design & Styling Decisions
- Warm Palette: Low-contrast creams and grounding sage greens for a holistic, calming atmosphere.
- Editorial Typography: Elegant serif headings paired with clean, functional sans-serif body text.
- Airy Grid: Uncluttered layouts with flat UI elements that provide generous room for content to breathe.
- Tech Focus: A modern build pipeline using Webpack for bundling and Sass for maintainable, modular stylesheets.
WordPress as Code
I migrated the site to Bedrock, which treats the entire WordPress installation as a declarative set of dependencies. By leveraging WP Packages, the WordPress core, plugins, and themes are managed as standard Composer dependencies. This establishes a single source of truth and promotes an immutable architecture that prevents "dashboard drift," where manual production changes silently break environment parity.
The lock-file ensures deterministic builds — every environment runs the exact same version of every plugin, down to the specific commit. That gives you a genuine audit trail: at any point you can see exactly which versions were deployed where, and trace any change back to its commit. This setup also lets Dependabot automatically monitor for security updates and propose version upgrades via pull requests, instead of updates happening invisibly through a dashboard.
Slashing Costs and Infrastructure Efficiency
Initially, the website was hosted on a traditional shared PHP-hosting environment where costs were growing and performance was declining. While I considered using Docker or Kubernetes to leverage my existing expertise, the resource overhead didn't justify the cost for a single-site setup. Instead, I paired the Bedrock setup with Trellis (also by Roots.io) to create a low-overhead, high-efficiency pipeline that bridges the gap between development and production.
Trellis: Lean Infrastructure
For provisioning and deployment, I chose Trellis. Unlike generic container orchestration like Kubernetes — which carries meaningful resource overhead for its management plane — Trellis is built from the ground up exclusively for WordPress. It provisions a highly optimized LEMP stack based on Ansible that runs beautifully on a basic €5/month Hetzner VPS.
Deploys use an atomic symlink strategy: a new release is fully built out, then the webroot symlink flips to it in one step, giving native zero-downtime updates. Rollback works the same way in reverse — pointing the symlink back at the previous release — so recovering from a bad deploy is instant, with no rebuild and no hunting for old plugin versions.
Optimizing WordPress
Even with an optimized stack like Trellis, WordPress has its limits—especially on a small virtual server. Initially, the default configuration was a bit too conservative for the Hetzner hardware. The server had plenty of unused RAM, while the CPU was being pushed to its limits during traffic spikes. To better utilize these resources, I shifted toward a memory-over-CPU strategy, tuning the execution environment to handle heavy backend tasks like complex order processing without suffocating under high concurrency.
settings_suggest Optimized Process Pooling
Balanced the concurrency model to match the server's CPU profile, reducing overhead and improving stability during high-traffic events.
memory Aggressive Bytecode Caching
Expanded the memory footprint for compiled scripts, ensuring the entire application core and all plugins stay resident in RAM for near-instant execution.
Responding to Bot Traffic
Optimization only goes so far if the server is overwhelmed by aggressive crawler traffic. Recently, I observed an intense surge in activity from AI crawlers. Meta, in particular, was generating over 11,000 requests in a single morning. Likely attempting to catch up with Google and Bing, the Meta bots seemed to get caught in a loop, scanning every possible WooCommerce product filter combination and creating a localized DoS effect that overwhelmed the small Hetzner instance.
I responded by integrating Cloudflare as a proxy layer, implementing custom firewall rules, regional restrictions, and granular rate limiting. This setup ensures that origin resources are reserved for genuine customers, filtering out aggressive bots at the edge before they ever touch the application layer.
Monitoring & Reliability
Security is only half the battle. While Cloudflare handles the traffic at the edge, I still need to know if the origin server is actually healthy. To ensure high availability and catch issues independently of the edge network, I rely on a separate, self-hosted monitoring stack using Uptime Kuma.
analytics Uptime Monitoring
Deployed in my homelab, Uptime Kuma pings the site every minute from my home network, sending instant alerts if any latency or downtime is detected, ensuring visibility even when the edge network is stable.
Final Thoughts
The Skin Perfection project shows the value of right-sizing infrastructure to the actual needs of the project. By moving to a declarative, Ansible-managed infrastructure on Hetzner, we improved stability and lowered costs. By layering Cloudflare's security on top of our custom theme, we built a site that is both functional and resilient against aggressive web crawlers.