The Stack I Run on My Own Two Blogs

Counting the hosting, there are eleven things running on my two blogs. That is the entire list. It is shorter than most posts with this title, and the reason is simple: I am only writing down what is installed and what I open in a normal week, on two sites I pay for myself. This one, and an English-language blog about hosting that I also run. Nothing here was copied from somebody else’s ranking.

Both blogs sit on the same Hostinger shared plan, along with one more site of mine, and that single decision shapes most of what follows. Here is the inventory first, then the pieces that are worth explaining, then the ones I took out and why.

The whole inventory

PieceWhat it does hereWhat it costs me
Hostinger shared hostingRuns both WordPress installs and one more site on one planSee the pricing note below
WordPress (self-hosted)The CMS for both blogsFree
A block theme from the Hostinger installHeader, footer, post and archive templatesIncluded
All in One SEO (free tier)Title tags, meta descriptions, XML sitemapFree tier
Google Site KitPulls Search Console, Analytics and AdSense into wp-adminFree
Google Search ConsoleThe only traffic data I trustFree
Claude and Claude CodeBriefs, drafts, rewrites, and scripts against the WordPress REST APIPaid plan
A small image script of mineOne cover per post, drawn from code: no stock photo, no image generator, never reusedFree
PinterestThe only social channel I work on purposeFree
curl and a shell script I wroteMy own timing and header measurementsFree
The block editorWriting and pasting finished postsIncluded
Everything running on this blog and my hosting blog, as of 20 September 2026.

No rank tracker. No content optimiser. No newsletter platform. No scheduling tool. I will come back to what happened to the ones that used to be here.

The hosting is part of the stack, and mine has no page cache

Bloggers tend to treat hosting as a thing you buy once and forget. On 20 September 2026 I measured my own sites properly for the first time, and the most useful thing I found was something I had not set up at all: neither blog returns a page-cache header. Every request goes to PHP 8.3.33 on LiteSpeed and builds the page from scratch. That is not Hostinger refusing to cache; it is me never having installed a caching plugin on either site.

Timings for all five of my sites, and why five requests prove less than they seem to, are in my notes on running a one-person web business. The number that matters for a blogger is the spread: this blog swung between 0.53 s and 1.50 s across five requests to the same page. If you only ever look at an average, you never notice that.

The pricing, since hosting is the one line on the inventory with a number I can stand behind: Hostinger’s shared plans start at $2.99/month on a 48-month term and renew at $10.99/month on the entry tier, per Hostinger’s web hosting page, checked 20 September 2026. Four years paid up front, then a 3.7x jump. That renewal figure is the one worth writing on a sticky note, and it is the one most round-ups leave out.

WordPress, and the two plugins I did not delete

All in One SEO is here for two jobs: a working XML sitemap and a field for a hand-written meta description on every post. It does both. My complaint is specific: when I let it generate descriptions automatically, nineteen of my posts ended up with headings glued together with no space between them, the sort of string that reads like a database error. Automatic metadata is one of the things Google’s own guidance on AI-assisted content tells you to check, and it was right. I now write every description by hand, in the editor, before publishing.

Site Kit puts Search Console and Analytics numbers inside wp-admin so I am not logging into three panels to answer one question. Worth knowing before you install it: it also injects the AdSense snippet into your head for you. That is convenient, and it means the code is on your site whether or not the site is approved. Mine is not approved yet, and pretending otherwise is how this blog got into trouble in the first place.

I have no cookie or consent plugin on this site. Consent messaging for ads is handled outside WordPress, in AdSense’s own privacy and messaging panel, which keeps one more plugin off the stack. If you are setting a blog up from zero, the walkthrough of how I built this one covers the order I would do it in.

Claude, and the job that actually earns its keep

Drafting is the obvious use and the least valuable one. The thing that changed how I work is running Claude Code against the WordPress REST API. For this site’s rebuild I exported all 100 posts with their metadata, categories and featured images into a single file, classified every one of them as keep, merge or unpublish, and generated the redirect list from the merge decisions. Doing that by hand in wp-admin would have taken days and I would have made mistakes in the boring middle of it.

The post you are reading is part of that same job, which is as close to a real demonstration as I can give you.

The failure mode is worth stating plainly, because it is the one that damaged this blog: a language model will produce a confident, specific, wrong number. Ask it what a tool costs and it will tell you, in dollars, with a plan name, and it will sound exactly as certain as when it is right. My rule now is that no figure goes into a post unless it is in my own notes file with a URL and the date I opened that URL. That rule alone cut more words from these rewrites than any editing pass.

It is the one paid AI tool on the list: Claude Code comes with Claude’s paid plans, not the free one (Claude pricing, checked 20 September 2026). I am not quoting my own invoice, because which plan I am on matters less than whether the work fits in it.

Images: the part I still have not solved

Every post needs an image and I do not have a photograph for most topics. What fills the slot is a cover drawn by a small script of mine, different for every post: an abstract pattern, not a stock photo and not a picture pretending to show something real. I keep two rules. Each post gets its own image, never reused across the site. And nothing stands in for a screenshot: a picture of a dashboard, an invoice or a panel is one I took myself, with anything private covered, or it is not there. If you would rather use an AI image generator, the licence terms that actually matter are in my notes on image generators for blog work.

Alt text is not a stack item, it is a habit, and mine was terrible. When I audited this site, 211 of 212 media files had no alt text at all. I write it by hand now, describing the image rather than restating the keyword.

Pinterest, done by hand

One social channel, chosen because it is the only one where a small site with no audience can still get a post in front of someone. I built a queue of 50 pins for this blog and I have published eleven of them so far, spaced out rather than dumped in a day. What the pin builder broke, and why I stopped at eleven, has its own post. I am not going to give you impressions or clicks yet, because eleven pins is not a result, it is a start. When there are enough of them to say something, I will write the numbers down, including the ones that make me look bad.

What I removed instead: the four social icons in the footer that pointed at facebook.com, instagram.com, twitter.com and tiktok.com. Not at my profiles. At the generic home pages. That is worse than having no icons, and it sat there for months.

What came out of the stack, and why

  • Amazon promo boxes. Seventy-one of them across the site. Twenty-six pointed at amazon.com/s, which is an empty search results page. They were there because a box is easy to add, not because a reader needed one.
  • Twenty-nine “affiliate link” boxes with no affiliate ID in them. They linked to vendors’ home pages and carried a commission disclosure for commissions that could not exist. One of them, on this very post’s previous version, called Surfer SEO my number one pick for bloggers. I have never opened Surfer SEO. That box is the single worst thing that was on this site, and it is gone.
  • The newsletter block. It rendered the words “Subscription form is not available at the moment” in the footer of every page.
  • The table of contents. It was a single paragraph listing the headings, with no links in it. Decoration.

If I were starting again

I would install WordPress, one SEO plugin, Search Console, and nothing else until I had twenty posts I was willing to put my name on. The tools were never the bottleneck here. Having something to say that I could prove was the bottleneck, and no subscription fixes that. The habits that did more than any plugin were writing the meta description by hand, refusing to publish a number without a source and a date, and leaving a night between finishing a post and publishing it. All three are free.

If you want the working end of this rather than the shopping list, start with the free tools I would set up on day one.