<?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: Pritesh Kiri</title>
    <description>The latest articles on DEV Community by Pritesh Kiri (@priteshkiri).</description>
    <link>https://dev.to/priteshkiri</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F990356%2F6e2d7880-79bb-4d19-a6e2-15a9b1b42a8b.jpeg</url>
      <title>DEV Community: Pritesh Kiri</title>
      <link>https://dev.to/priteshkiri</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/priteshkiri"/>
    <language>en</language>
    <item>
      <title>Understanding System Reliability: The Foundation of Modern Infrastructure</title>
      <dc:creator>Pritesh Kiri</dc:creator>
      <pubDate>Tue, 23 Dec 2025 01:15:36 +0000</pubDate>
      <link>https://dev.to/priteshkiri/understanding-system-reliability-the-foundation-of-modern-infrastructure-2b26</link>
      <guid>https://dev.to/priteshkiri/understanding-system-reliability-the-foundation-of-modern-infrastructure-2b26</guid>
      <description>&lt;p&gt;Imagine waking up to discover that your company's main application is down. Customer calls are flooding in. Revenue is bleeding away at $100,000 per hour. Your team is scrambling, but you don't know where to start.&lt;/p&gt;

&lt;p&gt;This isn't a nightmare scenario, it's reality for &lt;a href="https://www.gartner.com/en/newsroom/press-releases/2014-07-02-gartner-says-cost-of-downtime-is-often-underestimated" rel="noopener noreferrer"&gt;98% of organizations&lt;/a&gt; at some point. The question isn't &lt;em&gt;if&lt;/em&gt; systems will face stress, but &lt;em&gt;how&lt;/em&gt; they'll respond when they do. That's reliability.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Reliability?
&lt;/h2&gt;

&lt;p&gt;Reliability isn't just about keeping systems online. It's fundamentally about how your applications and services deal with stress and disruptions gracefully.&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/hhfpEZ7dMLk"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;Think of reliability as a promise, a promise that your system will perform its intended function correctly and consistently when users need it. It's not about individual components never failing. In fact, in complex distributed systems, component failures are inevitable. What matters is how the &lt;em&gt;system&lt;/em&gt; responds.&lt;/p&gt;

&lt;p&gt;According to &lt;a href="https://aws.amazon.com/architecture/well-architected/" rel="noopener noreferrer"&gt;AWS's Well-Architected Framework&lt;/a&gt;, reliable systems share a critical characteristic: they're designed to recover from failure quickly rather than preventing every possible failure.&lt;/p&gt;

&lt;h3&gt;
  
  
  A System-Wide Property
&lt;/h3&gt;

&lt;p&gt;Reliability is a property of your entire system, not just isolated parts. Your application might have rock-solid code, but if your database crashes and there's no failover, your system isn't reliable. This holistic view is essential &lt;a href="https://sre.google/" rel="noopener noreferrer"&gt;site reliability engineering (SRE)&lt;/a&gt; practices emphasize that reliability must be considered across all layers of your infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Three Pillars of Reliability
&lt;/h2&gt;

&lt;p&gt;Reliability rests on three fundamental pillars:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Availability
&lt;/h3&gt;

&lt;p&gt;Availability represents the fraction of time your service is usable and accessible. When we say a system has &lt;a href="https://uptime.is/99.9" rel="noopener noreferrer"&gt;99.9% uptime&lt;/a&gt;, we're talking about less than 9 hours of downtime per year. The difference between 99.9% (three nines) and 99.99% (four nines) might seem small, but it translates to roughly 52 minutes versus 5 minutes of acceptable downtime annually, a tenfold difference.&lt;/p&gt;

&lt;p&gt;Organizations often establish &lt;a href="https://www.atlassian.com/incident-management/kpis/sla-vs-slo-vs-sli" rel="noopener noreferrer"&gt;Service Level Agreements (SLAs)&lt;/a&gt; that codify availability expectations, creating accountability between service providers and users.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Latency
&lt;/h3&gt;

&lt;p&gt;Latency measures how long it takes for your system to respond to requests. Here's the critical insight: users don't just care about average response times. A system that responds in 50 milliseconds on average but makes 5% of users wait 1,000 milliseconds has a serious reliability problem.&lt;/p&gt;

&lt;p&gt;This is why &lt;a href="https://www.dynatrace.com/news/blog/why-averages-suck-and-percentiles-are-great/" rel="noopener noreferrer"&gt;percentile-based latency metrics&lt;/a&gt; (p50, p95, p99) are more meaningful than averages. Google's research shows that &lt;a href="https://research.google/pubs/the-tail-at-scale/" rel="noopener noreferrer"&gt;tail latency&lt;/a&gt;, the slowest requests, often indicate systemic issues that impact user experience disproportionately.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Performance
&lt;/h3&gt;

&lt;p&gt;Performance encompasses your system's ability to handle load efficiently. This includes throughput, resource utilization, and how gracefully your system degrades under stress. A reliable system doesn't just work under normal conditions, it has predictable behavior even when pushed to its limits.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nginx.com/blog/performance-testing-continuous-integration-continuous-delivery/" rel="noopener noreferrer"&gt;Performance engineering&lt;/a&gt; helps identify bottlenecks before they become critical failures, ensuring systems can scale to meet demand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Reliability Matters: The Business Case
&lt;/h2&gt;

&lt;p&gt;The business impact of poor reliability is staggering. Research shows that in 2017, &lt;a href="https://itic-corp.com/blog/2017/12/2017-hourly-cost-of-downtime-soars-81-average-enterprise-loses-300000-per-hour/" rel="noopener noreferrer"&gt;98% of organizations reported that a single hour of downtime would cost over $100,000&lt;/a&gt;. For larger enterprises and critical services, costs can reach millions per hour.&lt;/p&gt;

&lt;p&gt;But the impact extends beyond immediate financial losses. Every outage breaks customer trust, and in today's competitive landscape, users have alternatives a click away. Studies show that &lt;a href="https://www.forbes.com/sites/forbestechcouncil/2018/03/27/the-true-cost-of-a-bad-reputation/" rel="noopener noreferrer"&gt;88% of online consumers are less likely to return&lt;/a&gt; to a site after a bad experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Paradox: Embracing Failure to Achieve Reliability
&lt;/h2&gt;

&lt;p&gt;Here's the thing: achieving high reliability doesn't mean preventing every failure, that's impossible and economically unviable. Instead, it means building systems that fail gracefully, recover quickly, and maintain acceptable service levels even when components fail.&lt;/p&gt;

&lt;p&gt;Companies like &lt;a href="https://netflixtechblog.com/tagged/chaos-engineering" rel="noopener noreferrer"&gt;Netflix&lt;/a&gt; and &lt;a href="https://sre.google/sre-book/introduction/" rel="noopener noreferrer"&gt;Google&lt;/a&gt; have embraced this philosophy. They deliberately inject failures into production systems through &lt;a href="https://principlesofchaos.org/" rel="noopener noreferrer"&gt;chaos engineering&lt;/a&gt; to ensure their systems can handle real-world disruptions. Netflix's famous &lt;a href="https://netflix.github.io/chaosmonkey/" rel="noopener noreferrer"&gt;Chaos Monkey&lt;/a&gt; randomly terminates instances in production to verify that services can tolerate instance failures.&lt;/p&gt;

&lt;p&gt;They've learned that experience with failure is a prerequisite for creating reliable systems. As the &lt;a href="https://principlesofchaos.org/" rel="noopener noreferrer"&gt;Principles of Chaos Engineering&lt;/a&gt; state: "Chaos Engineering is the discipline of experimenting on a system in order to build confidence in the system's capability to withstand turbulent conditions in production."&lt;/p&gt;

&lt;h2&gt;
  
  
  Building for Reality, Not Perfection
&lt;/h2&gt;

&lt;p&gt;Modern reliability practices recognize several key truths:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Failure is normal&lt;/strong&gt;: In distributed systems with thousands of components, &lt;a href="https://sre.google/sre-book/embracing-risk/" rel="noopener noreferrer"&gt;something is always broken&lt;/a&gt;. The question is whether your system can continue functioning despite individual failures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Redundancy matters&lt;/strong&gt;: &lt;a href="https://aws.amazon.com/architecture/well-architected/" rel="noopener noreferrer"&gt;Multiple layers of redundancy&lt;/a&gt;—from application instances to data centers to geographic regions—ensure that single points of failure don't cascade into total outages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observability is essential&lt;/strong&gt;: You can't improve what you can't measure. &lt;a href="https://www.honeycomb.io/what-is-observability" rel="noopener noreferrer"&gt;Comprehensive monitoring, logging, and tracing&lt;/a&gt; enable teams to understand system behavior and respond quickly to issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Automation accelerates recovery&lt;/strong&gt;: &lt;a href="https://kubernetes.io/docs/concepts/workloads/controllers/" rel="noopener noreferrer"&gt;Automated remediation&lt;/a&gt; and self-healing systems reduce mean time to recovery (MTTR) from hours to minutes or seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Path Forward
&lt;/h2&gt;

&lt;p&gt;Reliability isn't a feature you add at the end—it's a fundamental property you architect from the beginning. Organizations that treat reliability as an afterthought inevitably face costly outages and erosion of customer trust.&lt;/p&gt;

