<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Zerops</title>
    <description>The latest articles on DEV Community by Zerops (zeropsio).</description>
    <link>https://dev.to/zeropsio</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F9406%2F914953e7-05a6-43e9-8e93-3b2de011c945.png</url>
      <title>DEV Community: Zerops</title>
      <link>https://dev.to/zeropsio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zeropsio"/>
    <language>en</language>
    <item>
      <title>"Read the failure. Ship the fix." Abdul Talha on building DeployDoctor on Zerops</title>
      <dc:creator>Zerops Devs</dc:creator>
      <pubDate>Fri, 28 Aug 2026 05:00:00 +0000</pubDate>
      <link>https://dev.to/zeropsio/read-the-failure-ship-the-fix-abdul-talha-on-building-deploydoctor-on-zerops-4g1f</link>
      <guid>https://dev.to/zeropsio/read-the-failure-ship-the-fix-abdul-talha-on-building-deploydoctor-on-zerops-4g1f</guid>
      <description>&lt;p&gt;&lt;em&gt;A DevOps technical writer built a tool that reads your deployment logs and tells you what broke. The interesting decision is that it checks its own rules before it calls the AI.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Over the weekend of August 8 and 9, Zerops ran The Zerops Challenge in collaboration with &lt;a href="https://www.wemakedevs.org/hackathons/zerops" rel="noopener noreferrer"&gt;WeMakeDevs&lt;/a&gt;. Forty eight hours, solo entries only, and one hard rule: the finished thing had to be a real application deployed on Zerops with a live URL, still running when the judges reached it. Not a local demo, not a screen recording.&lt;/p&gt;

&lt;p&gt;Over 1,000 developers signed up, more than 10,000 build and deployment pipelines fired, and 250+ valid projects came out the other end. Seven of them won. One was &lt;strong&gt;&lt;a href="https://appstage-290f.prg1.zerops.app/projects/deploydoctor-ai-powered-deployment-incident-diagnosis" rel="noopener noreferrer"&gt;DeployDoctor&lt;/a&gt;&lt;/strong&gt;, by Abdul Talha.&lt;/p&gt;

&lt;p&gt;Here are his answers, close to verbatim.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;First, introduce yourself.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I am Abdul Talha, a DevOps technical writer focused on cloud infrastructure, application deployment, self-hosting, and open-source technologies.&lt;/p&gt;

&lt;p&gt;I work with tools like Docker, Docker Compose, Linux, cloud platforms, reverse proxies, databases, and observability tools. When I write a technical guide, I prefer to deploy and test the application myself so I can document the actual process, issues, and solutions rather than just explain the theory.&lt;/p&gt;

&lt;p&gt;I also follow a docs-as-code workflow using Git and Markdown. Along with technical writing, I build projects to learn and experiment with different DevOps and cloud technologies. DeployDoctor was one of those projects, which I built as part of the Zerops Challenge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What did you build, and where did the idea come from?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I built DeployDoctor, a tool that helps developers troubleshoot deployment issues.&lt;/p&gt;

&lt;p&gt;The idea came from my own experience. While deploying different applications, I faced many issues where finding the actual cause and solution took a lot of time. So I thought of building a tool that could identify frequently occurring deployment problems and provide their solutions in one place.&lt;/p&gt;

&lt;p&gt;DeployDoctor analyzes deployment logs, identifies known error patterns, and provides the likely cause and recommended fix. For issues that the built-in analyzer cannot identify with enough confidence, it uses Gemini for further analysis.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdyaczlizasju9yw6279y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdyaczlizasju9yw6279y.png" alt=" " width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The example in the screenshot is one every developer has met at least once: the app is connecting to PostgreSQL via localhost instead of the database service hostname.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Walk us through your architecture.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;DeployDoctor has three main components: a React frontend, a Fastify API, and a PostgreSQL database.&lt;/p&gt;

&lt;p&gt;The frontend is responsible for the user interface, while the API handles the deployment log analysis and application logic. PostgreSQL stores the incidents and analysis results.&lt;/p&gt;

&lt;p&gt;For log analysis, I used two layers. First, the API checks the logs against known deployment error patterns. If it finds a match with enough confidence, it returns the result directly. If it cannot identify the issue confidently, it sends the logs to Gemini for further analysis.&lt;/p&gt;

&lt;p&gt;On Zerops, I deployed the frontend and API as separate services. This kept the application components separated and also helped me understand how services are configured and connected on Zerops.&lt;/p&gt;

