<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Simplifyd Cloud — Blog</title>
    <link>https://simplifyd.com/blog</link>
    <description>Notes on building and running cloud infrastructure, from the team building a cloud for African products.</description>
    <language>en</language>
    <lastBuildDate>Wed, 12 Aug 2026 09:00:00 GMT</lastBuildDate>
    <atom:link href="https://simplifyd.com/blog/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Ship a static site without writing a Dockerfile</title>
      <link>https://simplifyd.com/blog/ship-a-static-site-without-a-dockerfile</link>
      <guid isPermaLink="false">simplifyd-blog-ship-a-static-site-without-a-dockerfile</guid>
      <pubDate>Wed, 12 Aug 2026 09:00:00 GMT</pubDate>
      <description>Static sites on Simplifyd are served straight from object storage. Here is the whole path from built assets to a custom domain with a certificate.</description>
      <content:encoded><![CDATA[<p>Most front ends do not need a container. They need a bucket, a CDN edge and a certificate. But the standard cloud workflow still asks you to write a Dockerfile, pick a base image, configure nginx and keep all three patched — for a folder of files that never executes anything.</p><p>Simplifyd has a static site service type that skips the whole detour. You create the service, publish your built assets, and they are served from object storage behind our edge.</p><h2>Create the service</h2><p>From the console, create a service and choose Static site. There is no image to pick and no port to expose, because nothing is running — the bucket is the service.</p><h2>Publish your files</h2><p>Files are published inline through the API, so anything that can make an HTTP request can deploy. The CLI wraps it:</p><pre><code>npm run build
simplifyd static publish ./dist</code></pre><p>That last command replaces the previous contents in place. There is no build step on our side to wait for and no window where half the old site is serving next to half the new one.</p><h2>Or let an agent do it</h2><p>Because publishing is a plain API call rather than a Docker build, an AI agent connected over MCP can deploy for you. Point Claude at your repo, connect the Simplifyd MCP server, and &quot;build this and publish it&quot; is a single instruction — no local Docker daemon, no registry login, no CI runner.</p><p>This was the actual reason we built inline publishing the way we did. An agent cannot run a Docker build inside a chat session, but it can absolutely send files to an endpoint.</p><h2>Attach your domain</h2><p>Custom domains attach as bucket aliases and certificates are issued automatically. Point a CNAME at the address we give you and the certificate follows.</p><blockquote><p>A static site should cost you one command and one DNS record. Everything past that is accidental complexity someone else decided you needed.</p></blockquote><p>If you have been putting off moving a marketing site or a docs build because the container work was not worth it, this is the path that removes the excuse.</p>]]></content:encoded>
      <category>Guides</category>
      <category>Deploys</category>
    </item>
    <item>
      <title>Managed Kafka in KRaft mode, and the small-cluster trap</title>
      <link>https://simplifyd.com/blog/managed-kafka-kraft-small-clusters</link>
      <guid isPermaLink="false">simplifyd-blog-managed-kafka-kraft-small-clusters</guid>
      <pubDate>Wed, 22 Jul 2026 09:00:00 GMT</pubDate>
      <description>Running Kafka without ZooKeeper is the easy part. Making a one-broker cluster actually reach ready is where most self-hosted setups quietly hang.</description>
      <content:encoded><![CDATA[<p>Kafka on Simplifyd runs in KRaft mode. There is no ZooKeeper ensemble to size, patch or wake up for at night — the controllers hold the metadata quorum themselves. That much is just following where upstream Kafka went.</p><p>The interesting part is what happens when someone provisions the smallest possible cluster.</p><h2>Why a one-broker cluster hangs</h2><p>Kafka creates internal topics for its own bookkeeping, the best known being __consumer_offsets. By default those topics ask for a replication factor of 3. On a healthy production cluster that is exactly what you want.</p><p>On a single-broker development cluster it is unsatisfiable. Kafka cannot place three replicas on one broker, so the topic is never created, so the cluster never reports ready. Nothing in the logs says &quot;your replication factor is impossible&quot; — it simply waits.</p><p>Anyone who has stood up a scratch Kafka to test a consumer has hit this and assumed the operator was broken.</p><h2>What we do instead</h2><p>We clamp internal topic replication to the actual broker count at provision time. A one-broker cluster gets a replication factor of one and comes up in under a minute. A three-broker cluster gets three. You do not configure it and you cannot get it wrong.</p><h2>Two topologies</h2><ul><li>Standalone puts the broker and controller roles on a single node. It is for development, and we are direct about that — one node is one failure domain.</li><li>Cluster splits brokers and controllers into separate node pools that scale independently, which is what you want when the thing on the other end is a payment stream.</li></ul><p>Storage scales with brokers. Controllers hold metadata, not your messages, so they take a fixed small volume rather than whatever you sized your brokers for — you are not billed for broker-sized disks on nodes that will never fill them.</p><h2>What we did not ship</h2><p>There is no public endpoint. Kafka clients reconnect to whatever address the cluster advertises, which means genuine external access needs a stable, unique public address for every broker. The shared-IP approach that works for a normal HTTP service cannot express that, and shipping something that half-works over a protocol this stateful would be worse than shipping nothing.</p><p>Clusters are reachable from services in the same environment. If you need to reach one from outside, talk to us about what you are trying to do.</p><blockquote><p>Managed does not mean &quot;we ran the same install script you would have.&quot; It means the defaults that quietly fail at small scale were found and fixed before you met them.</p></blockquote>]]></content:encoded>
      <category>Engineering</category>
      <category>Data stores</category>
    </item>
    <item>
      <title>The Postgres features teams actually ask for</title>
      <link>https://simplifyd.com/blog/postgres-that-does-not-need-a-dba</link>
      <guid isPermaLink="false">simplifyd-blog-postgres-that-does-not-need-a-dba</guid>
      <pubDate>Wed, 24 Jun 2026 09:00:00 GMT</pubDate>
      <description>Extra databases, extra users, tunable parameters and real backups — the four things that turn a managed Postgres from a demo into somewhere you keep production data.</description>
      <content:encoded><![CDATA[<p>A managed Postgres that only gives you one database and one superuser is a demo. It works right up to the first time you need a read-only user for your analytics tool, and then you are opening a support ticket.</p><p>Here is what a Postgres service on Simplifyd actually gives you.</p><h2>More than one database</h2><p>You can create additional databases on the same instance. Small teams run several services against one Postgres long before splitting it is worth the cost, and pretending otherwise just pushes people into sharing a single database across unrelated schemas.</p><h2>Users with real boundaries</h2><p>Create additional users with their own credentials. The obvious case is a read-only account for a BI tool or a nightly export — something that should never be holding your application superuser password.</p><h2>Parameters you can tune</h2><p>Postgres ships conservative defaults tuned for a machine that no longer exists. You can adjust parameters on your instance rather than filing a ticket and waiting.</p><h2>Backups you can trigger</h2><p>Automatic backups run on a schedule, and you can take one on demand — before a migration, before a risky deploy, before anything you would rather be able to undo.</p><pre><code>simplifyd postgres backup create --service my-db</code></pre><h2>Why this list</h2><p>None of these are exotic. They are the four things every team asks for within a month of putting real data somewhere, and the four things that most cheap managed offerings hold back for a higher tier.</p><blockquote><p>The test of a managed database is not the first day. It is the day you need a second user and find out whether that was in the plan.</p></blockquote>]]></content:encoded>
      <category>Guides</category>
      <category>Data stores</category>
    </item>
    <item>
      <title>Why we built a cloud here</title>
      <link>https://simplifyd.com/blog/why-a-cloud-built-here</link>
      <guid isPermaLink="false">simplifyd-blog-why-a-cloud-built-here</guid>
      <pubDate>Thu, 28 May 2026 09:00:00 GMT</pubDate>
      <description>Every millisecond your users wait is a round trip to another continent. We think infrastructure for African products should sit on the same continent as the people using them.</description>
      <content:encoded><![CDATA[<p>If you build for users in Lagos, Nairobi or Accra and deploy to a region in Northern Virginia or Frankfurt, every request your users make crosses an ocean twice. That is not a configuration mistake — it is the default that most tooling quietly makes for you.</p><p>It shows up as latency you cannot optimise away in code. You can shave milliseconds off a query all week and lose them again on the way to the database.</p><h2>Physics is not a tuning problem</h2><p>You can cache aggressively at the edge, and you should. But the moment a request needs to write something, or read something a cache cannot serve, it goes back to wherever your database lives. No CDN fixes a write path.</p><p>Putting the whole stack — app, Postgres, Redis, Kafka, object storage — in the same place as your users is the only version of this that works.</p><h2>Paying in the currency you earn in</h2><p>The second problem has nothing to do with speed. Cloud bills arrive in dollars, on a card, at whatever the rate happens to be that month. For a business earning in naira, that turns a fixed infrastructure cost into a currency position nobody asked for.</p><p>We bill in naira and take local payment methods. Your infrastructure cost stops moving for reasons that have nothing to do with your infrastructure.</p><h2>What we are building</h2><ul><li>Managed Postgres, Redis and Kafka, with the defaults that fail quietly at small scale already fixed</li><li>S3-compatible object storage that existing tooling talks to without changes</li><li>Static sites, container deploys, and networking that includes real TCP and UDP proxying</li><li>An MCP server, so AI coding agents can deploy to us directly</li></ul><blockquote><p>Building for this market should not mean accepting worse latency, or a bill denominated in someone else’s currency.</p></blockquote><p>If you are running something here and paying an ocean of latency for it, we would like to hear what you are running.</p>]]></content:encoded>
      <category>Company</category>
    </item>
  </channel>
</rss>