&lt;p&gt;The journey to highly reliable systems requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clear &lt;a href="https://sre.google/sre-book/service-level-objectives/" rel="noopener noreferrer"&gt;service level objectives (SLOs)&lt;/a&gt; that balance reliability with development velocity&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.ibm.com/topics/failure-mode-and-effects-analysis" rel="noopener noreferrer"&gt;Failure mode analysis&lt;/a&gt; to understand potential breaking points&lt;/li&gt;
&lt;li&gt;Regular &lt;a href="https://litmuschaos.io/" rel="noopener noreferrer"&gt;chaos experiments&lt;/a&gt; to validate assumptions about system behavior&lt;/li&gt;
&lt;li&gt;A culture that treats incidents as learning opportunities rather than blame opportunities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In our next video, we'll explore &lt;strong&gt;resilience&lt;/strong&gt;: the system's ability to withstand and recover from those inevitable failures. Because in distributed systems, it's not about &lt;em&gt;if&lt;/em&gt; things will break, it's about &lt;em&gt;when&lt;/em&gt;, and how prepared you are to handle it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ready to start your chaos engineering journey?&lt;/strong&gt; Explore &lt;a href="https://litmuschaos.io/" rel="noopener noreferrer"&gt;LitmusChaos&lt;/a&gt; to begin testing your system's reliability today.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>devops</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Making Chaos Conversational: A Beginner-Friendly Guide to the LitmusChaos MCP Server</title>
      <dc:creator>Pritesh Kiri</dc:creator>
      <pubDate>Thu, 20 Nov 2025 19:04:06 +0000</pubDate>
      <link>https://dev.to/litmus-chaos/making-chaos-conversational-a-beginner-friendly-guide-to-the-litmuschaos-mcp-server-2ia</link>
      <guid>https://dev.to/litmus-chaos/making-chaos-conversational-a-beginner-friendly-guide-to-the-litmuschaos-mcp-server-2ia</guid>
      <description>&lt;p&gt;Modern software systems are becoming more distributed, more complex, and more dependent on reliability than ever before. But reliability isn’t something you bolt on at the end, it’s something you test deliberately. That’s exactly where chaos engineering comes in: by intentionally injecting controlled failures, teams can understand how their systems behave under stress and make them more resilient.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://litmuschaos.io/" rel="noopener noreferrer"&gt;LitmusChaos&lt;/a&gt; has been one of the most widely adopted open-source frameworks for cloud-native chaos engineering. But even with its intuitive UI (ChaosCenter), CRDs, and CLI, we know that YAMLs and APIs can still feel intimidating, especially for teams just starting out.&lt;/p&gt;

&lt;p&gt;So, how do we make chaos engineering easier, faster, and more accessible?&lt;/p&gt;

&lt;p&gt;This is where the &lt;a href="https://docs.litmuschaos.io/docs/mcp-server/overview" rel="noopener noreferrer"&gt;LitmusChaos MCP Server&lt;/a&gt; comes in.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is MCP and Why Does It Matter?
&lt;/h2&gt;

&lt;p&gt;MCP (Model Context Protocol) is a new standard that allows AI assistants (like Claude or other LLM-powered tools) to communicate with external systems through structured, well-defined tools.&lt;/p&gt;

&lt;p&gt;Think of MCP as a bridge that lets your AI assistant:&lt;br&gt;
    • List chaos experiments&lt;br&gt;
    • Run experiments&lt;br&gt;
    • Stop them&lt;br&gt;
    • Check statuses&lt;br&gt;
    • Explore infrastructures&lt;br&gt;
    • Build probes&lt;/p&gt;

&lt;p&gt;Using just simple natural language.&lt;/p&gt;

&lt;p&gt;So instead of writing YAML or navigating multiple UI screens, you can simply ask:&lt;/p&gt;

&lt;p&gt;“Run a pod-delete experiment in my staging environment.”&lt;/p&gt;

&lt;p&gt;And the MCP Server will take care of it.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Did LitmusChaos Build an MCP Server?
&lt;/h2&gt;

&lt;p&gt;Chaos engineering is powerful, but sometimes feels “too technical” or “too risky” for new practitioners. The LitmusChaos MCP Server solves this problem by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Lowering the barrier to chaos. Anyone on your team can run chaos with natural language — no CRDs required.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improving speed and accessibility. Fast discovery, instant experiment triggers, quick monitoring — all via an AI assistant.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integrating chaos into existing workflows. Teams already using AI agents can now tie chaos steps directly into operational workflows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enforcing safe, scoped access. MCP tools only expose specific, controlled actions. Tokens and namespaces ensure safe execution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Making chaos collaborative. Experiment reviews, run summaries, and probe outputs become conversational and easy to share.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ultimately, this brings chaos engineering closer to everyday development and reliability workflows.&lt;/p&gt;

&lt;p&gt;Check out our LitmusChaos MCP Server YouTube Playlist for a detailed guide.&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/-d_5VLr5Hmo"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up the LitmusChaos MCP Server
&lt;/h2&gt;

