Internet flâneur • Pagecord foundling


Posts tagged with pagecord

The plague of offering a free website/blog platform is the spammers. They’re relentless. I’ve largely automated spam detection now, but it’s eye-rolling to see them keep trying, day-in, day-out. Here’s a prime example.

Try harder, bots.

The Pagecord Principles

I've been updating the Pagecord home page today with a new headline, refreshed hero text, and a new section called The Pagecord Principles.

The idea is to encapsulate why Pagecord exists and what it stands for. I'm hoping this resonates with bloggers visiting for the first time, encouraging them to sign up to Pagecord rather than (or as well as) one of the many, many alternatives.

It's not a political standpoint or a side-swipe at the competition, just a set of founding principles that guide the development and evolution of the product.

I think it brings more purpose. What do you think?


Write more, manage less

Pagecord reduces the ceremony around blogging. Publish what you like, when you like, from wherever you like. A single photograph, a quick thought, a full-on essay. Everything looks great. Don't let overthinking hold you back – write and publish whenever you feel the urge.

Use your favourite writing tool

Pagecord lets you use the writing tools you already love. Use the fantastic web editor, post by sending an email, publish from Obsidian, or publish from the terminal using the CLI or API.

Own your home on the web

Pagecord gives writers a long-term home on the web. Bring your own domain name, create your own design. Export your entire site, including images, any time in HTML or Markdown format. No lock-in. Easy to leave, but worth staying for.

Embrace boring web standards

Pagecord embraces the original dream of the World Wide Web. Fast, lean, semantic HTML that looks great on every device. Tiny JavaScript sprinkles, evergreen permalinks, RSS, and email. No bloat, no adverts. Built for the long haul using tried and trusted tech.

Allow people to follow, calmly

Reading a Pagecord blog should be as effortless as writing on one. Every Pagecord blog comes with RSS support. Premium lets readers subscribe to weekly email digests, or individual posts by email. Readers can also reply privately to posts using email.

Complete, not complicated

Pagecord includes posts, pages, themes, analytics, email subscribers, custom domains, and full export. Everything you could reasonably need, for a most reasonable price.

I love that Pagecord is open source but it's a double-edged sword because I see features being copied all the time. I don't read competitor blogs, but sometimes I come across things. I guess it's not a big deal given the arrival of coding LLMs – anyone can build anything at any time, right? – plus I've certainly been inspired by other products. Yet, people can literally see my work in progress and copy the product, and there's FA I can do about it. I have no IP moat. 

It doesn't bother me too much (just a little!) and it just means I have to make everything that is Pagecord but isn't the product better than anyone else can match. Customer support, community, brand, trust, performance. That sort of thing. Anything else? How do you think it's going and what could be improved?

Pagecord CLI

I’ve published a small Pagecord command line app (CLI) for people who want to write on their local machine in Markdown (or HTML) and publish those files to Pagecord. If you use Obsidian, you should use the dedicated plugin, but if you use something else then the CLI app might be able to help.

The app is written in Ruby (❤️), and you install it from RubyGems:

gem install pagecord-cli

Once installed, you can log in using the login command and passing your blog subdomain:

pagecord login blog-subdomain

This will ask for your API key, which will be used to authenticate you.

Once you're logged in, you can save posts to your blog as draft or published using the draft and publish commands:

# subdomain is only required if you're logged into two or more blogs
pagecord draft post.md [subdomain]
pagecord publish post.md [subdomain]

If you want to move a published post back to draft, use the draft command.

Images

Images are supported as with the Obsidian plugin. Just reference the local file in your Markdown and it will be uploaded to Pagecord.

After syncing a file (draft or published), you'll notice some frontmatter entries appear such as pagecord_token, pagecord_blog_fingerprint, and pagecord_attachments – these are required by the app to identify the blog post and attachments in Pagecord, so please don't edit them.

Options

Frontmatter in your Markdown file is supported as per the Obsidian plugin, but if you prefer you can use CLI options to configure the post.

