<?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: Mehdi Javani</title>
    <description>The latest articles on DEV Community by Mehdi Javani (@mjavani).</description>
    <link>https://dev.to/mjavani</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%2Fuser%2Fprofile_image%2F4040180%2F4db0dacd-31df-40f9-ba17-5621025ae4f3.jpeg</url>
      <title>DEV Community: Mehdi Javani</title>
      <link>https://dev.to/mjavani</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mjavani"/>
    <language>en</language>
    <item>
      <title>Building Roomzin: Why We Stopped Treating Booking Inventory as a Search Problem</title>
      <dc:creator>Mehdi Javani</dc:creator>
      <pubDate>Tue, 21 Jul 2026 20:42:13 +0000</pubDate>
      <link>https://dev.to/mjavani/building-roomzin-why-we-stopped-treating-booking-inventory-as-a-search-problem-oga</link>
      <guid>https://dev.to/mjavani/building-roomzin-why-we-stopped-treating-booking-inventory-as-a-search-problem-oga</guid>
      <description>&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%2Fz84akrf5l4i8p7tru96l.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%2Fz84akrf5l4i8p7tru96l.png" alt="Roomzin logo" width="800" height="153"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;While building software for booking platforms, I noticed a pattern.&lt;/p&gt;

&lt;p&gt;Almost every system eventually evolves into the same architecture.&lt;/p&gt;

&lt;p&gt;A cache.&lt;/p&gt;

&lt;p&gt;A search layer.&lt;/p&gt;

&lt;p&gt;A relational database.&lt;/p&gt;

&lt;p&gt;Background synchronization jobs.&lt;/p&gt;

&lt;p&gt;Eventually another cache.&lt;/p&gt;

&lt;p&gt;Every component solves a real problem, and most of them are excellent technologies.&lt;/p&gt;

&lt;p&gt;Yet as traffic grows, performance becomes increasingly difficult to predict. Not because any individual component is slow, but because answering a single booking request requires assembling data from multiple places.&lt;/p&gt;

&lt;p&gt;That observation eventually led me to build &lt;strong&gt;Roomzin&lt;/strong&gt;, a dedicated inventory engine for booking platforms.&lt;/p&gt;

&lt;p&gt;This article explains why.&lt;/p&gt;




&lt;h3&gt;
  
  
  A Booking Search Isn't Just a Search
&lt;/h3&gt;

&lt;p&gt;Imagine a traveler searching for a hotel.&lt;/p&gt;

&lt;p&gt;The platform has to answer questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the room available for these dates?&lt;/li&gt;
&lt;li&gt;What's the current price?&lt;/li&gt;
&lt;li&gt;Does this rate include breakfast?&lt;/li&gt;
&lt;li&gt;Is free cancellation available?&lt;/li&gt;
&lt;li&gt;Is it within the requested area?&lt;/li&gt;
&lt;li&gt;Does it include the requested amenities?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of those questions are particularly difficult.&lt;/p&gt;

&lt;p&gt;The challenge is that they're often answered by different parts of the system.&lt;/p&gt;

&lt;p&gt;Each lookup might be fast.&lt;/p&gt;

&lt;p&gt;Putting everything together isn't.&lt;/p&gt;

&lt;p&gt;As more features are added, more synchronization is required.&lt;/p&gt;

&lt;p&gt;More indexes.&lt;/p&gt;

&lt;p&gt;More cache invalidation.&lt;/p&gt;

&lt;p&gt;More background processing.&lt;/p&gt;

&lt;p&gt;Eventually the architecture spends more effort assembling an answer than finding it.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Wrong Abstraction
&lt;/h3&gt;

&lt;p&gt;One realization completely changed how I looked at booking platforms.&lt;/p&gt;

&lt;p&gt;The bottleneck usually isn't search.&lt;/p&gt;

&lt;p&gt;It's reconstruction.&lt;/p&gt;

&lt;p&gt;Booking inventory isn't simply text.&lt;/p&gt;