&lt;p&gt;Below is a simple guide to getting the MCP Server running on your cloud desktop or local system.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;p&gt;You will need:&lt;br&gt;
    • Go 1.21 or newer&lt;br&gt;
    • Access to an existing LitmusChaos ChaosCenter&lt;br&gt;
    • A valid project and API token&lt;br&gt;
    • Any MCP-enabled AI client (e.g., Claude Desktop)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clone the repository
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/litmuschaos/litmus-mcp-server.git
cd litmus-mcp-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Build the binary
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;make build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Getting Your Credentials&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Chaos Center Endpoint: URL of your LitmusChaos installation&lt;/li&gt;
&lt;li&gt;Project ID: Found in Chaos Center project settings&lt;/li&gt;
&lt;li&gt;Access Token: Generate from Chaos Center → Settings → Access Tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Connecting it with your MCP Client (Using Claude here)
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "mcpServers": {
    "litmuschaos": {
      "command": "/path/to/litmuschaos-mcp-server",
      "env": {
        "CHAOS_CENTER_ENDPOINT": "http://localhost:8080",
        "LITMUS_PROJECT_ID": "your-project-id",
        "LITMUS_ACCESS_TOKEN": "your-token"
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Available Tools
&lt;/h2&gt;

&lt;p&gt;The server provides 17 comprehensive tools for chaos engineering operations:&lt;/p&gt;

&lt;h3&gt;
  
  
  Experiment Management
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;list_chaos_experiments&lt;/code&gt; - List all chaos experiments with filtering&lt;br&gt;
&lt;code&gt;get_chaos_experiment&lt;/code&gt; - Get detailed experiment information&lt;br&gt;
&lt;code&gt;run_chaos_experiment&lt;/code&gt; - Execute experiments immediately&lt;br&gt;
&lt;code&gt;stop_chaos_experiment&lt;/code&gt; - Stop running experiments&lt;/p&gt;

&lt;h3&gt;
  
  
  Execution Monitoring
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;list_experiment_runs&lt;/code&gt; - List experiment execution history&lt;br&gt;
&lt;code&gt;get_experiment_run_details&lt;/code&gt; - Get detailed run information with logs&lt;/p&gt;

&lt;h3&gt;
  
  
  Infrastructure Management
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;list_chaos_infrastructures&lt;/code&gt; - List all registered infrastructures&lt;br&gt;
&lt;code&gt;get_infrastructure_details&lt;/code&gt; - Get detailed infrastructure information&lt;br&gt;
&lt;code&gt;register_chaos_infrastructure&lt;/code&gt; - Register new Kubernetes infrastructures&lt;/p&gt;

&lt;h3&gt;
  
  
  Environment Organization
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;list_environments&lt;/code&gt; - List all environments&lt;br&gt;
&lt;code&gt;create_environment&lt;/code&gt; - Create new environments for the organization&lt;/p&gt;

&lt;h3&gt;
  
  
  Resilience Validation
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;list_resilience_probes&lt;/code&gt; - List all configured resilience probes&lt;br&gt;
&lt;code&gt;create_resilience_probe&lt;/code&gt; - Create HTTP, CMD, K8s, or Prometheus probes&lt;/p&gt;

&lt;h3&gt;
  
  
  Discovery &amp;amp; Analytics
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;list_chaos_hubs&lt;/code&gt; - List available ChaosHubs&lt;br&gt;
&lt;code&gt;get_chaos_faults&lt;/code&gt; - Browse available chaos faults&lt;br&gt;
&lt;code&gt;get_experiment_statistics&lt;/code&gt; - Get comprehensive platform statistics&lt;/p&gt;

&lt;h2&gt;
  
  
  Examples
&lt;/h2&gt;

&lt;p&gt;These are real-world prompts you can use once your MCP server is connected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;List all experiments
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Show me all chaos experiments available in my staging environment.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Trigger an experiment
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Run the pod-delete-basic experiment and share the run ID.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Check experiment status
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Show me the timeline and probe results of run &amp;lt;RUN_ID&amp;gt;.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Stop running chaos
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Stop the currently running pod delete experiment.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Explore ChaosHub
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;List all Kubernetes pod-level faults from the ChaosHub.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Build a probe
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create an HTTP probe that checks /health returns 200 within 2 seconds.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Add a new environment
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create a new environment called chaos-lab.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why use MCP?
&lt;/h2&gt;

&lt;p&gt;As systems become more distributed and reliability becomes more critical, we need chaos engineering tools that integrate into everyday workflows.&lt;/p&gt;

&lt;p&gt;The LitmusChaos MCP Server delivers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ease of use → chaos through natural language&lt;/li&gt;
&lt;li&gt;Faster adoption → no need to learn CRDs or YAML&lt;/li&gt;
&lt;li&gt;Better collaboration → experiments become team-friendly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The LitmusChaos MCP Server is more than just a technical integration, it’s a new way of practicing chaos engineering. Making chaos accessible through natural language removes barriers and encourages teams to adopt reliability as a mindset, not a one-time activity.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>mcp</category>
      <category>devops</category>
      <category>beginners</category>
    </item>
    <item>
      <title>LitmusChaos October Highlights - Hacktoberfest, Meetups &amp; More!</title>
      <dc:creator>Pritesh Kiri</dc:creator>
      <pubDate>Wed, 05 Nov 2025 04:14:40 +0000</pubDate>
      <link>https://dev.to/litmus-chaos/litmuschaos-october-highlights-hacktoberfest-meetups-more-51h6</link>
      <guid>https://dev.to/litmus-chaos/litmuschaos-october-highlights-hacktoberfest-meetups-more-51h6</guid>
      <description>&lt;p&gt;October has been one of the most exciting and eventful months for the &lt;a href="https://litmuschaos.io/" rel="noopener noreferrer"&gt;LitmusChaos&lt;/a&gt; community. With &lt;a href="https://hacktoberfest.com/" rel="noopener noreferrer"&gt;Hacktoberfest&lt;/a&gt; 2025 in full swing, we went all in, from hosting community-driven events to supporting contributors, shipping releases, and celebrating amazing open-source contributions. &lt;/p&gt;

&lt;h2&gt;
  
  
  Hacktoberfest 2025 (The Month of Open Source)
&lt;/h2&gt;

&lt;p&gt;Hacktoberfest has always been special for LitmusChaos, and this year, we made it even bigger. The community came together to contribute to LitmusChaos and Litmus Docs, improving the project’s security, user experience, and accessibility with Litmus 4.0.&lt;/p&gt;

&lt;p&gt;Here’s what we achieved together in October:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/litmuschaos/litmus" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; Stars: 112 new stars&lt;/li&gt;
&lt;li&gt;LitmusChaos Issues: 42 created → 27 closed (PRs merged), 15 in progress&lt;/li&gt;
&lt;li&gt;Litmus Docs Issues: 34 created → 31 closed (PRs merged), 3 in progress&lt;/li&gt;
&lt;li&gt;New Contributors

&lt;ul&gt;
&lt;li&gt;  23 new contributors to LitmusChaos&lt;/li&gt;
&lt;li&gt;  18 new contributors to Litmus Docs&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;These numbers reflect the incredible passion our contributors showed throughout Hacktoberfest. A big shoutout to everyone who helped strengthen LitmusChaos through code, docs, and discussions!&lt;/p&gt;

&lt;h2&gt;
  
  
  Release Spotlight: LitmusChaos MCP Server
&lt;/h2&gt;

&lt;p&gt;One of the biggest highlights of October was the release of the &lt;a href="https://docs.litmuschaos.io/docs/next/mcp-server/overview" rel="noopener noreferrer"&gt;LitmusChaos MCP&lt;/a&gt; (Model Context Protocol) Server, a major step toward making Chaos Engineering more accessible and intelligent.&lt;/p&gt;

&lt;p&gt;The Litmus MCP Server allows users to interact with chaos experiments using natural language, bridging the gap between developers and automation. Imagine simply asking, “Run a pod-delete experiment on the checkout service,” and seeing it happen seamlessly — that’s the power MCP brings to the Litmus ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adoption Continues to Grow
&lt;/h2&gt;

&lt;p&gt;LitmusChaos continues to see strong adoption within the cloud-native ecosystem.&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.amazonaws.com%2Fuploads%2Farticles%2Fi9r9fn1pq0yw918e1n1c.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.amazonaws.com%2Fuploads%2Farticles%2Fi9r9fn1pq0yw918e1n1c.png" alt="LitmusChaos Installion for October month"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;October Installation Trends:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mid-month spike: around 5.2K installations (Oct 6–7)&lt;/li&gt;
&lt;li&gt;End-of-month range: roughly 3.8K–4K installations&lt;/li&gt;
&lt;li&gt;Average daily installations: around 3.5K–4K&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s heartening to see teams worldwide continue to adopt ChaosCenter to build more resilient systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  New Blog of the Month
&lt;/h2&gt;

&lt;p&gt;We published a new blog this month:&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/litmus-chaos/making-chaos-engineering-accessible-introducing-the-litmuschaos-mcp-server-kif" class="crayons-story__hidden-navigation-link"&gt;Making Chaos Engineering Accessible: Introducing the LitmusChaos MCP Server&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/litmus-chaos"&gt;
            &lt;img alt="LitmusChaos logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F3775%2F088d3139-19f0-44be-863d-26f2d731731b.png" class="crayons-logo__image"&gt;
          &lt;/a&gt;

          &lt;a href="/priteshkiri" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F990356%2F6e2d7880-79bb-4d19-a6e2-15a9b1b42a8b.jpeg" alt="priteshkiri profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/priteshkiri" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Pritesh Kiri
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Pritesh Kiri
                
              
              &lt;div id="story-author-preview-content-2965955" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/priteshkiri" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F990356%2F6e2d7880-79bb-4d19-a6e2-15a9b1b42a8b.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Pritesh Kiri&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/litmus-chaos" class="crayons-story__secondary fw-medium"&gt;LitmusChaos&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/litmus-chaos/making-chaos-engineering-accessible-introducing-the-litmuschaos-mcp-server-kif" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 28 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/litmus-chaos/making-chaos-engineering-accessible-introducing-the-litmuschaos-mcp-server-kif" id="article-link-2965955"&gt;
          Making Chaos Engineering Accessible: Introducing the LitmusChaos MCP Server
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mcp"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mcp&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/chaosengineering"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;chaosengineering&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/litmus"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;litmus&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/litmuschaos"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;litmuschaos&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/litmus-chaos/making-chaos-engineering-accessible-introducing-the-litmuschaos-mcp-server-kif" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;6&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/litmus-chaos/making-chaos-engineering-accessible-introducing-the-litmuschaos-mcp-server-kif#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




&lt;p&gt;The post dives into how the Model Context Protocol (MCP) is bringing natural language interfaces to chaos engineering, making it easier than ever to design and execute experiments using LitmusChaos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Growing Our Content &amp;amp; Community Reach
&lt;/h2&gt;

&lt;p&gt;We’ve been consistent in sharing knowledge, updates, and community stories across our platforms.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/channel/UCa57PMqmz_j0wnteRa9nCaw" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;13 new videos published:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Community &amp;amp; Contributor Calls&lt;/li&gt;
&lt;li&gt;Getting Started with Litmus” — a 10-part video series&lt;/li&gt;
&lt;li&gt;16 new subscribers joined our channel


  &lt;iframe src="https://www.youtube.com/embed/FSNS5cxqPzc"&gt;
  &lt;/iframe&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://x.com/LitmusChaos" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;+12 new followers and some great engagement on Hacktoberfest updates&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.linkedin.com/company/litmuschaos" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;+51 new followers — welcome to all the new faces joining the chaos community!&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://kubernetes.slack.com/?redir=%2Farchives%2FCNXNB0ZTN" rel="noopener noreferrer"&gt;Slack&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;42 new members joined our community Slack &lt;a href="https://kubernetes.slack.com/?redir=%2Farchives%2FCNXNB0ZTN" rel="noopener noreferrer"&gt;Community&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  October Offline Meetups
&lt;/h2&gt;

&lt;p&gt;We hosted two exciting in-person meetups in October to celebrate Hacktoberfest and connect with our amazing contributors!&lt;/p&gt;

&lt;p&gt;📍 LitmusChaos x Hacktoberfest Meetup — Bangalore (Oct 4)&lt;/p&gt;

&lt;p&gt;We kicked off October with a bang at the Harness Bangalore office, where 130+ attendees joined us to celebrate open source and learn about chaos engineering.&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/RPXbq4pypns"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;📍 Hacktoberfest Hyderabad Meetup — in Collaboration with DigitalOcean (Oct 11)&lt;/p&gt;

&lt;p&gt;Next up, we partnered with DigitalOcean for the Hyderabad Hacktoberfest meetup, proudly sponsored by Harness.&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/NO_Vfaqnk7E"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;h2&gt;
  
  
  Community &amp;amp; Contributor Calls
&lt;/h2&gt;

&lt;p&gt;Our monthly calls were buzzing with energy and participation!&lt;/p&gt;

&lt;h3&gt;
  
  
  Community Call
&lt;/h3&gt;

&lt;p&gt;Topics we discussed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Release of Litmus v3.22.0&lt;/li&gt;
&lt;li&gt;Active Hacktoberfest activities and contributions&lt;/li&gt;
&lt;li&gt;Introduction to Litmus MCP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/w0LeKaANqKQ"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;h3&gt;
  
  
  Contributor Call
&lt;/h3&gt;

&lt;p&gt;Highlights included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recap of community contributions during Hacktoberfest&lt;/li&gt;
&lt;li&gt;Open PRs discussion and shoutouts to active contributors&lt;/li&gt;
&lt;li&gt;Contributor best practices and guidelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/xwRqo1uXNCQ"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;These calls continue to be a great space for collaboration, feedback, and celebrating progress together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;October was nothing short of amazing — full of learning, contribution, and connection.&lt;br&gt;
From new contributors joining the fold to community-driven meetups and continuous adoption growth, LitmusChaos continues to thrive, powered by its community ❤️&lt;/p&gt;

&lt;p&gt;As we move into November, we’re excited to keep the momentum going. More releases, new experiments, and continued community engagement await!&lt;/p&gt;

&lt;p&gt;🔗 Join the conversation on &lt;a href="https://kubernetes.slack.com/?redir=%2Farchives%2FCNXNB0ZTN" rel="noopener noreferrer"&gt;Slack&lt;/a&gt; and follow us on &lt;a href="https://www.linkedin.com/company/litmuschaos" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;, &lt;a href="https://www.youtube.com/channel/UCa57PMqmz_j0wnteRa9nCaw" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;, and &lt;a href="https://x.com/LitmusChaos" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; for the latest updates.&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>news</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Making Chaos Engineering Accessible: Introducing the LitmusChaos MCP Server</title>
      <dc:creator>Pritesh Kiri</dc:creator>
      <pubDate>Tue, 28 Oct 2025 03:56:16 +0000</pubDate>
      <link>https://dev.to/litmus-chaos/making-chaos-engineering-accessible-introducing-the-litmuschaos-mcp-server-kif</link>
      <guid>https://dev.to/litmus-chaos/making-chaos-engineering-accessible-introducing-the-litmuschaos-mcp-server-kif</guid>
      <description>&lt;p&gt;Chaos Engineering has always been about one thing: building resilient systems. But let’s be honest, while the idea sounds great, getting started with chaos experiments has never been easy.&lt;/p&gt;

&lt;p&gt;YAMLs, CLI commands, complex setups, and a fear of “what if I break something?” often stop developers and SREs before they even begin. Even with tools like &lt;a href="https://litmuschaos.io/" rel="noopener noreferrer"&gt;LitmusChaos&lt;/a&gt;, which simplify a lot of this, there’s still a learning curve, especially for those new to resilience testing.&lt;/p&gt;

&lt;p&gt;That’s exactly what the &lt;a href="https://github.com/litmuschaos/litmus-mcp-server" rel="noopener noreferrer"&gt;LitmusChaos MCP Server&lt;/a&gt; aims to change.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge with Chaos Engineering
&lt;/h2&gt;

&lt;p&gt;Chaos Engineering helps you intentionally inject failures into your systems to test how they respond.&lt;/p&gt;

&lt;p&gt;But here’s the catch for many teams: it feels too technical, too complex, or too risky.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need to understand multiple CRDs and YAML definitions.&lt;/li&gt;
&lt;li&gt;You have to set up and manage chaos infrastructures.&lt;/li&gt;
&lt;li&gt;You have to know how to interpret experimental results.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And if you’re a developer or DevOps engineer already juggling deployments, observability, and CI/CD,  adding “run chaos experiments” to that list can feel overwhelming.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where LitmusChaos Fits In
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/litmuschaos/litmus" rel="noopener noreferrer"&gt;LitmusChaos&lt;/a&gt; was built to solve exactly that. To make Chaos Engineering simpler, more organized, and more collaborative.&lt;br&gt;
With &lt;strong&gt;ChaosCenter&lt;/strong&gt;, you get a single pane of glass to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run and manage chaos experiments.&lt;/li&gt;
&lt;li&gt;Track resilience scores.&lt;/li&gt;
&lt;li&gt;Monitor chaos infrastructures (agents).&lt;/li&gt;
&lt;li&gt;Visualize experiment runs and results.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It has helped teams integrate chaos into their CI/CD pipelines and production workflows.&lt;/p&gt;

&lt;p&gt;But… even with all these features, there’s still one big barrier left: You still need to know how to use it.&lt;/p&gt;

&lt;p&gt;Now imagine if you could talk to your system and say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Run a pod-delete experiment on the payment service in production.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And it just does it.&lt;/p&gt;

&lt;p&gt;That’s exactly what LitmusChaos MCP Server enables. It turns Chaos Engineering into a conversational experience.&lt;/p&gt;

&lt;p&gt;No YAMLs. No CLI. No UI clicks.&lt;/p&gt;

&lt;p&gt;Just natural language.&lt;/p&gt;
&lt;h2&gt;
  
  
  LitmusChaos MCP Server
&lt;/h2&gt;

&lt;p&gt;The LitmusChaos MCP Server is a Go-based Model Context Protocol (MCP) server that connects your AI assistant (like Claude) directly to your ChaosCenter.&lt;br&gt;
It provides a complete interface to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manage experiments&lt;/li&gt;
&lt;li&gt;Control infrastructures&lt;/li&gt;
&lt;li&gt;Organize environments&lt;/li&gt;
&lt;li&gt;Run and monitor resilience probes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All through natural language interactions.&lt;/p&gt;

&lt;p&gt;In simple words, the MCP Server acts as a bridge between your AI assistant and your Chaos Engineering setup, letting anyone perform chaos operations just by asking.&lt;/p&gt;
&lt;h2&gt;
  
  
  What You Can Do With It?
&lt;/h2&gt;

&lt;p&gt;Here are some examples of what the MCP Server can handle through natural language:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Experiment Management
&lt;/h3&gt;

&lt;p&gt;“List all chaos experiments.”&lt;br&gt;
“Run the pod-delete experiment on the frontend pods.”&lt;br&gt;
“Stop the network latency experiment.”&lt;br&gt;
You can trigger, stop, or describe chaos experiments instantly.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Infrastructure Operations
&lt;/h3&gt;

&lt;p&gt;“List all active chaos infrastructures.”&lt;br&gt;
“Show me the status of the production infra.”&lt;br&gt;
You get a complete overview of all connected Litmus agents.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Environment Organization
&lt;/h3&gt;

&lt;p&gt;“Create a new environment called staging.”&lt;br&gt;
“Show me all experiments in the PROD environment.”&lt;br&gt;
Organize chaos operations by environments for better structure.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Resilience Probes
&lt;/h3&gt;

&lt;p&gt;“Create an HTTP probe that checks the payment API every 5 seconds.”&lt;br&gt;
“List all existing probes in my project.”&lt;br&gt;
You can validate steady-state conditions or system health with simple requests.&lt;/p&gt;
&lt;h3&gt;
  
  
  5. Analytics &amp;amp; Monitoring
&lt;/h3&gt;

&lt;p&gt;“Show me all failed experiments last week.”&lt;br&gt;
“What’s the resiliency score of my production environment?”&lt;br&gt;
It makes chaos data easy to access and interpret.&lt;/p&gt;
&lt;h2&gt;
  
  
  Getting Started with MCP Server
&lt;/h2&gt;

&lt;p&gt;You can get up and running in just a few minutes.&lt;br&gt;
Quick setup&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Clone and build
git clone https://github.com/litmuschaos/litmus-mcp-server.git
cd litmus-mcp-server
make build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, just add it to your Claude or any other MCP Host, and you’re ready to talk to your ChaosCenter through natural language.&lt;/p&gt;

&lt;p&gt;Follow &lt;a href="https://github.com/litmuschaos/litmus-mcp-server" rel="noopener noreferrer"&gt;this&lt;/a&gt; guide to learn more about setting up the Litmus MCP server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why It Matters
&lt;/h2&gt;

&lt;p&gt;The MCP Server is more than just a new integration; it’s a mindset shift for chaos engineering.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For Developers: No more YAML confusion. Learn chaos the easy way.&lt;/li&gt;
&lt;li&gt;For SREs: Run, monitor, and analyze chaos experiments faster.&lt;/li&gt;
&lt;li&gt;For DevOps Teams: Automate resilience testing with AI-driven workflows.&lt;/li&gt;
&lt;li&gt;For Organizations: Empower every engineer, not just chaos experts, to build resilient systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It lowers the barrier of entry so that anyone, regardless of chaos experience, can perform meaningful resilience testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Future of Accessible Chaos Engineering
&lt;/h2&gt;

&lt;p&gt;The LitmusChaos MCP Server marks a big step forward, where Chaos Engineering meets AI-driven accessibility.&lt;/p&gt;

&lt;p&gt;It makes resilience testing approachable, interactive, and intuitive.&lt;br&gt;
The future of chaos isn’t about running YAML files; it’s about asking the right questions, getting answers, and improving system resilience effortlessly.&lt;/p&gt;

&lt;p&gt;So go ahead,  try it out, connect your assistant, and let’s make Chaos Engineering something everyone can do.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>chaosengineering</category>
      <category>litmus</category>
      <category>litmuschaos</category>
    </item>
    <item>
      <title>LitmusChaos Community Highlights - September 2025 Recap</title>
      <dc:creator>Pritesh Kiri</dc:creator>
      <pubDate>Thu, 23 Oct 2025 11:00:52 +0000</pubDate>
      <link>https://dev.to/litmus-chaos/litmuschaos-community-highlights-september-2025-recap-e0c</link>
      <guid>https://dev.to/litmus-chaos/litmuschaos-community-highlights-september-2025-recap-e0c</guid>
      <description>&lt;p&gt;September was an exciting month for the &lt;a href="https://litmuschaos.io/" rel="noopener noreferrer"&gt;LitmusChaos&lt;/a&gt; community! &lt;/p&gt;

&lt;p&gt;From insightful discussions in our calls to strong GitHub activity and growing engagement on social platforms, the community continued to thrive as we geared up for Litmus 4.0 and Hacktoberfest. Here’s a look at what happened in September.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub updates
&lt;/h2&gt;

&lt;p&gt;The community remained active on &lt;a href="https://github.com/litmuschaos/litmus" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; throughout September:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stars gained: 35 ⭐&lt;/li&gt;
&lt;li&gt;Issues: 9 total (6 open, 3 closed)&lt;/li&gt;
&lt;li&gt;Pull Requests: 7 total (4 open, 3 merged)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The activity shows steady engagement from contributors and continued momentum in maintaining and improving LitmusChaos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Litmus Installations
&lt;/h2&gt;

&lt;p&gt;Here is the graph showing our installation chart for September:&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.amazonaws.com%2Fuploads%2Farticles%2F1t6u55egtqcvajafmhq2.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.amazonaws.com%2Fuploads%2Farticles%2F1t6u55egtqcvajafmhq2.png" alt="graph showing litmuschaos installation chart for September"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mid-month spike&lt;/strong&gt;: Around 1.2K installations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;End-of-month jump&lt;/strong&gt;: Roughly 3.6K installations on Sep 30&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Average daily installations&lt;/strong&gt;: ~300–350&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This surge indicates growing interest in LitmusChaos as more users start experimenting and running chaos experiments.&lt;/p&gt;

&lt;h2&gt;
  
  
  New Videos &amp;amp; Resources
&lt;/h2&gt;

&lt;p&gt;We released 4 new videos in September to help the community stay informed and get started with LitmusChaos:&lt;/p&gt;

&lt;p&gt;1) “New Look of Litmus” – a fresh tour of Litmus features&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/TfqmgtrnYL4"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;2) Community Call – discussions on releases and upcoming events&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/w0LeKaANqKQ"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;3) “Learn Litmus in 20 Minutes” – a quick-start tutorial &lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/KIteEoZZmzQ"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;4) Contributors Call – recap and guidance for contributors&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/TOGzGdEDLc8"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;h2&gt;
  
  
  Community and Contributor Calls Recap
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Community Call Highlights
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Litmus v3.21.0 release updates&lt;/li&gt;
&lt;li&gt;Upcoming events: Hacktoberfest &amp;amp; meetups&lt;/li&gt;
&lt;li&gt;GitHub activities &amp;amp; contributions&lt;/li&gt;
&lt;li&gt;Sneak peek into Litmus 4.0 and Litmus MCP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Watch the full video &lt;a href="https://www.youtube.com/watch?v=w0LeKaANqKQ" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Contributors Call Highlights
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Recap of community contributions so far&lt;/li&gt;
&lt;li&gt;Review of open PRs and recent contributions&lt;/li&gt;
&lt;li&gt;Best practices for contributing&lt;/li&gt;
&lt;li&gt;Hacktoberfest introduction and contribution planning&lt;/li&gt;
&lt;li&gt;How to start contributing to LitmusChaos and follow the contributor guidelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Watch the full video &lt;a href="https://www.youtube.com/watch?v=TOGzGdEDLc8" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Social &amp;amp; Community Growth
&lt;/h2&gt;

&lt;p&gt;September also saw engagement across our social platforms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LinkedIn: 20+ new followers&lt;/li&gt;
&lt;li&gt;Slack: 15+ new members&lt;/li&gt;
&lt;li&gt;Twitter: 5+ new followers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We shared the new videos and key discussions across these channels, encouraging more people to join the community and participate in LitmusChaos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Join the Litmus Community
&lt;/h2&gt;

&lt;p&gt;If you’re passionate about open source and want to help improve developer experience, we’d love to have you!&lt;br&gt;
Here’s how you can get involved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Star the &lt;a href="https://github.com/litmuschaos/litmus" rel="noopener noreferrer"&gt;LitmusChaos GitHub repo&lt;/a&gt; — it really helps!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://kubernetes.slack.com/?redir=%2Farchives%2FCNXNB0ZTN" rel="noopener noreferrer"&gt;Join our Slack community&lt;/a&gt; to chat, ask questions, or collaborate. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Subscribe to our &lt;a href="https://www.youtube.com/channel/UCa57PMqmz_j0wnteRa9nCaw" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt; channel for tutorials, community calls, and updates. Recently released the "&lt;a href="https://www.youtube.com/watch?v=FSNS5cxqPzc&amp;amp;list=PLmM1fgu30seVxW-Oobc7VOfPHbQAzICvS" rel="noopener noreferrer"&gt;Getting Started with LitmusChaos&lt;/a&gt;" Playlist.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What’s next?
&lt;/h2&gt;

&lt;p&gt;October is shaping up to be another exciting month:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hacktoberfest is around the corner. Get ready to contribute!&lt;/li&gt;
&lt;li&gt;More updates from Litmus 4.0 and Litmus MCP&lt;/li&gt;
&lt;li&gt;Continued growth in community engagement and learning resources&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stay tuned, keep experimenting, and let’s continue building chaos together! ⚡&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>kubernetes</category>
      <category>litmus</category>
      <category>litmuschaos</category>
    </item>
    <item>
      <title>I improved the Developer Experience of Litmus Documentation</title>
      <dc:creator>Pritesh Kiri</dc:creator>
      <pubDate>Wed, 22 Oct 2025 12:05:12 +0000</pubDate>
      <link>https://dev.to/priteshkiri/i-improved-the-developer-experience-of-litmus-documentation-1hgi</link>
      <guid>https://dev.to/priteshkiri/i-improved-the-developer-experience-of-litmus-documentation-1hgi</guid>
      <description>&lt;p&gt;I recently made my first contribution to the &lt;a href="https://docs.litmuschaos.io/" rel="noopener noreferrer"&gt;LitmusChaos documentation&lt;/a&gt;, and it was all about improving the developer experience.&lt;/p&gt;

&lt;p&gt;This was also my first ever contribution after joining Harness as a Community Manager for the LitmusChaos community.&lt;/p&gt;

&lt;p&gt;In this blog, I want to share the story behind it, what I worked on, why developer experience matters, and how small changes in docs can make a big difference.&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.amazonaws.com%2Fuploads%2Farticles%2Fho6cc1v4gcunjwrf4rhu.gif" 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.amazonaws.com%2Fuploads%2Farticles%2Fho6cc1v4gcunjwrf4rhu.gif" alt="Alt text of a GIF" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A little about my background
&lt;/h2&gt;

&lt;p&gt;Before joining LitmusChaos, I had the opportunity to work with many developer tools and open source projects.&lt;br&gt;
During that time, I noticed one thing: developers don’t just care about features; they care about how easy it is to use them.&lt;/p&gt;

&lt;p&gt;And that’s what we call &lt;strong&gt;Developer Experience&lt;/strong&gt; or DX.&lt;/p&gt;

&lt;h2&gt;
  
  
  What exactly is Developer Experience?
&lt;/h2&gt;

&lt;p&gt;Developer Experience (DX) is all about how developers feel when they interact with your product from the first line of documentation to the final deployment.&lt;/p&gt;

&lt;p&gt;A good developer experience means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developers can find what they need quickly.&lt;/li&gt;
&lt;li&gt;Docs are clear and easy to follow.&lt;/li&gt;
&lt;li&gt;The setup is smooth, and errors are explained well.&lt;/li&gt;
&lt;li&gt;It feels effortless to get started and contribute.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it like user experience (UX), but for developers.&lt;/p&gt;

&lt;p&gt;When the docs are confusing or poorly structured, it can lead to frustration and wasted time. But when the docs are intuitive, developers become more confident and productive, and that’s how projects grow faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I noticed in the old docs
&lt;/h2&gt;

&lt;p&gt;When I explored the existing documentation, a few things felt a little tricky:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The docs were not very easy to navigate.&lt;/li&gt;
&lt;li&gt;The top navigation bar had a version manager, but switching between versions was confusing. And it was a bit cluttered.&lt;/li&gt;
&lt;li&gt;The version selector felt disconnected from where users actually manage versions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And many more things.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I improved
&lt;/h2&gt;

&lt;p&gt;After exploring the docs and discussing with a few contributors, I decided to focus on improving navigation and structure, so developers could find things faster and with less confusion.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sidebar redesign
&lt;/h3&gt;

&lt;p&gt;The new sidebar is more readable. You can now see the entire content structure at a glance. It’s easier to find the section you’re looking for.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Before&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2F76a9du9g4szwi39uj78d.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.amazonaws.com%2Fuploads%2Farticles%2F76a9du9g4szwi39uj78d.png" alt="Litmus documentation old sidebar" width="800" height="1206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fhv82itegsv1qunare2qz.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.amazonaws.com%2Fuploads%2Farticles%2Fhv82itegsv1qunare2qz.png" alt="Litmus documentation new sidebar" width="800" height="1210"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Version manager fix
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Moved the version display next to the version manager.&lt;/li&gt;
&lt;li&gt;Now, switching versions feels more natural and intuitive.&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2F34969j9763t4wamfuhik.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.amazonaws.com%2Fuploads%2Farticles%2F34969j9763t4wamfuhik.png" alt="Litmus documentation improved version manager on top" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Top navigation improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Rearranged items on the right-hand side for better clarity.&lt;/li&gt;
&lt;li&gt;Replaced text-based action items with icons.&lt;/li&gt;
&lt;li&gt;Added a Call-To-Action (CTA) button for important actions. i.e., the "Try Litmus" button.&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fhutdsrsb26r3vbfh2h3o.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.amazonaws.com%2Fuploads%2Farticles%2Fhutdsrsb26r3vbfh2h3o.png" alt="Litmus documentation improved top navigation bar" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Announcement bar
&lt;/h3&gt;

&lt;p&gt;Finally, I added an announcement bar at the top of the docs.&lt;br&gt;
It provides quick access to our &lt;a href="https://github.com/litmuschaos/litmus" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;, making it easier for contributors and users to explore, open issues, or star the project ⭐.&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.amazonaws.com%2Fuploads%2Farticles%2Fw0vvv5s1mqdktwllrmaz.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.amazonaws.com%2Fuploads%2Farticles%2Fw0vvv5s1mqdktwllrmaz.png" alt="Litmus documentation announcement bar introduction" width="800" height="106"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why These Changes Matter
&lt;/h2&gt;

&lt;p&gt;Documentation is often the first place a developer visits when they’re trying out a project.&lt;/p&gt;

&lt;p&gt;If that experience is smooth, they’ll likely:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Try the tool,&lt;/li&gt;
&lt;li&gt;Recommend it to others, or even&lt;/li&gt;
&lt;li&gt;Become long-term contributors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s the real power of good documentation — it doesn’t just explain your project; it helps grow your community.&lt;/p&gt;

&lt;h2&gt;
  
  
  Join the Litmus Community
&lt;/h2&gt;

&lt;p&gt;If you’re passionate about open source and want to help improve developer experience, we’d love to have you!&lt;br&gt;
Here’s how you can get involved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Star the &lt;a href="https://github.com/litmuschaos/litmus" rel="noopener noreferrer"&gt;LitmusChaos GitHub repo&lt;/a&gt; — it really helps!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://kubernetes.slack.com/?redir=%2Farchives%2FCNXNB0ZTN" rel="noopener noreferrer"&gt;Join our Slack community&lt;/a&gt; to chat, ask questions, or collaborate. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Subscribe to our &lt;a href="https://www.youtube.com/channel/UCa57PMqmz_j0wnteRa9nCaw" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt; channel for tutorials, community calls, and updates. Recently released the "&lt;a href="https://www.youtube.com/watch?v=FSNS5cxqPzc&amp;amp;list=PLmM1fgu30seVxW-Oobc7VOfPHbQAzICvS" rel="noopener noreferrer"&gt;Getting Started with LitmusChaos&lt;/a&gt;" Playlist.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/litmuschaos/litmus-docs" rel="noopener noreferrer"&gt;Contribute to docs&lt;/a&gt; — whether it’s fixing typos, improving content, or adding new pages, every contribution counts.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;This contribution was not just about changing the UI. It was about improving how developers interact with our docs. Even small improvements can make a big difference in usability.&lt;/p&gt;

&lt;p&gt;Thanks for sticking with me till the end! I’m excited to continue making Litmus docs even better.&lt;/p&gt;

&lt;p&gt;I’ll keep sharing more behind-the-scenes stories about what we’re building in the Litmus community, so stay tuned 🚀&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>litmuschaos</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Building an Ed-Tech Sales CRM using ToolJet 📈</title>
      <dc:creator>Pritesh Kiri</dc:creator>
      <pubDate>Tue, 11 Jun 2024 12:33:52 +0000</pubDate>
      <link>https://dev.to/tooljet/building-an-ed-tech-sales-crm-using-tooljet-3e2i</link>
      <guid>https://dev.to/tooljet/building-an-ed-tech-sales-crm-using-tooljet-3e2i</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;An effective Customer Relationship Management (CRM) system can help Ed-tech companies streamline their sales processes, maintain customer information, and enhance customer interactions.  &lt;/p&gt;

&lt;p&gt;In this tutorial, we will guide you through the process of building an Ed-tech sales CRM using &lt;a href="https://www.tooljet.com" rel="noopener noreferrer"&gt;ToolJet&lt;/a&gt; and &lt;a href="https://docs.tooljet.com/docs/tooljet-db/tooljet-database" rel="noopener noreferrer"&gt;ToolJet Database&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;Here is a quick preview of the CRM that we’ll be building in ToolJet.&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.amazonaws.com%2Fuploads%2Farticles%2Fr253djk8qvb5proe7wwi.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.amazonaws.com%2Fuploads%2Farticles%2Fr253djk8qvb5proe7wwi.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  ToolJet &lt;a href="https://github.com/ToolJet/ToolJet" rel="noopener noreferrer"&gt;(https://github.com/ToolJet/ToolJet)&lt;/a&gt;: An &lt;strong&gt;open-source&lt;/strong&gt;, low-code business application builder. &lt;a href="https://www.tooljet.com/signup" rel="noopener noreferrer"&gt;Sign up&lt;/a&gt; for a free ToolJet cloud account or &lt;a href="https://docs.tooljet.com/docs/setup/try-tooljet/" rel="noopener noreferrer"&gt;run ToolJet on your local machine&lt;/a&gt; using Docker.&lt;/li&gt;
&lt;li&gt;  Basics of JavaScript: Basic knowledge of JavaScript can be handy for implementing dynamic functionality in your ToolJet applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setting up the ToolJet Database
&lt;/h2&gt;

&lt;p&gt;This section will teach you how to set up the database for our CRM app. We will be using &lt;strong&gt;ToolJet Database&lt;/strong&gt; for this application.  &lt;/p&gt;

&lt;p&gt;Log in to your ToolJet account and click on the ToolJet Database icon in the left sidebar. We will be creating two tables, one will be for the &lt;em&gt;&lt;strong&gt;sales_revenue&lt;/strong&gt;&lt;/em&gt; and other for &lt;em&gt;&lt;strong&gt;sales_executives&lt;/strong&gt;&lt;/em&gt;. Let's start by creating the database tables.  &lt;/p&gt;

&lt;p&gt;Create a new table with the following columns and rename it to &lt;em&gt;&lt;strong&gt;sales_revenue&lt;/strong&gt;&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;id (primary key/auto-generated)&lt;/li&gt;
&lt;li&gt;course(varchar)&lt;/li&gt;
&lt;li&gt;number_of_courses_sold (int)&lt;/li&gt;
&lt;li&gt;discount (varchar)&lt;/li&gt;
&lt;li&gt;customer_name (int)&lt;/li&gt;
&lt;li&gt;customer_email (varchar)&lt;/li&gt;
&lt;li&gt;customer_country (varchar)&lt;/li&gt;
&lt;li&gt;customer_age_group (int)&lt;/li&gt;
&lt;li&gt;revenue  (int)&lt;/li&gt;
&lt;li&gt;se_name (varchar)&lt;/li&gt;
&lt;li&gt;profession (varchar)&lt;/li&gt;
&lt;li&gt;sale_date (varchar)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Create a new table with the following columns and rename it to &lt;strong&gt;&lt;em&gt;sales_executives&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;id (primary key/auto-generated)&lt;/li&gt;
&lt;li&gt;name(varchar)&lt;/li&gt;
&lt;li&gt;email (varchar)&lt;/li&gt;
&lt;li&gt;phone (varchar)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We recommend adding some dummy data to the table so that we have something to work with when we begin the app development process.&lt;/p&gt;

&lt;h2&gt;
  
  
  UI Development
&lt;/h2&gt;

&lt;p&gt;Once you are done setting up the database, click on the &lt;strong&gt;Apps&lt;/strong&gt; in the sidebar and create a new app with the name &lt;strong&gt;Ed-Tech Sales CRM&lt;/strong&gt;. After the successful creation of the App, you will land on the App-Bulider page.&lt;/p&gt;

&lt;p&gt;Now we can drag and drop ToolJet's pre-built components to build the app's UI quickly.&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.amazonaws.com%2Fuploads%2Farticles%2Fc0a51v03j5zu67jda3t4.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.amazonaws.com%2Fuploads%2Farticles%2Fc0a51v03j5zu67jda3t4.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is the structure of the app that we will be building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Header&lt;/li&gt;
&lt;li&gt;Tabs

&lt;ul&gt;
&lt;li&gt;Overview&lt;/li&gt;
&lt;li&gt;Sales Executives&lt;/li&gt;
&lt;li&gt;Revenue&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Let us start will building the &lt;strong&gt;Header&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Drag and drop a &lt;a href="https://docs.tooljet.com/docs/widgets/container/" rel="noopener noreferrer"&gt;Container&lt;/a&gt; component on the canvas from the &lt;a href="https://docs.tooljet.com/docs/tooljet-concepts/what-are-components" rel="noopener noreferrer"&gt;components library&lt;/a&gt; on the right and rename it to &lt;em&gt;header&lt;/em&gt;. Containers are used to group related components in the App-Builder.&lt;/li&gt;
&lt;li&gt; Resize it and change its color to #2E425A and border radius to 8.&lt;/li&gt;
&lt;li&gt;  Inside the Container component, add two &lt;a href="https://docs.tooljet.com/docs/widgets/text" rel="noopener noreferrer"&gt;Text&lt;/a&gt; component for and rename it to &lt;em&gt;brandName&lt;/em&gt; and &lt;em&gt;CRMTitle&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt; In the &lt;em&gt;brandName&lt;/em&gt; component change the Data to &lt;strong&gt;TOOLJET&lt;/strong&gt; and change the color to white, font size to 20, font weight to bolder and letter spacing to 6.&lt;/li&gt;
&lt;li&gt; In &lt;em&gt;CRMTitle&lt;/em&gt; component, change the Data to &lt;strong&gt;Ed-Tech Sales CRM&lt;/strong&gt; and change the color to white, font size to 18. &lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fmlt6zglchrt0v0mgx95x.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.amazonaws.com%2Fuploads%2Farticles%2Fmlt6zglchrt0v0mgx95x.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Renaming components can be useful as the application grows, allowing easy reference to component-related values throughout various parts of the application.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Drag and Drop the &lt;a href="https://docs.tooljet.com/docs/widgets/tabs/" rel="noopener noreferrer"&gt;Tabs&lt;/a&gt; component and change the tab names to &lt;strong&gt;Overview&lt;/strong&gt;, &lt;strong&gt;Sales Executives&lt;/strong&gt; and &lt;strong&gt;Revenue&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In &lt;strong&gt;Revenue&lt;/strong&gt; tab, add a &lt;a href="https://docs.tooljet.com/docs/widgets/table/table-properties" rel="noopener noreferrer"&gt;Table&lt;/a&gt; component which will contain the data from the &lt;em&gt;&lt;strong&gt;sales_revenue&lt;/strong&gt;&lt;/em&gt; table in the database.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now add a &lt;a href="https://docs.tooljet.com/docs/widgets/modal/" rel="noopener noreferrer"&gt;Modal&lt;/a&gt; component, place it above the table, and rename it to &lt;em&gt;saleDetails&lt;/em&gt;. In properties change the title to &lt;strong&gt;Sale Details&lt;/strong&gt;, Trigger button label to &lt;strong&gt;Add sale&lt;/strong&gt; and change the color of button to primary color ( &lt;code&gt;#2E425A&lt;/code&gt; ).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Frvre20m2z5q6b70ufoy2.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.amazonaws.com%2Fuploads%2Farticles%2Frvre20m2z5q6b70ufoy2.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Now we need to add input fields in this modal. Here we will be dividing the modal into two parts, first is &lt;strong&gt;Customer Details&lt;/strong&gt; and &lt;strong&gt;Revenue Details&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In &lt;strong&gt;Customer Details&lt;/strong&gt;, add &lt;a href="https://docs.tooljet.com/docs/widgets/text-input/" rel="noopener noreferrer"&gt;Text Input&lt;/a&gt; component for &lt;strong&gt;Name&lt;/strong&gt; and &lt;strong&gt;Email&lt;/strong&gt;, Dropdown component for &lt;strong&gt;Country&lt;/strong&gt;, &lt;strong&gt;Course&lt;/strong&gt; and &lt;strong&gt;Sales Executive name&lt;/strong&gt;, Radio button component for the &lt;strong&gt;Age group&lt;/strong&gt; and &lt;strong&gt;profession&lt;/strong&gt; and a Date component for the &lt;strong&gt;Sale date&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For the &lt;strong&gt;Country&lt;/strong&gt; dropdown you can add the following data in Option values and labels:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{{ ["Argentina", "Australia", "Brazil", "Canada", "China", "Egypt", "France", "Germany", "Greece", "India", "Indonesia", "Italy", "Japan", "Mexico", "Netherlands", "New Zealand", "Russia", "Saudi Arabia", "South Africa", "South Korea", "Spain", "Switzerland", "Thailand", "United Kingdom", "United States"]
}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt; For the Courses dropdown you can add the following data in Option values and labels:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{{ ["Marketing Management", "Data Science Fundamentals", "Financial Accounting", "Introduction to Psychology", "Business Ethics", "Digital Marketing Strategy", "Creative Writing Workshop", "Computer Programming Basics", "Public Speaking Mastery", "Introduction to Economics", "Full Stack Web Development"]
}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For the &lt;strong&gt;Sales Executive&lt;/strong&gt; dropdown, we will be fetching data from the &lt;em&gt;&lt;strong&gt;sales_executives&lt;/strong&gt;&lt;/em&gt; table in the database.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Here is the quick preview of &lt;em&gt;salesDetails&lt;/em&gt; modal UI, you can change the design at your convenience.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fytip4je8zxdrk9exv7ta.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.amazonaws.com%2Fuploads%2Farticles%2Fytip4je8zxdrk9exv7ta.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In &lt;em&gt;salesDetails&lt;/em&gt; modal, as you can see we have the &lt;strong&gt;dynamic UI&lt;/strong&gt; elements that will show the values of &lt;strong&gt;Revenue without discount&lt;/strong&gt; and &lt;strong&gt;Total revenue generated&lt;/strong&gt; based on what they choose in &lt;strong&gt;Courses&lt;/strong&gt; &lt;em&gt;sold&lt;/em&gt; and &lt;strong&gt;Discounts&lt;/strong&gt; offered. The HEX color codes for both of these Text components are &lt;code&gt;#4A90E2&lt;/code&gt; and &lt;code&gt;#9013FE&lt;/code&gt; respectively.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To build these dynamic text elements we need to add &lt;strong&gt;on change&lt;/strong&gt; event handlers on &lt;strong&gt;Courses sold&lt;/strong&gt; and &lt;strong&gt;Discounts offered&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We will run a script that will calculate both of these revenues and then will populate those details in the Text components.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open the Query Manager and add a Javascript query. Name it &lt;strong&gt;updateRevenue&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the following code to this query. This will return the values that we can use in the &lt;strong&gt;Revenue without discount&lt;/strong&gt; and &lt;strong&gt;Total revenue generated&lt;/strong&gt; in UI respectively. Make sure you rename the number input component to &lt;em&gt;courses&lt;/em&gt; and the radio button component to &lt;em&gt;discount&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const revenue = components.courses.value * 2000 * (100 - components.discount.value) * 0.01
const revenueWithoutDiscount = components.courses.value * 2000

return {revenue, revenueWithoutDiscount}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;&lt;a href="https://docs.tooljet.com/docs/tooljet-concepts/what-are-events" rel="noopener noreferrer"&gt;Events&lt;/a&gt; in ToolJet are used to run queries, show alerts, and other functionalities based on triggers such as button clicks or query completion&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Update the Data property of the &lt;strong&gt;Revenue without discount&lt;/strong&gt; text component: &lt;code&gt;{{queries.updateRevenue.data.revenueWithoutDiscount ? queries.updateRevenue.data.revenueWithoutDiscount : 0}}&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Update the Data property of the Total revenue generated text component: &lt;code&gt;{{queries.updateRevenue.data.revenue ? queries.updateRevenue.data.revenue : 0}}&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fsy5hjuyxp8h1xfzu9lqe.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.amazonaws.com%2Fuploads%2Farticles%2Fsy5hjuyxp8h1xfzu9lqe.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Once you do these updates, just add &lt;strong&gt;on change&lt;/strong&gt; and &lt;strong&gt;on select&lt;/strong&gt; event handlers in &lt;strong&gt;Course sold&lt;/strong&gt; number input and &lt;strong&gt;Discount offered&lt;/strong&gt; radio button input respectively and add &lt;strong&gt;updateRevenue&lt;/strong&gt; query.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In &lt;strong&gt;Sales executive&lt;/strong&gt; tab also, we will be adding a modal and a table, so drag and drop both of these components in the tab.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Change the modal size to small and height to 300px. Also change the color of trigger button to &lt;code&gt;#2E425A&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now add three text components for &lt;strong&gt;Name&lt;/strong&gt;, &lt;strong&gt;Email&lt;/strong&gt; and &lt;strong&gt;Phone&lt;/strong&gt; and a submit button in the modal. Change the color of submit button to &lt;code&gt;#2E425A&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fk942srsx87ut0xdnr0mh.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.amazonaws.com%2Fuploads%2Farticles%2Fk942srsx87ut0xdnr0mh.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In the &lt;strong&gt;Overview&lt;/strong&gt; tab, add three &lt;a href="https://docs.tooljet.com/docs/widgets/statistics/" rel="noopener noreferrer"&gt;Statistics&lt;/a&gt; components. Hide the secondary value and change the primary color to &lt;code&gt;#F28585&lt;/code&gt; for all three components.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set the primary value labels to &lt;strong&gt;Total revenue&lt;/strong&gt;, &lt;strong&gt;Total courses&lt;/strong&gt;, and &lt;strong&gt;Total customers&lt;/strong&gt;. Keep the primary values as default for now. We will be update it later once we add the data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now add seven &lt;a href="https://docs.tooljet.com/docs/widgets/chart/" rel="noopener noreferrer"&gt;Chart&lt;/a&gt; components from the component library. Set the chart type to pie for five of them and to bar for the remaining two.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Change the background color of all the charts to &lt;code&gt;#F1F4FC&lt;/code&gt;. For the two bar charts, set the marker color to &lt;code&gt;#2A77B4&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fz0bmxvi5idneixhj7yn5.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.amazonaws.com%2Fuploads%2Farticles%2Fz0bmxvi5idneixhj7yn5.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&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.amazonaws.com%2Fuploads%2Farticles%2Fhbel39oic5t6nqfk78ah.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.amazonaws.com%2Fuploads%2Farticles%2Fhbel39oic5t6nqfk78ah.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have completed building UI, now let's quickly create queries and add functionality to our app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Fetching
&lt;/h2&gt;

&lt;p&gt;With ToolJet, we can easily connect the UI elements to the data sources and fetch data by &lt;a href="https://docs.tooljet.com/docs/tooljet-concepts/what-are-queries/" rel="noopener noreferrer"&gt;creating queries&lt;/a&gt; in the Query Manager.&lt;/p&gt;

&lt;p&gt;We will be adding queries for &lt;strong&gt;Revenue&lt;/strong&gt;, &lt;strong&gt;Sales Executive&lt;/strong&gt; and &lt;strong&gt;Overview&lt;/strong&gt; tabs. We will start with &lt;strong&gt;Sales Executive&lt;/strong&gt; tab, as we will need that data in the modal for adding sales in the revenue tab.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Sales Executive Tab
&lt;/h3&gt;

&lt;p&gt;Here, we will need two queries, one will be to add the data to the database and one will be to show the data in the table.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Open the &lt;strong&gt;Query Manager&lt;/strong&gt; at the bottom, click on &lt;strong&gt;Add&lt;/strong&gt;, and then click on the &lt;strong&gt;ToolJet database&lt;/strong&gt;. Rename the query to &lt;strong&gt;getSalesExecutives&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the table name as &lt;strong&gt;&lt;em&gt;sales_executives&lt;/em&gt;&lt;/strong&gt; and operation as &lt;strong&gt;List rows&lt;/strong&gt;. In settings, turn on &lt;strong&gt;Run this query on application load?&lt;/strong&gt; toggle to run this query every time the app reloads.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once you are done with this, you can click on &lt;strong&gt;Preview&lt;/strong&gt; to check the data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Let's link this query to the table. Click on table and add &lt;code&gt;{{queries.getSalesExecutives.data}}&lt;/code&gt; in the data. You will see your data from the database in the UI.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now we need to add another query to add the data in sales_executives from the modal component.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Click on &lt;strong&gt;Add&lt;/strong&gt; in the Query Manger and then click on the &lt;strong&gt;ToolJet database&lt;/strong&gt;. Rename the query to &lt;strong&gt;addSalesExecutive&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the table name as &lt;strong&gt;&lt;em&gt;sales_executives&lt;/em&gt;&lt;/strong&gt; and operation as &lt;strong&gt;Create row&lt;/strong&gt;. Then select &lt;strong&gt;name&lt;/strong&gt;, &lt;strong&gt;email&lt;/strong&gt; and &lt;strong&gt;phone&lt;/strong&gt; in the column.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now we need to add the data from UI to these columns in the keys input. Add &lt;code&gt;{{components.seName.value}}&lt;/code&gt;, &lt;code&gt;{{components.seEmail.value}}&lt;/code&gt;, &lt;code&gt;{{components.sePhone.value}}&lt;/code&gt; in the respective columns in the keys input.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Here &lt;em&gt;seName&lt;/em&gt;, &lt;em&gt;seEmail&lt;/em&gt; and &lt;em&gt;sePhone&lt;/em&gt; are the component names. Make sure you rename them before adding them to the query.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open the modal and select the submit button. In properties, click on &lt;strong&gt;New event handler&lt;/strong&gt; and add &lt;strong&gt;on click&lt;/strong&gt; event, select action as &lt;strong&gt;Run query&lt;/strong&gt; and select the &lt;strong&gt;addSalesExecutive&lt;/strong&gt; query.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The last thing we need to add is the event handlers in the query. You can add these three events - close modal, success prompt and run &lt;strong&gt;getSalesExecutives&lt;/strong&gt; query.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Try adding the data in the inputs components and submit it. You will see the that data populating in the table.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Revenue Tab
&lt;/h3&gt;

&lt;p&gt;In this tab also, we will be needing two queries, one will be to add the data to the database and one will be to show the data in the table.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Open the &lt;strong&gt;Query Manager&lt;/strong&gt; at the bottom, click on &lt;strong&gt;Add&lt;/strong&gt;, and then click on &lt;strong&gt;Run Javascript code&lt;/strong&gt;. Rename the query to &lt;strong&gt;getRevenueDetails&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the table name as &lt;strong&gt;&lt;em&gt;sale_revenue&lt;/em&gt;&lt;/strong&gt; and operation as &lt;strong&gt;List rows&lt;/strong&gt;. In settings, turn on &lt;em&gt;&lt;strong&gt;R&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt;un this query on application load?&lt;/strong&gt; toggle to run this query every time the app reloads.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once you are done with this, you can click on &lt;strong&gt;Preview&lt;/strong&gt; to check the data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Let's link this query to the table. Click on table and add &lt;code&gt;{{queries.getRevenueDetails.data}}&lt;/code&gt; in the data. You will see your data from the database in the UI.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now we need to add another query to add the data in sale_revenue from the Modal component.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Click on &lt;strong&gt;Add&lt;/strong&gt; in the Query Manger and then click on the &lt;strong&gt;ToolJet database&lt;/strong&gt;. Rename the query to &lt;strong&gt;addRevenueDetails&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the table name as &lt;strong&gt;&lt;em&gt;sale_revenue&lt;/em&gt;&lt;/strong&gt; and operation as &lt;strong&gt;Create row&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add and the columns and then add the data from UI to these columns in the keys input. Add &lt;code&gt;{{components.name.value}}&lt;/code&gt;, &lt;code&gt;{{components.email.value}}&lt;/code&gt; and all other items from the modal based on names you have added for all the input components.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open the modal and select the submit button. In properties, click on &lt;strong&gt;New event handler&lt;/strong&gt; and add &lt;strong&gt;on click&lt;/strong&gt; event, select action as &lt;strong&gt;Run query&lt;/strong&gt; and select the &lt;strong&gt;addRevenueDetails&lt;/strong&gt; query.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can add these three events - close modal, success prompt, and run &lt;strong&gt;getRevenueDetails&lt;/strong&gt; to your query.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Try adding the data in the inputs and submit it. You will see that data populating in the table.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Overview Tab
&lt;/h3&gt;

&lt;p&gt;In this tab, we will be calculating all the data to be added in all the Chart and Statistics components using Javascript.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Open on the &lt;strong&gt;Query Manger&lt;/strong&gt; at the bottom, click on &lt;strong&gt;Add&lt;/strong&gt; and then click on &lt;strong&gt;Run Javascript code&lt;/strong&gt;. Rename it to &lt;strong&gt;analytics&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can paste the following code which calculates all the data that you can put inside of all the charts and statistics components.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;await queries.getRevenueDetails.run(); 

let data = queries.getRevenueDetails.getData(); 

const totalRevenue = data.reduce((acc, obj) =&amp;gt; acc + obj.revenue, 0);
const totalCourseSold = data.reduce((acc, obj) =&amp;gt; acc + obj.number_of_courses_sold, 0);
const totalCustomers = Array.from(new Set(data.map(obj =&amp;gt; obj.customer_email))).length


const countryCounts = data.reduce((counts, obj) =&amp;gt; {
  counts[obj.customer_country] = (counts[obj.customer_country] || 0) + 1;
  return counts;
}, {});

const customerCountryData = Object.keys(countryCounts).map(state =&amp;gt; ({ x: state, y: countryCounts[state] }));

const ageRangeCounts = data.reduce((counts, obj) =&amp;gt; {
  counts[obj.customer_age_group] = (counts[obj.customer_age_group] || 0) + 1;
  return counts;
}, {});

const ageRangeData = Object.keys(ageRangeCounts).map(state =&amp;gt; ({ x: state, y: ageRangeCounts[state] }));

const discountCounts = data.reduce((counts, obj) =&amp;gt; {
  counts[obj.discount] = (counts[obj.discount] || 0) + 1;
  return counts;
}, {});

const discountData = Object.keys(discountCounts).map(state =&amp;gt; ({ x: state, y: discountCounts[state] }));

const professionCounts = data.reduce((counts, obj) =&amp;gt; {
  counts[obj.profession] = (counts[obj.profession] || 0) + 1;
  return counts;
}, {});

const professionData = Object.keys(professionCounts).map(state =&amp;gt; ({ x: state, y: professionCounts[state] }));


const courseCounts = data.reduce((counts, obj) =&amp;gt; {
  if (obj.course) {
    counts[obj.course] = (counts[obj.course] || 0) + 1;
  }
  return counts;
}, {});


const courseData = Object.keys(courseCounts).map(course =&amp;gt; ({ x: course, y: courseCounts[course] }));

const revenueByExecutive = data.reduce((acc, obj) =&amp;gt; {
  if (obj.se_name) {
    acc[obj.se_name] = (acc[obj.se_name] || 0) + (obj.revenue || 0);
  }
  return acc;
}, {});


const teamData = Object.keys(revenueByExecutive).map(executive =&amp;gt; ({ x: executive, y: revenueByExecutive[executive] }));

// Aggregate revenue by year
const revenueByYear = data.reduce((acc, entry) =&amp;gt; {
    const year = parseInt(entry.sale_date.split('/')[2]);
    if (!acc[year]) {
        acc[year] = 0;
    }
    acc[year] += entry.revenue;
    return acc;
}, {});

// Format the data
const yearRevenueData = Object.entries(revenueByYear).map(([year, revenue]) =&amp;gt; {
    return {
        y: revenue.toString(),
        x: parseInt(year)
    };
});

// Sort the data by year (y) in increasing order
yearRevenueData.sort((a, b) =&amp;gt; a.y - b.y);



return {totalRevenue, totalCourseSold, totalCustomers, courseData, teamData, customerCountryData, ageRangeData, discountData, professionData, yearRevenueData};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can preview and check the data. Now we will be connecting the query to all the components in this tab.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Select the &lt;strong&gt;Total Revenue&lt;/strong&gt; component and add &lt;code&gt;{{queries.analytics.data.totalRevenue}}&lt;/code&gt; in the Primary value.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the &lt;strong&gt;Total Course&lt;/strong&gt; component and add &lt;code&gt;{{queries.analytics.data.totalCourseSold}}&lt;/code&gt; in the Primary value.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the &lt;strong&gt;Total Customers&lt;/strong&gt; component and add &lt;code&gt;{{queries.analytics.data.totalCustomers}}&lt;/code&gt; in the Primary value.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the &lt;strong&gt;Customer location&lt;/strong&gt; chart component and add &lt;code&gt;{{queries.analytics.data.customerCountryData}}&lt;/code&gt; in the chart data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the &lt;strong&gt;Courses&lt;/strong&gt; chart component and add &lt;code&gt;{{queries.analytics.data.courseData}}&lt;/code&gt; in the chart data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the &lt;strong&gt;Age range&lt;/strong&gt; chart component and add &lt;code&gt;{{queries.analytics.data.ageRangeData}}&lt;/code&gt; in the chart data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the &lt;strong&gt;Team revenue&lt;/strong&gt; chart component and add &lt;code&gt;{{queries.analytics.data.teamData}}&lt;/code&gt; in the chart data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the &lt;strong&gt;Profession&lt;/strong&gt; chart component and add &lt;code&gt;{{queries.analytics.data.professionData}}&lt;/code&gt; in the chart data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the &lt;strong&gt;Discounts&lt;/strong&gt; chart component and add &lt;code&gt;{{queries.analytics.data.discountData}}&lt;/code&gt; in the chart data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the &lt;strong&gt;Year Vs Revenue&lt;/strong&gt; chart component and add &lt;code&gt;{{queries.analytics.data.yearRevenueData}}&lt;/code&gt; in the chart data.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you are done connecting all queries to your components, turn on &lt;strong&gt;Run this query on application load?&lt;/strong&gt; toggle in the settings, to run this query every time the app reloads.&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.amazonaws.com%2Fuploads%2Farticles%2Fijwk1uvmym4wk9mqbl21.gif" 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.amazonaws.com%2Fuploads%2Farticles%2Fijwk1uvmym4wk9mqbl21.gif" alt=" " width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Congratulations, your Ed-tech sales CRM application is now fully functional! By leveraging Tooljet and the ToolJet Database, you've created a powerful and efficient CRM tailored to the unique needs of the Ed-tech industry. Your application can now effectively manage leads, track sales activities, and analyze performance metrics, all within a user-friendly interface.&lt;/p&gt;

&lt;p&gt;We hope this guide has been helpful and inspires you to explore further capabilities and integrations with ToolJet. To continue exploring, check out the official &lt;a href="https://docs.tooljet.com/docs/" rel="noopener noreferrer"&gt;ToolJet docs&lt;/a&gt; or connect on &lt;a href="https://tooljet.com/slack" rel="noopener noreferrer"&gt;Slack&lt;/a&gt; for queries and doubt-solving.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>tooljet</category>
      <category>lowcode</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