&lt;p&gt;One part I found interesting was using the rule-based analyzer before Gemini. It makes the analysis more predictable for known issues and avoids using AI for every request.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What did Zerops get wrong most often, and how did you catch it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most of the issues I faced were related to deployment configuration rather than the application itself.&lt;/p&gt;

&lt;p&gt;I had to make a few changes to the Zerops configuration, including the Prisma setup and the API URL used by the frontend. I caught these issues by checking the build and deployment logs and testing the application after each deployment.&lt;/p&gt;

&lt;p&gt;Whenever something failed, I checked the logs, identified the configuration issue, made the change, and deployed it again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What did you not understand about Zerops when you first opened it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When I first opened Zerops, I wasn't immediately familiar with how the platform structured applications and services.&lt;/p&gt;

&lt;p&gt;I was used to deploying applications with Docker Compose or directly on a VPS, so the Zerops service-based approach was different from what I was used to. I initially needed some time to understand how the frontend, API, database, environment variables, and deployment configuration fit together.&lt;/p&gt;

&lt;p&gt;Once I understood that structure, the deployment process became much easier to follow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Any advice for people who are just starting their deployment journey?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Start with a simple application and understand how it works before trying to deploy it.&lt;/p&gt;

&lt;p&gt;Learn the basics of the application stack first, especially things like ports, environment variables, databases, and how different services communicate with each other. When something fails, don't immediately change multiple things at once. Check the build and application logs, identify the actual error, and then fix it step by step.&lt;/p&gt;

&lt;p&gt;Also, don't be afraid of deployment errors. They are a good way to understand how applications actually work in production. The more applications you deploy and troubleshoot, the easier the process becomes.&lt;/p&gt;




&lt;h2&gt;
  
  
  What we are taking from this
&lt;/h2&gt;

&lt;p&gt;Two things stand out, and neither is the AI.&lt;/p&gt;

&lt;p&gt;The first is the design decision Abdul flags himself: the rule-based analyzer runs before Gemini, not after, and not instead. A known failure signature is matched deterministically and returned immediately. Only when confidence is too low does the log get handed to a model. That means the common cases are instant, free, and give the same answer every time, and the model is reserved for the cases that actually need judgement.&lt;/p&gt;

&lt;p&gt;That is a better instinct than most AI tooling shows right now, and it is the same instinct behind good infrastructure. Reach for the deterministic thing first. Keep the expensive, non-repeatable thing for the problems that earn it. It is not a coincidence that this came from someone whose day job is deploying software carefully enough to write down exactly what happened.&lt;/p&gt;

&lt;p&gt;The second is his answer about the first hour. He came from Docker Compose and from putting things on a VPS directly, and the thing that slowed him down was not a command or an error message. It was the mental model. How the frontend, the API, the database, the environment variables and the deployment config relate to each other on Zerops is genuinely a different shape from a compose file, and until that shape is in your head, nothing else lands.&lt;/p&gt;

&lt;p&gt;We think about this a lot. Zerops asks you to think in services on a private network rather than in containers on a host, and that model is the reason the platform can do the things it does. It is also, reliably, the thing that costs people their first hour. Abdul's account is useful precisely because he is not complaining about it. He needed time, he got it, and then, in his words, the deployment process became much easier to follow.&lt;/p&gt;

&lt;p&gt;The gap between those two states is the whole problem worth solving, and it belongs in onboarding rather than in a hackathon weekend.&lt;/p&gt;

&lt;p&gt;Congratulations, Abdul. Well earned.&lt;/p&gt;