Note: The CLI app and Obsidian plugin use the same Pagecord frontmatter, so you can move between them. A post first published from the CLI can later be edited and synced from Obsidian, and a note first published from Obsidian can later be updated from the CLI.

Setting the title (or no title)

# by default the title is set to be the same as the file name
--title "Custom title"
--title ""

Changing the post slug

--slug my-new-post-slug

Changing the publication time

--published-at 2026-06-11

Adding tags

--tags ruby,cli

Add canonical URL

--canonical-url https://example.com/original

Making the post hidden

--hidden

Changing the post locale

--locale en

The CLI app covers the main workflows. If you want to delete a post, you'll need to head into the Pagecord UI.

Hopefully this app opens up options for people who want to write locally in other editors like iA Writer, Vim or Emacs, or do some automation, but who don't want to fiddle with the Pagecord API itself.

Composing your blog posts locally on your own device is a great way to use Pagecord. You can export your data from Pagecord at any time of course, but writing locally means you own all your content from the outset. Your posts are just files that you can back up, store on Dropbox, whatever you like!

This is how I write most blog posts now, and I've published this one using the CLI app itself.

Uploaded image
People love 88x31 buttons in their blog footer, right? Having fun experimenting on a Friday afternoon...

I just spent an hour or so tightening the Pagecord home page copy and the ordering of content sections. I'm not sure if this will make any difference, but I certainly prefer it. Do you? I need to redo the walkthrough video at some point as the current one is cringe and it pre-dates a bunch of features.

I know Pagecord has product market fit because of customer feedback (I've been soliciting this) and conversion rates, and it's very feature-rich today, so my focus now has to be about getting more people to try it. Copy and SEO is part of that, but it's clear that demand for personal websites and blogging appears to be continuing to slump, plus the number of competing products continues to grow. Tough situation. I'll keep trying things. I'm in a good position since the product is profitable!

My main hope is that existing customers continue to use Pagecord (churn is a major problem for blogging platforms), and also continue to spread the word if they get the chance. A customer's post went viral this week on Hacker News and Reddit which was great to see (and I'm delighted that the server shrugged off this mega-traffic), but they had turned off the Pagecord link in the blog footer so alas I'll never get to know how that might have impacted signups. Maybe it would have made little difference, we'll never know.

Onwards.

Why I built Pagecord

I started blogging in 2005 when I set up my first company, a consultancy that was just me contracting myself (and my soul) into financial institutions to hand-write code in exchange for cash in the City of London. I had to wear smart trousers, shirts and shoes but I got away without a tie. People carried briefcases. It sounds almost Victorian, doesn't it?

I was never a prolific blogger and many of the posts I wrote back in the day got binned because they were terrible (although some survived). I found the self-promotion excruciating, but my enthusiasm was real even if the dedication wasn't. Twenty years later I'm now more prolific, primarily because I built a blogging platform of my own and it was never gonna dogfood itself. I still cringe at the self-promotion, but I've learned to get over that because I know it lives only inside my head.

Anyone who ever tried to build a blogging platform will know that the basics are simple, but there are many, many hidden gotchas, ballaches, botfarms, and footguns that you'll be subjected to. The devil is in the user-generated content detail. If you manage to stubbornly persist through this quagmire and build something worthy of selling, the chance of making any "I'm quitting my real job" money from it is essentially zero. Blogging platforms are a commoditised niche and hence a ridiculous idea to take on for that, and so many other reasons. So why on earth did I decide to build Pagecord?

Let me try and explain.

My first company lasted about 5 years in total, but in 2007 I co-founded another company that was an actual proper one, not a tax-avoiding consultancy. I spent 15 years being its CTO and it was a successful enterprise. A few years after we'd sold the business, I decided to move on for reasons I've written lots about before, but basically it wasn't very interesting or challenging any more. I then worked as a not-quite-CTO for a year or so for a company I was always curious about. This job was interesting and challenging for different reasons, but it was clear to me after a while that the role wasn't really needed, which made me feel like a spare part who was getting in the way, so I upped and left.