&lt;p&gt;It isn't key-value data.&lt;/p&gt;

&lt;p&gt;It isn't purely relational either.&lt;/p&gt;

&lt;p&gt;Every request combines the same dimensions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;property&lt;/li&gt;
&lt;li&gt;room type&lt;/li&gt;
&lt;li&gt;date&lt;/li&gt;
&lt;li&gt;pricing&lt;/li&gt;
&lt;li&gt;availability&lt;/li&gt;
&lt;li&gt;policies&lt;/li&gt;
&lt;li&gt;amenities&lt;/li&gt;
&lt;li&gt;location&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those pieces naturally belong together.&lt;/p&gt;

&lt;p&gt;Treating them as separate datasets means reconstructing the same answer over and over again.&lt;/p&gt;

&lt;p&gt;That's where both latency and operational complexity start to grow.&lt;/p&gt;




&lt;h3&gt;
  
  
  Asking a Different Question
&lt;/h3&gt;

&lt;p&gt;Instead of asking,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How can we make our search infrastructure faster?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I started asking,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Why are we treating booking inventory as a generic search problem at all?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Booking inventory has very predictable characteristics.&lt;/p&gt;

&lt;p&gt;Most traffic targets the near future.&lt;/p&gt;

&lt;p&gt;Availability changes constantly.&lt;/p&gt;

&lt;p&gt;Property metadata changes much less frequently.&lt;/p&gt;

&lt;p&gt;Queries combine the same dimensions repeatedly.&lt;/p&gt;

&lt;p&gt;Those aren't generic search workloads.&lt;/p&gt;

&lt;p&gt;They're inventory workloads.&lt;/p&gt;

&lt;p&gt;That distinction became the foundation of Roomzin.&lt;/p&gt;




&lt;h3&gt;
  
  
  Building Roomzin
&lt;/h3&gt;

&lt;p&gt;Rather than building another cache or another search layer, I built an engine specifically for booking inventory.&lt;/p&gt;

&lt;p&gt;Instead of storing different parts of the answer in different systems, Roomzin stores inventory around the way booking platforms actually query data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Properties&lt;/li&gt;
&lt;li&gt;Room types&lt;/li&gt;
&lt;li&gt;Daily inventory&lt;/li&gt;
&lt;li&gt;Rates&lt;/li&gt;
&lt;li&gt;Policies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The objective wasn't simply lower latency.&lt;/p&gt;

&lt;p&gt;It was reducing the amount of work required to answer a request.&lt;/p&gt;

&lt;p&gt;Performance became a consequence of that design.&lt;/p&gt;




&lt;h3&gt;
  
  
  Engineering Decisions
&lt;/h3&gt;

&lt;p&gt;Several implementation choices made that possible.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bitmask encoding for amenity and policy filtering&lt;/li&gt;
&lt;li&gt;H3 indexing for constant-time geographic lookups&lt;/li&gt;
&lt;li&gt;Segment-based parallel execution with minimal contention&lt;/li&gt;
&lt;li&gt;QUIC for cluster communication&lt;/li&gt;
&lt;li&gt;Compact binary protocol for SDK communication&lt;/li&gt;
&lt;li&gt;Rust for predictable performance and memory safety&lt;/li&gt;
&lt;li&gt;TiKV's Raft implementation for replication and high availability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these techniques are revolutionary on their own.&lt;/p&gt;

&lt;p&gt;The interesting part is how they work together around a workload that has very specific access patterns.&lt;/p&gt;




&lt;h3&gt;
  
  
  Current Results
&lt;/h3&gt;

&lt;p&gt;On a 4-core laptop with 60 million inventory records and 10,000 concurrent connections:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Median latency: &lt;strong&gt;0.7 ms&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;P99 latency: &lt;strong&gt;2.3 ms&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;P99.9 latency: &lt;strong&gt;5.1 ms&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Zero errors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Snapshots are created in around 10 ms and restore 60 million records in under 3 seconds.&lt;/p&gt;