&lt;h2&gt;
  
  
  DeployDoctor
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://frontend-2bdf.prg1.zerops.app/" rel="noopener noreferrer"&gt;https://frontend-2bdf.prg1.zerops.app/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href="https://github.com/abdultalha0862/deploydoctor" rel="noopener noreferrer"&gt;https://github.com/abdultalha0862/deploydoctor&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Project page:&lt;/strong&gt; &lt;a href="https://appstage-290f.prg1.zerops.app/projects/deploydoctor-ai-powered-deployment-incident-diagnosis" rel="noopener noreferrer"&gt;https://appstage-290f.prg1.zerops.app/projects/deploydoctor-ai-powered-deployment-incident-diagnosis&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The live demo ships with example logs you can click, including &lt;code&gt;CrashLoopBackOff&lt;/code&gt;, Node OOM, &lt;code&gt;DNS ENOTFOUND&lt;/code&gt; and a missing env var, so you can try it without having to break something first.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Zerops Challenge
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hackathon page:&lt;/strong&gt; &lt;a href="https://www.wemakedevs.org/hackathons/zerops" rel="noopener noreferrer"&gt;https://www.wemakedevs.org/hackathons/zerops&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kickoff livestream&lt;/strong&gt; with Kunal Kushwaha and Francesco Ciulla: &lt;a href="https://www.youtube.com/live/1bpt0iuXuNM" rel="noopener noreferrer"&gt;https://www.youtube.com/live/1bpt0iuXuNM&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Connect with Abdul Talha
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;X:&lt;/strong&gt; &lt;a href="https://x.com/AbdulTa62185243" rel="noopener noreferrer"&gt;https://x.com/AbdulTa62185243&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LinkedIn:&lt;/strong&gt; &lt;a href="https://www.linkedin.com/in/abdul-talha/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/abdul-talha/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/abdultalha0862" rel="noopener noreferrer"&gt;https://github.com/abdultalha0862&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More winner interviews from The Zerops Challenge are on the way.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Hardik Khanduja built ZeroArch in 48 hours in Zerops: a canvas you draw your infrastructure on, and an AI that audits it before it writes the YAML</title>
      <dc:creator>Zerops Devs</dc:creator>
      <pubDate>Mon, 24 Aug 2026 07:29:16 +0000</pubDate>
      <link>https://dev.to/zeropsio/hardik-khanduja-built-zeroarch-in-48-hours-in-zerops-a-canvas-you-draw-your-infrastructure-on-and-435k</link>
      <guid>https://dev.to/zeropsio/hardik-khanduja-built-zeroarch-in-48-hours-in-zerops-a-canvas-you-draw-your-infrastructure-on-and-435k</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;"I'm a visual thinker, and a lot of developers are too" - &lt;a href="https://x.com/HardikKhanduja" rel="noopener noreferrer"&gt;Hardik Khanduja&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Over the weekend of August 8 and 9, Zerops ran The Zerops Challenge in collaboration with &lt;a href="https://www.wemakedevs.org/" rel="noopener noreferrer"&gt;WeMakeDevs&lt;/a&gt;. The format was deliberately unforgiving. Forty-eight hours, solo only, no planning phase and no slide decks. The only hard requirement was that the finished thing had to be a real deployed application on Zerops with a live URL, still running when the judges got to it. Not a local demo, not a screen recording.&lt;/p&gt;

&lt;p&gt;Over 1,000 developers signed up, more than 10,000 build and deployment pipelines fired, and 250+ valid projects came out the other end. Seven of them won. One of the winners was Hardik Khanduja, who took a share of the $5,000 credits pool for ZeroArch, a visual infrastructure designer that turns a drag-and-drop diagram into a production ready zerops.yml.&lt;/p&gt;

&lt;p&gt;We sent him some questions. His answers turned out to be one of the most useful pieces of platform feedback we got out of the whole weekend, so we are publishing them close to verbatim.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;First, introduce yourself.&lt;/strong&gt; Hi, I am Hardik Khanduja. I am a full-stack developer who loves building in public and experimenting with new tech. I've always been interested in finding ways to make developer workflows smoother, especially when it comes to the gap between writing code and actually managing the infrastructure it runs on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What did you build, and where did the idea come from?&lt;/strong&gt; I built ZeroArch. It's an interactive, drag-and-drop canvas where you can visually map out your cloud architecture, like connecting your frontend to an API and a database. Once you design it, Google Gemini AI audits the setup for security issues and generates a production-ready zerops.yml config file for you.&lt;/p&gt;

&lt;p&gt;The idea came from a personal frustration: writing YAML files by hand is annoying and error-prone. One wrong space or an exposed port, and your app breaks or becomes vulnerable. I'm a visual thinker, and I realized a lot of developers are too. I wanted a tool where you could visually sketch what you want, and let the code write itself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F45cz3ub8wusic11inzry.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F45cz3ub8wusic11inzry.png" alt=" " width="799" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The canvas. Components come out of the left rail, and connections between them are the architecture.&lt;/p&gt;

&lt;p&gt;Walk us through the architecture. The stack is Next.js 15 using the App Router, React Flow for the interactive canvas, PostgreSQL for storing saved blueprints, and Prisma as the ORM.&lt;/p&gt;