Following that, I got close to co-founding another VC-backed company. We had a Y Combinator pitch lined up, but I got cold feet at the eleventh hour. My gut said it wasn't the right time (looking back, it arguably was! 😅🤦‍♂️) and, frankly, I needed a break so I took one.

After a while, I got the urge to build something again. Leadership positions are all well and good, but there's nothing like the feeling of building a new product for customers that really love it. I wanted a bit of that again. I pulled together a prototype app called Teamlight (RIP ⚰️) that was an email and Slack-based B2B company directory and team check-in product, but after running a beta test with a few businesses, I lost all enthusiasm. The domain just didn't interest me, so into the garbage it went.

A domain that does, and always has, interested me is blogging – independent writing on the internet – and publishing platforms, as well as the whole web reading and typography experience. I've followed blogs since they became a thing (the first I remember was Joel on Software), and I happily read them using the wonder that is RSS. There's something magical to me about the open web and people writing for themselves for free, not to shill or monetise something. Books, journals, blogs – I've learned so much from reading over the years and I can genuinely say that blogs helped me enormously in my career. We can also thank blogs for today's LLMs, which have hoovered up every word as part of their training. Blogs are honestly a gift.

I've tried a large chunk of the blogging products that have existed since 2005. This personal blog has actually existed in Wordpress, Tumblr, Write.as, Ghost, Hugo, and Jekyll at one point or other, plus I've also used a bunch of other products like Squarespace, Medium, Bear, Pika and probably others that I can't remember any more. I'm a little bit obsessed, it's fair to say. I really liked many of these products, but I could never find one that was perfectly suited to me. Some were too corporate, some too low-tech, and most I felt wanted too much money.

I was never truly satisfied with any so frankly it was inevitable that I'd end up having a go at building my own platform.

During the Covid nightmare I'd actually shipped a blogging product, Blogline, but my heart wasn't quite in it at the time – I was still full time in my job and I wasn't happy enough with the product. I found it hard to devote enough time to it, then it ended up going a bit stale, so I canned it. In early 2024 I stumbled across Daft Social which I thought was brilliant fun. It was simple, quirky, and slightly irreverent. I loved how you could only operate it via email. It was opinionated, intentionally simple, and truly minimalist. My kinda thing.

I already had my own HEY World blog, which was a "publish by email" product available only for HEY customers. Daft Social seemed like a simpler version of this, but one that worked with any email account. I never used Daft Social (too basic for me) but it got me thinking about resurrecting the Blogline idea, but with a better name (I already owned pagecord.com) and a simplified approach. A part HEY World, part Daft Social frankenproduct, but a bit more fleshed out with support for other things I wanted like custom domains, basic analytics, themes and whatnot.

I built the first prototype in 3 days, put it live, then launched it on Product Hunt a few days later for a laugh. It got some nice feedback for an unoriginal product, but hardly any traction. I didn't think much more of it, but I kept tinkering over the next few months. Then the four coding agents of the AI apocalypse arrived, so I went all-in with my new robot best friends for a few months to transform Pagecord into the product I always wanted, and that's kinda where things stand today.

Pagecord is now over two years old, has hundreds of bloggers writing on it, and is a profitable business. The product is built and operated entirely by me, and it's still — I hope — as effortless to use as it was on day one.

I built Pagecord because I wanted the product I wished existed, and now it does. I genuinely couldn't be happier with it!

The sun is out, like properly, in Scotland this week. Late April and May are generally some of the best months for sun so I plan to take full advantage and be outside as much as possible with camera in hand. This is a massively light-deprived country, so I'm literally gasping for sunlight right now - the winter here is ridiculous. I have a couple of small trips planned soon too, so hopefully the sun will be shining in those destinations as well.

