The $4 Social Network Grew Up
Four days ago I published a post explaining that serverless.social is a real AT Protocol PDS running on about $4 of AWS a month — and that the post you were reading was, quite literally, a row in a DynamoDB table.
Then I spent four days feeding it. It stopped being a demo and turned into the place I actually live online. Here's everything that changed.
I moved my real identity onto it
martzmakes.com — my handle, my ~800 Bluesky followers, my whole back catalog of blog posts — now runs on this stack. Not a copy or a mirror: the actual did:plc:… identity, self-hosted. I'm now my own PDS, my own hosting provider, my own everything. The decade-ish archive of posts I'd written elsewhere? Those are DynamoDB rows now too, rendered to static HTML at the edge. Same $4 box, two domains.
If you've ever wanted to *own* your online identity instead of renting it from a platform that can rug-pull you — this is what that actually looks like in practice. It's not a manifesto. It's a CDK stack.
One app, two faces
serverless.social and martzmakes.com serve the same single-page app. It notices which host it's being viewed on and renders that identity — the apex shows the platform, martzmakes.com shows me, my posts, my profile. One bundle, host-aware, no per-site fork.
It speaks Fediverse now
There's an ActivityPub bridge in front of the same data, so you can follow @martzmakes@serverless.social from any Mastodon server. AT Protocol on one side, ActivityPub on the other, both falling out of the same little serverless box. Cross-protocol identity, no extra infrastructure.
Posts actually show up now
I found (and fixed) a federation gap where new posts sat on my PDS for *hours* before Bluesky's relay bothered to poll for them. Now every commit pings the relay directly, so a new post lands in the global Bluesky AppView in seconds. Along the way I also implemented getServiceAuth (so cross-service tokens stop stranding after a signing-key rotation) and fixed reply-thread rendering so parent context shows up.
I taught Claude to run it
This is the big one. serverless.social now speaks MCP — the Model Context Protocol. I gave it a server so Claude (in Claude Code or Claude Desktop) can operate my social presence directly: list the accounts I'm authorized to act as, write a short post, write a longform article, delete a record. Authorization is per-account and per-identity — my login can act as both serverless.social and martzmakes.com, but not as anyone else who signed up.
The meta part: this very post was published through that pipe. An agent wrote a row to a DynamoDB table over MCP, and the edge rendered it into the page you're reading.
And as of today: it knows how it's doing
The newest piece, shipped today, is analytics over the same MCP. I can pull live engagement — likes, reposts, replies — for any of my posts on demand, and engagement over time (follower growth, per-post trends) from a once-a-day snapshot job that quietly records the numbers. Build the thing, then teach the thing to tell you whether the thing is working.
Still ~$4 a month
Everything above is scale-to-zero: a Lambda here, a DynamoDB table there, one EventBridge tick a day. No servers idling, no fixed monthly platform fee, no vendor between me and my own audience. Own your identity, bridge it everywhere, let an AI help you run it — on pocket change.
More soon. I'm building this one in the open.
*Also published on martzmakes.com.*