&lt;p&gt;The most interesting part is how the AI compiler works. React Flow stores the canvas state as a JSON of nodes and connections. When you hit Generate, our server converts that graph into an AST, an abstract syntax tree, and feeds it to Gemini. The prompt is designed to act like a strict DevOps engineer. It doesn't just write the YAML, it actively warns you if you do something insecure, like trying to connect a frontend directly to a database without an API layer in between.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fngn20bjwqmpvo852qqaj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fngn20bjwqmpvo852qqaj.png" alt=" " width="799" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The audit pass on a heavier design. Note what it is actually saying: the ingestion layer is correctly decoupled through RabbitMQ, a connection to the results database is missing, and only the web client and upload API should have public routing enabled. The queue, the worker and the database stay inside the private project network.&lt;/p&gt;

&lt;p&gt;That last screenshot is worth sitting with for a second, because it is the argument ZeroArch is quietly making. The interesting part of an architecture is not the list of services. It is which of them can be reached from the outside, and which ones can only be reached by their neighbours. Drawn on a canvas, that becomes obvious. Written by hand in YAML at two in the morning, it does not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What did the AI get wrong most often, and how did you catch it? And on the platform side, what fought you hardest?&lt;/strong&gt; When Gemini was generating the zerops.yml files, it would occasionally hallucinate Alpine-specific packages or get the YAML indentation wrong. To catch this, I had to refine the system prompt with strict schema constraints, forcing the AI to output structured data that we could parse safely.&lt;/p&gt;

&lt;p&gt;On the platform deployment side, the trickiest thing was Alpine's lack of legacy OpenSSL 1.1 libraries, which Prisma was expecting. Prisma would crash on boot because it couldn't find the shared library. I had to explicitly configure Prisma's binaryTargets to support OpenSSL 3.0, and add a prepareCommands step in zerops.yml to install openssl via apk using sudo, since the setup runs as a non-root user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What did you not understand about Zerops when you first opened it?&lt;/strong&gt; The database connection binding. Coming from platforms that auto-inject the database URL directly into the app, I didn't realize at first that Zerops gives you the base connection string, pointing to /postgres, but you have to manually suffix it with /db, or whatever your specific database name is, in the secret variables to let Prisma write to it. Once I realized PostgreSQL 15 has strict permissions on the default system database, it clicked, but it definitely had me scratching my head for a bit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Any advice for people just starting out their deployment journey?&lt;/strong&gt; Don't ignore the logs, and pay attention to your environment's OS. A lot of developers write code on macOS or Windows and forget that their app is going to run in a lightweight Linux container, like Alpine, in production. If you rely on database engines or native node modules, test your container configurations early. And most importantly, build in public. The feedback and support from the community are what keep you going when deployments get frustrating.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we took from this
&lt;/h2&gt;

&lt;p&gt;The Alpine and OpenSSL one is the flip side of running real Linux containers rather than an abstracted app runtime. You get prepareCommands, apk, and control over the image, which is exactly what let him fix it in one step. You also get to meet the problem in the first place. That trade is one we would make again, but it is the sort of thing worth being upfront about.&lt;/p&gt;

&lt;p&gt;And his advice is the correct advice. The gap between a laptop and a production container is where most first deployments die, and it is why we would rather you meet that container early than have it hidden from you until something breaks.&lt;/p&gt;

&lt;p&gt;Congratulations, Hardik. Well earned.&lt;/p&gt;

&lt;h2&gt;
  
  
  ZeroArch
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Live app: &lt;a href="https://app-1eb-3000.ny1.zerops.app/" rel="noopener noreferrer"&gt;https://app-1eb-3000.ny1.zerops.app/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source: &lt;a href="https://github.com/Hardikkhanduja/ZeroArch" rel="noopener noreferrer"&gt;https://github.com/Hardikkhanduja/ZeroArch&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Hardik's original build post: &lt;a href="https://www.linkedin.com/posts/hardik-khanduja-60a9a6287_buildinpublic-zeropshackathon-wemakedevs-activity-7491519883357286400-JiO2" rel="noopener noreferrer"&gt;https://www.linkedin.com/posts/hardik-khanduja-60a9a6287_buildinpublic-zeropshackathon-wemakedevs-activity-7491519883357286400-JiO2&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Zerops Challenge
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Hackathon page: &lt;a href="https://www.wemakedevs.org/hackathons/zerops" rel="noopener noreferrer"&gt;https://www.wemakedevs.org/hackathons/zerops&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Kickoff livestream with Kunal Kushwaha and Francesco Ciulla: &lt;a href="https://www.youtube.com/live/1bpt0iuXuNM" rel="noopener noreferrer"&gt;https://www.youtube.com/live/1bpt0iuXuNM&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ZCP quickstart, the route most builders took from prompt to live URL: &lt;a href="https://docs.zerops.io/zcp/quickstart" rel="noopener noreferrer"&gt;https://docs.zerops.io/zcp/quickstart&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Connect with Hardik
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;X: &lt;a href="https://x.com/HardikKhanduja" rel="noopener noreferrer"&gt;https://x.com/HardikKhanduja&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/Hardikkhanduja" rel="noopener noreferrer"&gt;https://github.com/Hardikkhanduja&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;LinkedIn: &lt;a href="https://www.linkedin.com/in/hardik-khanduja-60a9a6287/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/hardik-khanduja-60a9a6287/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More winner interviews from The Zerops Challenge are on the way.&lt;/p&gt;