I've done quite a lot with Pagecord this year so a bit of a break is definitely on the cards. I find you can get in a rut with these things if you stay too close, and the joy can get sucked away. On the customer front people come and go, but generally speaking the growth curve continues upwards. I've still yet to find any sort of magic acquisition sauce, however. I think the product is pretty good right now (I'm a paying customer myself believe it or not 😅), so all I can really do is make sure it runs fast and smooth, put improvements out now and again, and keep blogging myself to both test the thing, as well as write about the journey. 

If there's anything you'd like to know about regarding Pagecord, do let me know and maybe I'll write about it, plus it's always nice to hear from people anyway. 

☀️

Choosing self-managed databases

I could choose to pay a cloud service for a managed database but instead this week I chose to set up WAL-based continuous backup to R2 and point-in-time recovery for my Postgres instance.

This would have been unthinkable for me a year ago but here we are. 

All the processes are meticulously documented in a git repo, and I did a disaster recovery test today which spun up a new server and restored the DB. It was quick and seemingly seamless.  

This experience has been encouraging and it’s certainly more comforting knowing I have point-in-time recovery rather than the previous hourly pg_dump backup strategy. I’ve never had to do a restore procedure with a managed database, but I’m sure it’s simple and only requires a few clicks in a UI, but perhaps it’s actually harder to test than my scriptastic approach? I don’t know, but the reality is that we can now choose to do hard things when before we couldn’t, so why shouldn’t we?

I think in a real disaster it would make sense to install Claude and my docs repo on the server and have the AI execute the procedure for me. It wouldn’t be stressed, and it would have a better grip on the situation. Of that I have no doubt. 

In tech today, we’re truly standing on the shoulders of giants. I’ve been around this block for decades now, but the potential of the AI revolution continues to astonish me like nothing before it. 
I've been playing around with a prototype Pagecord API this afternoon to allow you to create/edit/delete posts programatically. This was partly driven by OpenClaw, but there are other use cases such as an Obsidian plugin for example (publish your posts directly from there). If you had this, would you use it? Would love to hear about your ideas and use cases.

What it actually costs to run Pagecord (March 2026)

I thought it would be interesting to document the costs of running Pagecord, the product and the business. This isn't something that many indie developers share and it's pretty interesting to me, so here's the breakdown of what it costs to keep the lights on as of March 2026 (when Hetzner's prices go up).

Note that I take no salary or dividends, and any meagre profits stay in the business so I can call on them when needed.

Service

Details

Monthly Cost

Google Workspace

Email and spreadsheets

$9.44

Domain name

At-cost from Cloudflare

$0.87

Hetzner

Server, IPs, backup etc

$32.08

Hatchbox

Amazing deployment tool for Rails apps

$10.20

Cloudflare R2

Image storage, plus backup storage

$0.68

Cloudflare Images

Proxy for image optimisation

$5.00

Postmark

Inbound emails plus newsletters

$16.50

Mailpace

Transactional email

$3.37

Claude Pro

AI developer

$24.27

Accountancy

I do most of it myself but I need someone to verify the books

$33.59

Virtual office

So someone else can handle the business address and official mail etc ⊹╰(⌣ʟ⌣)╯⊹

$29.93


Total

$165.93

A few more details

Pagecord lives in Hetzner, in Germany. I've found it's the most cost-effective hosting provider out there, and with Hatchbox handling custom domains (via Caddy), server config and one-click deployments, it's super-productive and I love it. I don't think it's possible to get this cost down other than buying a cheaper server which would be counter-productive.

Email is split across two providers which is a historic anomaly. I used to use Postmark for everything, but I found delivery times to be unstable so I switched to Mailpace for all transactional emails which has been much better. Postmark still handles inbound emails (it just works) as well as sending all the newsletters via their bulk sending feature which is very good. At some point I'll probably move everything to Resend, but their inbound email functionality isn't as slick as Postmark yet (early days) and, frankly, what I have right now works great so there's little incentive to move. It's actually handy having two providers since it gives me some redundancy should I need it.

Cloudflare R2 is where all the uploaded images, videos and other attachments live. It's great and better value than AWS S3. The data is all in the EU location. I use Cloudflare Images as an image proxy which I think is amazing. It resizes all the images from Pagecord blogs to an optimal size and serves them in webp format from edge locations across the world. That it only costs me $5/mo (for now, at least) blows my mind.