&lt;p&gt;Rather than asking people to trust these numbers, I made the benchmark tooling publicly available so anyone can reproduce the results using their own hardware.&lt;/p&gt;




&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;p&gt;The biggest lesson wasn't about Rust.&lt;/p&gt;

&lt;p&gt;Or distributed systems.&lt;/p&gt;

&lt;p&gt;Or optimization.&lt;/p&gt;

&lt;p&gt;It was this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choosing the right abstraction usually matters more than making the existing abstraction faster.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For years I was thinking about caches, indexes and databases.&lt;/p&gt;

&lt;p&gt;Eventually I realized the real optimization was changing the model itself.&lt;/p&gt;

&lt;p&gt;Instead of treating booking inventory as something that needed to be reconstructed during every search, I started treating it as a first-class domain.&lt;/p&gt;

&lt;p&gt;Everything else followed naturally.&lt;/p&gt;




&lt;h3&gt;
  
  
  Try It Yourself
&lt;/h3&gt;

&lt;p&gt;If you're interested in the project, everything needed to evaluate it is publicly available.&lt;/p&gt;

&lt;p&gt;📖 Documentation&lt;br&gt;&lt;br&gt;
&lt;a href="https://m-javani.github.io/roomzin-doc/" rel="noopener noreferrer"&gt;https://m-javani.github.io/roomzin-doc/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🚀 Quickstart (3-node cluster with monitoring)&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/m-javani/roomzin-quickstart" rel="noopener noreferrer"&gt;https://github.com/m-javani/roomzin-quickstart&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📊 Benchmark Tool&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/m-javani/roomzin-bench" rel="noopener noreferrer"&gt;https://github.com/m-javani/roomzin-bench&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The benchmark runs in just a few minutes on your own hardware, so you can verify the results independently.&lt;/p&gt;

&lt;p&gt;I'd also love to hear how other teams approach inventory search. Have you built something similar, or do you solve the problem differently?&lt;/p&gt;

</description>
      <category>go</category>
      <category>booking</category>
      <category>distributed</category>
      <category>devops</category>
    </item>
    <item>
      <title>When Kafka Is Too Much and Redis Isn't Enough: Building a Simpler Distributed Job Queue</title>
      <dc:creator>Mehdi Javani</dc:creator>
      <pubDate>Tue, 21 Jul 2026 14:22:12 +0000</pubDate>
      <link>https://dev.to/mjavani/when-kafka-is-too-much-and-redis-isnt-enough-building-a-simpler-distributed-job-queue-5862</link>
      <guid>https://dev.to/mjavani/when-kafka-is-too-much-and-redis-isnt-enough-building-a-simpler-distributed-job-queue-5862</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: I built &lt;a href="https://github.com/m-javani/cue" rel="noopener noreferrer"&gt;Cue&lt;/a&gt;, a Raft-based distributed job queue that handles retries, dead-lettering, and durability without the operational overhead of Kafka or the manual plumbing of Redis. Single binary, zero external dependencies.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Problem We All Know
&lt;/h3&gt;

&lt;p&gt;You're building internal microservices. You need to dispatch background jobs — send emails, generate reports, process notifications. You need reliability: if a job fails, it should retry. If it keeps failing, you need to know about it.&lt;/p&gt;

&lt;p&gt;I've been through this cycle multiple times. Each time, the available options felt like they required either too much operational overhead or too much custom code.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Database Approach
&lt;/h4&gt;

&lt;p&gt;Most teams start with a PostgreSQL table. It's familiar. But at some point, you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Locking mechanisms&lt;/li&gt;
&lt;li&gt;Timeout handling&lt;/li&gt;
&lt;li&gt;Retry logic with backoff&lt;/li&gt;
&lt;li&gt;Cleanup jobs for stuck tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Suddenly, your application database becomes a bottleneck, and your job queue competes with your API traffic for resources.&lt;/p&gt;

&lt;h4&gt;
  
  
  Redis: Fast but Fragile
&lt;/h4&gt;