</description>
      <category>zerops</category>
      <category>wemakedevs</category>
      <category>hackathon</category>
    </item>
    <item>
      <title>The rise of self-hosted PaaS — is $5 VPS all you need?</title>
      <dc:creator>Aleš</dc:creator>
      <pubDate>Fri, 23 Aug 2024 06:08:12 +0000</pubDate>
      <link>https://dev.to/zeropsio/the-rise-of-self-hosted-paas-is-5-vps-all-you-need-55no</link>
      <guid>https://dev.to/zeropsio/the-rise-of-self-hosted-paas-is-5-vps-all-you-need-55no</guid>
      <description>&lt;p&gt;There's a little trend going on over at the developer community on X, jokingly called "$5 VPS" — every time Vercel has an oopsie and sends someone a $100k bill, people jump to replies shouting, "Stop using Vercel, just buy this $5 VPS, I use it to handle 100k visits, no problem". So let's explore this trend and see what it really means.&lt;/p&gt;

&lt;p&gt;When hosting apps in 2024, out of the many different options for hosting, you have these four major groups — &lt;strong&gt;big cloud&lt;/strong&gt;, &lt;strong&gt;dev-focused PaaS&lt;/strong&gt;, &lt;strong&gt;"frontend" focused platforms&lt;/strong&gt; and &lt;strong&gt;VPS/VDS hosting&lt;/strong&gt;. Honorable mentions are managed Kubernetes platforms and specialized managed hosting, where nearly any open source software offers some sort of cloud managed version. Lines between these groups are blurry, as many providers branch out into multiple categories.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd22oqwdnrddlow48qfeq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd22oqwdnrddlow48qfeq.png" alt="hosting segments"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  A little bit of history
&lt;/h2&gt;

&lt;p&gt;How did we get here? The pioneer in cloud hosting was Amazon, with their AWS in 2006, followed by Azure and Google Cloud in 2010. Meanwhile Heroku launched properly in 2009, offering a fresh take on the cloud, using Amazon's infrastructure but offering a more user-friendly and focused approach. In 2013 DigitalOcean was founded, creating a mix between VPS and managed solutions. In 2014/2015, Netlify and ZEIT (eventually rebranded as Vercel) were founded, specializing in building and hosting serverless and frontend apps. Around 2019 a new generation of developer friendly PaaS started gaining traction, with Render and Fly leading the charge. Many smaller / narrowly specialized hosting platforms were founded since, many building on top of others.&lt;/p&gt;




&lt;h2&gt;
  
  
  Rise of the cheap VPS and self-hosted PaaS
&lt;/h2&gt;

&lt;p&gt;Now self-hosted PaaS on cheap hardware is getting popular. You can get 8 vCPU + 16 GB RAM server node for yourself for about 29.99 euro, that's surely enough to run everything one needs, right?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqk0rrvydlgzq9t9vjusi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqk0rrvydlgzq9t9vjusi.png" alt="Cheap VPS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On top of that, nowadays there are many popular open-source PaaS alternatives.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy46t6f6vjmw6xfwklzus.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy46t6f6vjmw6xfwklzus.png" alt="Self-hosted PaaS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And many dev-ifluencers are promoting them over PaaS.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuui0uce2w9raigcoo6r1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuui0uce2w9raigcoo6r1.png" alt="Dev influencers"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  The perfect solution?
&lt;/h2&gt;

