Chris Kelechukwu Photography
BespokeForge's own photography brand, built to photograph weddings and portraits and engineered to stay fast under a heavy portfolio.
Built for the moments worth keeping
Chris Kelechukwu Photography is my own brand, and it is built around something I love: documenting people at their happiest and crafting those moments into images they keep for life. Weddings, portraits, beauty, the occasions worth remembering. The work is about authenticity and storytelling, telling your story in its truest form.
The site has two jobs: show the work at full visual quality, and turn a browser into a booked session. It had to feel warm and unhurried and lead with the photographs, so I built it from scratch, properly engineered underneath, to do exactly that and to stay fast and simple for me to run.
Brand-led, and editable without code
The site is WordPress on a lightweight Hello Elementor base, built with Elementor Pro so I can edit and grow it without touching code. It is organised around the journey: a hero-led home, dedicated Wedding, Beauty and Portrait pages, a portfolio of around ninety curated images with lightbox galleries, a clear booking path, and a Musings blog for editorial reach. Rank Math handles the SEO, schema, and sitemaps, so search engines read it as a local Abuja photography business.
A hardened, self-managed stack
I run it on my own server, not shared hosting, so I control the whole performance and security path. It sits on Hetzner Cloud in Helsinki, on Ubuntu 24.04 with CloudPanel, behind Cloudflare with HTTP/3, served by nginx with a Varnish full-page cache, PHP 8.3, Redis, and MariaDB. The origin only accepts traffic from Cloudflare, SSH is key-only with fail2ban, and Wordfence, Patchstack and two-factor authentication harden the application. WPvivid backups plus server-side snapshots keep it recoverable.
It runs and captures work on its own
Every photo I upload is capped to 1200px and converted to WebP on the server with Imagick automatically, no external service or per-image cost, so I drop in a full-resolution shot and the site serves a fast, web-ready version. Thirty-seven Elementor Pro forms each save the enquiry to the database and email the studio, so nothing is lost. The page cache purges itself on publish, the CSS and JavaScript are aggregated automatically, and an n8n engine runs on the same box, ready to route enquiries into a CRM or calendar later.
An owned enquiry pipeline
The site is also a data system. MariaDB and Redis run the content and caching, the portfolio is structured in SCF, and the media library is 696 optimised WebP assets at around 30 MB in total. The real asset is the enquiry pipeline: 198 client enquiries captured to date as first-party data, every one also delivered to the inbox, owned outright and exportable into any future CRM.
Fast under a heavy portfolio
An image-heavy portfolio is the hardest kind of site to keep fast, so I tuned the delivery end to end: made the full-page cache actually cache, preloaded the hero at high priority, re-encoded every photo to WebP in place, and streamlined the CSS and JavaScript. On a deliberately harsh mobile profile (Slow 4G, 4x CPU throttle), Largest Contentful Paint dropped from 5.0s to 2.8s, server response fell 71% to under half a second, and the hero image went from 886KB to 78KB. The image library shrank 80%, from 152MB to 30MB, with no visible loss of quality. Real devices and networks are considerably faster.
See it in production.
By the numbers.
Guides from this engagement.
The technical detail behind this work, written up in full.
Let's talk about your systems.
No pitch. No pressure. You describe the problem. BespokeForge tells you what is actually causing it, whether it is fixable, and whether BespokeForge is the right fit to fix it and stay to operate it.
45 minutes. Google Meet. Straight answers.
You receive a calendar link. Pick a slot that suits you, no chasing.
Bring a description of the problem. No deck needed. Notes on a napkin is fine.
You leave knowing what's actually broken and whether BespokeForge is the right fit to fix it.