&lt;p&gt;Redis pub/sub is blazing fast but has zero durability — if a consumer disconnects, messages are gone. Redis Streams improve durability but still require you to build retry and dead-letter handling yourself. Plus, you're now managing Redis persistence, which adds its own operational complexity.&lt;/p&gt;

&lt;h4&gt;
  
  
  Kafka: Powerful but Overkill
&lt;/h4&gt;

&lt;p&gt;Kafka is optimized for high-throughput event streaming. It's battle-tested and capable. But if your only requirement is durable background jobs, you're paying for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Partition management&lt;/li&gt;
&lt;li&gt;Broker coordination&lt;/li&gt;
&lt;li&gt;Consumer group rebalancing&lt;/li&gt;
&lt;li&gt;ZooKeeper or KRaft&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's a lot of cognitive load for what should be a simple problem.&lt;/p&gt;

&lt;h4&gt;
  
  
  RabbitMQ: Mature but Another External Broker
&lt;/h4&gt;

&lt;p&gt;RabbitMQ is a mature, excellent broker. But it's another external system with its own operational model, clustering, and management overhead. &lt;/p&gt;




&lt;h3&gt;
  
  
  What I Actually Wanted
&lt;/h3&gt;

&lt;p&gt;A durable job queue with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Jobs that survive restarts&lt;/li&gt;
&lt;li&gt;✅ Automatic retries with exponential backoff&lt;/li&gt;
&lt;li&gt;✅ Dead letter queue for failed jobs&lt;/li&gt;
&lt;li&gt;✅ Simple deployment and scaling&lt;/li&gt;
&lt;li&gt;✅ No external dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I didn't need infinite persistence or petabyte-scale throughput. I needed something honest about its limits and simple to operate.&lt;/p&gt;




&lt;h3&gt;
  
  
  Enter Cue
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/m-javani/cue" rel="noopener noreferrer"&gt;Cue&lt;/a&gt; is a distributed, in-memory job queue built around three core ideas:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Consistency Without Complexity
&lt;/h4&gt;

&lt;p&gt;Cue uses the Raft consensus algorithm to keep all cluster nodes in sync. Every command is persisted to a Write-Ahead Log (WAL), so jobs survive restarts. If the leader crashes, a new one is elected automatically.&lt;/p&gt;

&lt;p&gt;No ZooKeeper. No external coordination. Just a single binary.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Built-in Retry and Failure Handling
&lt;/h4&gt;

&lt;p&gt;Automatic retries with exponential backoff are baked into the system, not an add-on. Failed jobs go to a dead letter queue with configurable retention policies. You don't write custom retry logic or cleanup scripts.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Simple Operations
&lt;/h4&gt;

&lt;p&gt;All cluster nodes are identical. No special roles to configure. The system runs as a single binary with zero external dependencies.&lt;/p&gt;

&lt;p&gt;The companion gateway, CueProxy, handles external communication — producers submit jobs via HTTP, consumers receive them over WebSockets. It's stateless and scales horizontally without coordination.&lt;/p&gt;

&lt;p&gt;Cue won't replace Kafka, RabbitMQ, or Redis. Those tools solve different problems. If your primary requirement is reliable background job execution with automatic retries, dead-letter handling, and minimal operational overhead, Cue is worth evaluating.&lt;/p&gt;




&lt;h3&gt;
  
  
  Architecture Overview
&lt;/h3&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%2F6cvzy36wvhulfkxhiu8l.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%2F6cvzy36wvhulfkxhiu8l.png" alt="Cue Architecture" width="800" height="613"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Communication between cluster nodes uses QUIC with mandatory mTLS. Between proxies and the cluster, it's TLS-secured. Authentication and encryption without complex configuration.&lt;/p&gt;




&lt;h3&gt;
  
  
  What Cue Does and Doesn’t Guarantee
&lt;/h3&gt;