&lt;p&gt;Sounds great in theory, you get the cheap hardware and you get all the functionality of a PaaS for free through open source software. But let's break down a couple of main differences between self-hosted PaaS and PaaS:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. You don't have to deal with the infrastructure
&lt;/h3&gt;

&lt;p&gt;PaaS providers typically run hundreds or even thousands of robust server nodes or use Amazon's EC2 infrastructure to provision resources for your containers. You don't have to monitor the infrastructure, handle the OS / Kernel updates, deal with faulty hardware, you never touch the actual underlying infrastructure.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. You get managed databases and storage solutions
&lt;/h3&gt;

&lt;p&gt;PaaS providers usually offer managed or semi-managed, production-ready services like Postgres, Redis (or open-source alternatives like Valkey), and an S3-compatible storage solution.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Build servers, High availability &amp;amp; backups
&lt;/h3&gt;

&lt;p&gt;It turns out that setting up a good infrastructure isn't easy, especially if you need to go beyond simple sites or apps. Your apps should be highly available with a load balancer in front of them, running on at least two containers, your primary database should run on at least three containers (write/read/read) with proxy load balancers in front. Each of these containers and load balancers should run on a different physical server. Storage should run on a different node. Your backups should be encrypted and saved on a different node. Builds should run on a different node.&lt;/p&gt;



&lt;p&gt;With a self-hosted PaaS you are responsible for the underlying infrastructure, scaling capabilities of the platform software don't really matter that much, because you still have to scale the hardware yourself. The database services on self-hosted PaaS will likely be nothing more than Docker Compose containers spun up on demand. While this might be fine as long as you properly handle the underlying file system, it's not the ideal solution for a production database. Database services simply require a little bit more care. You might also end up in a situation where you have too much RAM and not enough CPU, since the underlying infrastructure is not granular enough. The actual utilization of the paid resources might also vary, since you can't scale automatically on the fly or start your build servers only when you need to run builds. And the more applications you have, the messier things can get.&lt;/p&gt;

&lt;p&gt;But, can't you just run everything on a single server? Well, yes—especially if you're hosting only a couple of small, mostly static (or server-side generated/rendered) sites, and everything might work just fine. That is, until it doesn't.&lt;/p&gt;

&lt;p&gt;Ultimately, it comes down to whether the cost is worth the extra features and the comfort of not dealing with the infrastructure at all, while having a setup you can trust to scale with your needs.&lt;/p&gt;


&lt;h2&gt;
  
  
  Price comparison
&lt;/h2&gt;

&lt;p&gt;Price differences might vary a little across different use cases, and you usually you wouldn't probably need to use dedicated CPU for all services. But to make the comparison as accurate as possible, let's choose a medium-sized real-life production project with a typical setup and try to configure a similar setup for each provider, considering both features and resources. And when possible, dedicated or performance CPU cores will be used to normalize performance levels, as shared CPUs can have varying overcommitting ratios across different providers.&lt;/p&gt;
&lt;h3&gt;
  
  
  &amp;nbsp;Reference setup
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm0gw3c31a9gu65n2yam8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm0gw3c31a9gu65n2yam8.png" alt="Setup"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Prices for different providers
&lt;/h3&gt;

&lt;p&gt;You can find the configuration details by hovering over the items on &lt;a href="https://zerops.io" rel="noopener noreferrer"&gt;Zerops' website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9xxv5tl7xp86rx6bjizw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9xxv5tl7xp86rx6bjizw.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Zerops, the developer first PaaS
&lt;/h2&gt;

&lt;p&gt;At Zerops, we recognize the need for an affordable PaaS. In the best-case scenario, what you'd want as a developer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;the ability to create as identical as possible, but also affordable environments for each project, one environment for development, one for production, even one for each developer to use locally&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;platform (and unified setup) that can support you no matter if you need to host a small static app, or a large project with multiple databases and microservices and anything in between&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;flexibility of VPS&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An integral part of these requirements is that resources should be inexpensive, with all advanced features included by default. And so our vision is the perfect mix of &lt;strong&gt;developer experience&lt;/strong&gt;, &lt;strong&gt;flexibility&lt;/strong&gt;, &lt;strong&gt;robustness&lt;/strong&gt;, and &lt;strong&gt;scalability&lt;/strong&gt;, along with a pricing model that doesn't get in the way of good development practices. &lt;/p&gt;