The accountancy and virtual office costs are due to setting up a UK limited company for Pagecord recently. I was increasingly uncomfortable running it as a sole trader and being liable for any trouble bad actors might be able to cause. More than happy with the increased cost for the peace of mind it brings.

What isn't on this list

Pagecord uses Sentry (error tracking) on the free plan, plus AppSignal (for observability) which doesn't cost me anything right now. Pagecord also uses AWS Cloudfront for caching Rails' static assets. I could probably move this to Cloudflare but what I have just works and costs less than $0.01/mo so I can't be bothered.

The bottom line

Someone emailed me today and complained about the upcoming price increase: "I don't understand how you can have so much costs for just hosting texts and some pictures?". Well, hopefully this post clears that up.

I think $165/month to host 700+ blogs (large portion being on free accounts btw – plz subscribe!) on a fast, reliable (🤞), monitored and backed-up blogging platform for a registered UK company is pretty reasonable. I can't see how I could reduce these costs in any meaningful way right now. It's about as lean as it gets without being dangerously underweight.

This post might not age well since costs change all the time, especially for a growing business, but hopefully it gives you some useful insight into how things run behind the scenes as of right now.

Styling a Pagecord blog like the Bear Blog Archie theme

I come across posts hosted on Bear Blog quite often and many of them use the Archie theme. I wondered whether Pagecord could be styled in this way, and it turns out it can fairly easily.

Uploaded image

A few more tweaks would be needed to complete it (I didn't look at styling the email subscription box for example – I just turned it off), but that's all doable if you wanted. My intention here isn't to steal Bear's thunder, but if someone was migrating and wanted to keep the same vibe, then now I know they definitely can.

I'd like to add a template theme gallery at some point (basically just pre-cooked custom CSS), but until then here's the CSS if you wanted a similar style.

/* Use the Roboto Mono font */
@import url('https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@100;200;300;400;500;600;700;800;900&display=swap');
body {
font-family: "Roboto Mono", monospace;
}

/* Use flex to allow header block order to be rearranged */
header {
display: flex;
flex-direction: column;
}

/* Move nav to the second position (after the title) */
header > nav {
order: 2;
justify-content: flex-start;
margin-bottom: 1.75em;
gap: 1rem;
}

/* Ensure the titlebar div appears first */
header > .titlebar {
order: 1;
}

/* Assign orders to subsequent elements to keep them in place */
header > .bio {
order: 3;
}

header > .email-subscriber-form {
order: 4;
}

header > hr {
order: 5;
}

/* give nav links and article body links an accent underline */
nav a, .lexxy-content a {
color: var(--lexxy-color-ink);
border-bottom: 3px solid var(--color-accent);
text-decoration: none;
font-weight: normal;
}

/* dotted lines under header and above footer */
header hr {
border-top: 3px dotted #232333;
}

footer.blog-footer {
border-top: 3px dotted #232333;
}

I've been experimenting with Ubicloud this morning as a new home for the Pagecord database. It's pretty neat – they support Hetzner (which is where the Pagecord app lives) and offer the usual benefits of managed databases, but for much less cost than the main cloud providers charge.

Unfortunately Ubicloud don't support Hetzner's Nuremberg data centre, only Falkenstein. I opted for Nuremberg a while back, so this means there's a bit more jiggery-pokery to migrate the app and the database to a new DC whereas it would have been simpler if the app was already in Falkenstein. There's a further complication with a number of blogs on custom domains because floating IPs in Hetzner are not transportable across DCs, so these customers will need to update their DNS to point to a new IP, or use the (far better) CNAME approach. That can be deferred though because I can configure the Nuremberg app instance to connect to the Falkenstein database. It just means these blogs will feel a little less snappy until the DNS gets switched over (I tested this today – most people probably wouldn't notice).

I'll probably do this in a couple of weeks. I'll announce it on the Pagecord blog beforehand (there will be a small 2-3 min outage) and also contact custom domain owners who will be affected. If anyone reading has used Ubicloud, I'd be interested to hear about your experience.