&lt;h4&gt;
  
  
  What Cue Guarantees:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Durability:&lt;/strong&gt; Jobs survive cluster-wide restarts (WAL persistence)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;At-least-once delivery:&lt;/strong&gt; Duplicates are possible; idempotent consumers required for exactly-once&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic retries:&lt;/strong&gt; Exponential backoff with configurable limits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dead letter handling:&lt;/strong&gt; Configurable retention for failed jobs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backpressure:&lt;/strong&gt; Bounded queues with clear signaling&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  What Cue Doesn't Guarantee:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Infinite queue size (in-memory, bounded by RAM)&lt;/li&gt;
&lt;li&gt;Historical replay of acknowledged jobs&lt;/li&gt;
&lt;li&gt;Exactly-once delivery without client idempotency&lt;/li&gt;
&lt;li&gt;Petabyte-scale throughput&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cue is designed for predictable, bounded workloads — not for replacing Kafka as a long-term event store.&lt;/p&gt;




&lt;h3&gt;
  
  
  Performance
&lt;/h3&gt;

&lt;p&gt;The project includes &lt;code&gt;cue-benchmark&lt;/code&gt; that measures two distinct phases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ingestion:&lt;/strong&gt; How fast the system accepts jobs (producer → proxy → cluster)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dispatch:&lt;/strong&gt; How fast the system delivers jobs to consumers (cluster → proxy → consumer)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This isn't a synthetic micro-benchmark. It measures what you actually care about in production. You can run it in your own environment to understand throughput limits under your specific conditions.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: Early benchmarks show promising results, but performance characteristics depend heavily on your hardware, network, and workload patterns. I'd love community contributions to help optimize and validate performance across different environments.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  What You'll Actually Use
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Cue Cluster&lt;/strong&gt; – The core distributed system that holds your jobs, handles retries, and maintains consistency via Raft.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CueProxy&lt;/strong&gt; – The stateless gateway your applications talk to via HTTP and WebSockets. Handles authentication and passes jobs to the cluster.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;cue-benchmark&lt;/strong&gt; – A helper tool to test performance in your own environment (optional but useful).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Just two main pieces working together. No complex ecosystem to manage.&lt;/p&gt;




&lt;h3&gt;
  
  
  Community and Contribution
&lt;/h3&gt;

&lt;p&gt;The code is open-source under Apache 2.0. If the design resonates with you, I'd love your feedback:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🐛 Open an issue for bugs or feature requests&lt;/li&gt;
&lt;li&gt;💬 Challenge a design decision — I welcome constructive debate&lt;/li&gt;
&lt;li&gt;📊 Benchmark it in your own environment and share results&lt;/li&gt;
&lt;li&gt;📝 Improve the documentation&lt;/li&gt;
&lt;li&gt;🔧 Submit a pull request&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Early contributors have the opportunity to help shape where the project goes next. The architecture is flexible enough to evolve based on real-world needs.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cue is still in its early stages. The core architecture is in place, but there’s plenty of room to improve performance, expand the ecosystem, strengthen testing, and refine the developer experience. If the design resonates with you, I’d love your feedback — whether that’s opening an issue, challenging a design decision, benchmarking it in your own environment, improving the documentation, or submitting a pull request. Early contributors have the opportunity to help shape where the project goes next.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Resources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Main Project:&lt;/strong&gt; &lt;a href="https://github.com/m-javani/cue" rel="noopener noreferrer"&gt;github.com/m-javani/cue&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gateway:&lt;/strong&gt; &lt;a href="https://github.com/m-javani/cue-proxy" rel="noopener noreferrer"&gt;github.com/m-javani/cue-proxy&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Benchmark:&lt;/strong&gt; &lt;a href="https://github.com/m-javani/cue-benchmark" rel="noopener noreferrer"&gt;github.com/m-javani/cue-benchmark&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation:&lt;/strong&gt; &lt;a href="https://m-javani.github.io/cue-docs/" rel="noopener noreferrer"&gt;m-javani.github.io/cue-docs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>go</category>
      <category>backend</category>
      <category>distributedsystems</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