&lt;p&gt;You can get all the features you'd expect from a PaaS, but also automatic scaling, unified environments and prices of resources approaching those of cheap VPS providers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzkqsd6r0rw0gzs5o5ks1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzkqsd6r0rw0gzs5o5ks1.png" alt="Zerops dashboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This pricing applies equally to both simple and complex projects, regardless of whether they have low or high traffic.&lt;/p&gt;
&lt;h2&gt;
  
  
  A 10-minute walkthrough of Zerops
&lt;/h2&gt;

&lt;p&gt;Sign up at &lt;a href="https://zerops.io" rel="noopener noreferrer"&gt;https://zerops.io&lt;/a&gt; and get up to $65 free credits to try Zerops out.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/gRidFn-51jM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cloud</category>
      <category>webdev</category>
      <category>startup</category>
    </item>
    <item>
      <title>Our journey integrating Qdrant in Zerops</title>
      <dc:creator>Zerops Devs</dc:creator>
      <pubDate>Thu, 22 Aug 2024 21:09:13 +0000</pubDate>
      <link>https://dev.to/zeropsio/our-journey-integrating-qdrant-in-zerops-4iea</link>
      <guid>https://dev.to/zeropsio/our-journey-integrating-qdrant-in-zerops-4iea</guid>
      <description>&lt;p&gt;Vector databases are revolutionizing how data is managed and stored for AI applications. At &lt;a href="https://zerops.io" rel="noopener noreferrer"&gt;Zerops&lt;/a&gt;, we recognized the growing importance of vector databases, leading us to integrate &lt;a href="https://qdrant.tech" rel="noopener noreferrer"&gt;Qdrant&lt;/a&gt;, one of the most popular options available. While it might seem straightforward to spin up a Qdrant instance using a Docker container, the reality of managing a production-ready vector database is far more complex. In this article, we'll explore the intricacies of Qdrant implementation and how we've addressed the challenges at Zerops.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding Data in Qdrant
&lt;/h2&gt;

&lt;p&gt;In Qdrant, data is organized into &lt;em&gt;collections&lt;/em&gt;, which are essentially named sets of vectors. Each collection contains vectors that share the same dimensionality and are compared using a specific metric. Collections in Qdrant are further divided into &lt;em&gt;shards&lt;/em&gt;—independent stores of vectors that can handle all the operations provided by collections.&lt;/p&gt;

&lt;p&gt;This architecture allows for distributing the workload across multiple Qdrant nodes in a cluster, enhancing performance and reliability. To ensure high availability (HA), shards can be replicated across nodes. Understanding this structure is crucial for grasping the complexities of deployment and management.&lt;/p&gt;




&lt;h2&gt;
  
  
  Deployment Options: Balancing Simplicity and Reliability
&lt;/h2&gt;

&lt;p&gt;At Zerops, we offer support for both &lt;strong&gt;HA&lt;/strong&gt; and &lt;strong&gt;non-HA&lt;/strong&gt; modes of Qdrant, giving you the flexibility to choose the configuration that best suits your needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Non-HA Mode: Simplicity for Non-Production Projects
&lt;/h3&gt;

&lt;p&gt;The Non-HA mode is perfect for non-production projects where data persistence isn't critical. This setup involves a single Qdrant node, making it easy to install and manage. In Zerops, deploying Qdrant in Non-HA mode is straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We run the Qdrant binary in a Ubuntu container.&lt;/li&gt;
&lt;li&gt;Port &lt;code&gt;6333&lt;/code&gt; is opened for communication.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Even if a data outage occurs, our backup solution ensures minimal disruption.&lt;/p&gt;

&lt;h3&gt;
  
  
  HA Cluster: Reliability for Production Environments
&lt;/h3&gt;

&lt;p&gt;For production environments where reliability and data availability are crucial, the HA cluster mode is essential. Setting up an HA cluster can be complex, but we've streamlined the process in Zerops:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cluster Configuration&lt;/strong&gt;: We enable cluster mode by adding &lt;code&gt;enabled: true&lt;/code&gt; to the configuration file and configure peer-to-peer communication on port &lt;code&gt;6335&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;   &lt;span class="na"&gt;cluster&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
     &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
     &lt;span class="na"&gt;p2p&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
       &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6335&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Node Setup&lt;/strong&gt;: Building a cluster requires careful configuration of each node:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The first node runs with a &lt;code&gt;--uri &amp;lt;uri&amp;gt;&lt;/code&gt; flag to let other peers know how to be reached.&lt;/li&gt;
&lt;li&gt;We make the address of the first peer &lt;code&gt;node1.db.&amp;lt;service_name&amp;gt;.zerops&lt;/code&gt; available in local DNS.&lt;/li&gt;
&lt;li&gt;All other peers start with the &lt;code&gt;--bootstrap &amp;lt;cluster_uri&amp;gt;&lt;/code&gt; flag to locate the rest of the cluster.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;High Availability&lt;/strong&gt;: Qdrant uses the &lt;a href="https://raft.github.io/" rel="noopener noreferrer"&gt;RAFT&lt;/a&gt; protocol, which requires more than 50% of the nodes to be functional. We automatically set up 3 nodes per cluster to meet this requirement.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automatic Replication&lt;/strong&gt;: By default, we automatically create replicas of any collection across all nodes. This safeguards against data loss if a node fails and serves as a safety net for incorrect &lt;code&gt;replication_factor&lt;/code&gt; configurations. This approach ensures data safety even if the &lt;code&gt;replication_factor&lt;/code&gt; is incorrectly configured by the user. If desired, this feature can be disabled by setting the &lt;code&gt;automaticClusterReplication&lt;/code&gt; parameter to &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Failure Recovery&lt;/strong&gt;: If a node fails, we automatically start a new node, connect it to the cluster, and create replicas of each collection and shard on the new node.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Node Cleanup&lt;/strong&gt;: We streamline this process by utilizing the Qdrant API to identify the current cluster Leader node, which then efficiently handles the removal of failed nodes.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Overcoming Technical Challenges
&lt;/h2&gt;

&lt;p&gt;During the integration of Qdrant with Zerops, we encountered and solved several complex issues. Fortunately, Qdrant offers robust tools to monitor and manage clusters through its well-documented &lt;a href="https://qdrant.tech/documentation/concepts/api/" rel="noopener noreferrer"&gt;REST&lt;/a&gt; and &lt;a href="https://github.com/qdrant/qdrant/blob/master/docs/grpc/proto/qdrant.proto" rel="noopener noreferrer"&gt;gRPC&lt;/a&gt; APIs.&lt;/p&gt;

&lt;p&gt;One issue we faced was that when a new node was added to the cluster, it appeared fully operational but couldn't receive new replicas. This is often due to ongoing data transfers between nodes, which can take considerable time. To address this, Qdrant provides the &lt;code&gt;POST /cluster/recover&lt;/code&gt; endpoint, which can be triggered on any non-leader node. This endpoint sends a request to the current leader to create a snapshot. The leader then sends this snapshot back to the requesting node for application. This snapshot captures the cluster's agreed-upon state at a specific point in time, allowing the cluster to recover and synchronize.&lt;/p&gt;




&lt;h2&gt;
  
  
  Data Backup: Safeguarding Your Qdrant Data
&lt;/h2&gt;

&lt;p&gt;At Zerops, we prioritize the safety and security of your data by providing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Daily, automatic backups at no extra cost&lt;/li&gt;
&lt;li&gt;Backups in the form of encrypted disk snapshots for each collection&lt;/li&gt;
&lt;li&gt;Secure upload to our S3-compatible backup storage&lt;/li&gt;
&lt;li&gt;Retention of up to 100 backups per stack for a maximum of one month&lt;/li&gt;
&lt;li&gt;Current maximum storage size per project of 25 GiB&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You also have the flexibility to choose between different backup options, including one-time backups, regular backups with a customizable frequency, or even disabling backups entirely.&lt;/p&gt;

&lt;p&gt;Our backup retention policy is designed to provide comprehensive coverage. For example, if you back up every hour, you'll have up to 4 days of backups available. This ensures that you have access to recent versions of your data in case of any issues.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Value of Managed Vector Databases
&lt;/h2&gt;

&lt;p&gt;While it's possible to set up and manage Qdrant yourself, doing so properly requires significant expertise and resources. Our managed Qdrant solution allows you to leverage the power of vector databases without the operational complexities. You can focus on developing AI features, while we ensure your vector database is running optimally, is highly available, and is protected against data loss.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0v9bia73xngem8loek9z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0v9bia73xngem8loek9z.png" alt="Highly available Qdrant service running in Zerops project" width="800" height="829"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ready to harness the power of vector databases without the operational headaches? &lt;a href="https://zerops.io" rel="noopener noreferrer"&gt;Give Zerops a try&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>database</category>
      <category>devops</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
