<?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: Pavithran M</title>
    <description>The latest articles on DEV Community by Pavithran M (@pavithranp12).</description>
    <link>https://dev.to/pavithranp12</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3421862%2F8507e667-aea3-4626-9e2f-1dae9c7ab27d.png</url>
      <title>DEV Community: Pavithran M</title>
      <link>https://dev.to/pavithranp12</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pavithranp12"/>
    <language>en</language>
    <item>
      <title>From Prompts to Production: Building Civic-Tech AI Workflows with RICE + CRAFT</title>
      <dc:creator>Pavithran M</dc:creator>
      <pubDate>Thu, 03 Sep 2026 20:11:53 +0000</pubDate>
      <link>https://dev.to/pavithranp12/from-prompts-to-production-building-civic-tech-ai-workflows-with-rice-craft-385f</link>
      <guid>https://dev.to/pavithranp12/from-prompts-to-production-building-civic-tech-ai-workflows-with-rice-craft-385f</guid>
      <description>&lt;p&gt;I recently completed the &lt;strong&gt;Vibe Coding Workshop — Civic Tech Edition&lt;/strong&gt;, working through four practical use cases designed around real municipal workflows.&lt;/p&gt;

&lt;p&gt;The goal wasn't simply to “make an AI app.” The workshop focused on turning vague prompts into &lt;strong&gt;structured, testable, reliable workflows&lt;/strong&gt; using RICE, CRAFT, explicit enforcement rules, and Git-based iteration.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. From a Naive Prompt to a Reliable Classifier — UC-0A
&lt;/h2&gt;

&lt;p&gt;The first challenge was a &lt;strong&gt;municipal complaint classifier&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The input contained citizen complaints that needed to be classified into an exact municipal taxonomy such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pothole&lt;/li&gt;
&lt;li&gt;Flooding&lt;/li&gt;
&lt;li&gt;Streetlight&lt;/li&gt;
&lt;li&gt;Waste&lt;/li&gt;
&lt;li&gt;Noise&lt;/li&gt;
&lt;li&gt;Road Damage&lt;/li&gt;
&lt;li&gt;Heritage Damage&lt;/li&gt;
&lt;li&gt;Heat Hazard&lt;/li&gt;
&lt;li&gt;Drain Blockage&lt;/li&gt;
&lt;li&gt;Other&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each complaint also needed a priority:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Urgent / Standard / Low&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The initial naive prompt was simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Classify this citizen complaint by category and priority.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The problem became obvious quickly: a simple prompt can classify the topic, but it doesn't necessarily enforce &lt;strong&gt;severity detection, evidence, or consistent taxonomy&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example, a complaint mentioning an &lt;strong&gt;injury, child, school, hospital, ambulance, hazard, fall, or collapse&lt;/strong&gt; needed to be treated as urgent.&lt;/p&gt;

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

&lt;p&gt;I converted the requirements into explicit agent instructions and skills:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exact category validation&lt;/li&gt;
&lt;li&gt;Severity keyword detection&lt;/li&gt;
&lt;li&gt;Evidence-based reasoning&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;NEEDS_REVIEW&lt;/code&gt; for ambiguous cases&lt;/li&gt;
&lt;li&gt;Batch CSV processing&lt;/li&gt;
&lt;li&gt;Handling malformed or missing rows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The final classifier was tested against the supplied Pune dataset and produced the expected &lt;code&gt;results_pune.csv&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key lesson:&lt;/strong&gt;&lt;br&gt;
A good prompt doesn't just tell an AI &lt;em&gt;what&lt;/em&gt; to do. It defines &lt;strong&gt;what counts as correct&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Making AI Preserve Policy Details — UC-0B
&lt;/h2&gt;

&lt;p&gt;The second use case was an &lt;strong&gt;HR leave-policy summarizer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;At first glance, this sounds straightforward:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Summarize the policy document.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But policy documents contain details that cannot safely be summarized away.&lt;/p&gt;

&lt;p&gt;The document included requirements such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;14-day advance notice&lt;/li&gt;
&lt;li&gt;Written approval before leave begins&lt;/li&gt;
&lt;li&gt;Unapproved absence resulting in LOP&lt;/li&gt;
&lt;li&gt;Maximum 5-day carry-forward&lt;/li&gt;
&lt;li&gt;January–March usage window&lt;/li&gt;
&lt;li&gt;Medical certificate requirements&lt;/li&gt;
&lt;li&gt;Multiple approval authorities for Leave Without Pay&lt;/li&gt;
&lt;li&gt;Restrictions on leave encashment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The major failure modes were:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clause omission · Scope bleed · Obligation softening&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;The workflow was redesigned to explicitly preserve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Numerical limits&lt;/li&gt;
&lt;li&gt;Deadlines&lt;/li&gt;
&lt;li&gt;Conditions&lt;/li&gt;
&lt;li&gt;Approval authorities&lt;/li&gt;
&lt;li&gt;Prohibitions&lt;/li&gt;
&lt;li&gt;Consequences&lt;/li&gt;
&lt;li&gt;Exceptions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also added validation so the generated summary could be checked for required policy details rather than simply trusting the output.&lt;/p&gt;

&lt;p&gt;The final workflow generated &lt;code&gt;summary_hr_leave.txt&lt;/code&gt; and passed the policy-summary validation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key lesson:&lt;/strong&gt;&lt;br&gt;
For policy workflows, “approximately correct” is often &lt;strong&gt;incorrect&lt;/strong&gt;. Important conditions and exceptions have to survive the transformation.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Making Data Analysis Respect Scope — UC-0C
&lt;/h2&gt;

&lt;p&gt;The third challenge involved &lt;strong&gt;municipal budget analysis&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The dataset contained:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5 wards&lt;/li&gt;
&lt;li&gt;5 budget categories&lt;/li&gt;
&lt;li&gt;Monthly data for 2024&lt;/li&gt;
&lt;li&gt;Actual spending values&lt;/li&gt;
&lt;li&gt;Several deliberate null values&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The task was to calculate growth for a &lt;strong&gt;specific ward and category&lt;/strong&gt;, for example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ward 1 – Kasba → Roads &amp;amp; Pothole Repair&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The main failure modes were:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wrong aggregation level · Silent null handling · Formula assumption&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This was important because an apparently reasonable calculation can become completely misleading if data from different wards or categories is accidentally combined.&lt;/p&gt;

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

&lt;p&gt;The implementation enforced:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exact ward/category scope&lt;/li&gt;
&lt;li&gt;Explicit MoM or YoY selection&lt;/li&gt;
&lt;li&gt;Previous-period values&lt;/li&gt;
&lt;li&gt;Formula displayed alongside each result&lt;/li&gt;
&lt;li&gt;Explicit null detection&lt;/li&gt;
&lt;li&gt;No calculation when required values are missing&lt;/li&gt;
&lt;li&gt;Zero-division validation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The output correctly produced values such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;July 2024 → &lt;strong&gt;+33.1% MoM&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;October 2024 → &lt;strong&gt;-34.8% MoM&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key lesson
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Scope is part of correctness.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A mathematically correct formula applied to the wrong aggregation level is still a wrong answer.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Building a Safe “Ask My Documents” Agent — UC-X
&lt;/h2&gt;

&lt;p&gt;The final use case brought everything together.&lt;/p&gt;

&lt;p&gt;The task was to build an interactive policy Q&amp;amp;A system using three separate documents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HR Leave Policy&lt;/li&gt;
&lt;li&gt;IT Acceptable Use Policy&lt;/li&gt;
&lt;li&gt;Finance Reimbursement Policy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The challenge wasn't just answering questions. It was preventing the model from &lt;strong&gt;combining information from different documents to create a permission that no document actually grants&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Can I use my personal phone to access work files when working from home?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The HR document may discuss remote work, while the IT policy specifically limits personal-device access.&lt;/p&gt;

&lt;p&gt;The agent therefore needed to maintain &lt;strong&gt;source boundaries&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enforcement rules
&lt;/h3&gt;

&lt;p&gt;The final workflow required:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One supporting source document&lt;/li&gt;
&lt;li&gt;Filename + section citation&lt;/li&gt;
&lt;li&gt;No cross-document blending&lt;/li&gt;
&lt;li&gt;No invented permissions&lt;/li&gt;
&lt;li&gt;No hedged statements&lt;/li&gt;
&lt;li&gt;Preservation of conditions and restrictions&lt;/li&gt;
&lt;li&gt;Exact refusal for unsupported questions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For unsupported questions, the required response was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“This question is not covered in the available policy documents…”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The test cases successfully demonstrated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Annual leave carry-forward → HR 2.6–2.7&lt;/li&gt;
&lt;li&gt;Slack installation → IT 2.3&lt;/li&gt;
&lt;li&gt;Home-office allowance → Finance 3.1&lt;/li&gt;
&lt;li&gt;Flexible-working culture → exact refusal&lt;/li&gt;
&lt;li&gt;Leave Without Pay → HR 5.2&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key lesson
&lt;/h3&gt;

&lt;p&gt;The most important part of a document Q&amp;amp;A system isn't just retrieval.&lt;/p&gt;

&lt;p&gt;It's &lt;strong&gt;knowing when not to answer&lt;/strong&gt;.&lt;/p&gt;




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

&lt;p&gt;Across all four use cases, the biggest shift was moving from:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Give the AI a prompt and see what happens.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Define the task, failure modes, enforcement rules, skills, validation, and test cases before trusting the output.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The workflow I followed was essentially:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Naive Prompt → Identify Failure → RICE Prompt → &lt;code&gt;agents.md&lt;/code&gt; → &lt;code&gt;skills.md&lt;/code&gt; → Code → Test → Analyze → Fix → Commit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Git also became part of the development process rather than just version control. Each UC was developed and committed separately, creating a traceable history of &lt;strong&gt;what failed, why it failed, and what changed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The four use cases reinforced a simple principle:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Reliable AI isn't just about generating better answers. It's about designing systems that make incorrect answers harder to produce.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  AI #VibeCoding #GenerativeAI #CivicTech #PromptEngineering #RICE #CRAFT #Git #SoftwareDevelopment #AIEngineering
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>llm</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Building and Testing an LLM-Powered Onboarding Agent Locally</title>
      <dc:creator>Pavithran M</dc:creator>
      <pubDate>Thu, 03 Sep 2026 19:00:08 +0000</pubDate>
      <link>https://dev.to/pavithranp12/building-and-testing-an-llm-powered-onboarding-agent-locally-bl1</link>
      <guid>https://dev.to/pavithranp12/building-and-testing-an-llm-powered-onboarding-agent-locally-bl1</guid>
      <description>&lt;p&gt;I recently built and tested an LLM-powered employee onboarding agent locally using Python, GitHub, and the Groq API.&lt;/p&gt;

&lt;p&gt;The goal was to understand how an AI agent can combine an LLM with tools, structured data, workflow rules, and human approval to complete a practical business process.&lt;/p&gt;

&lt;p&gt;What the Agent Does&lt;/p&gt;

&lt;p&gt;The onboarding agent follows a tool-using workflow:&lt;/p&gt;

&lt;p&gt;• Retrieves an employee profile from mock HR data&lt;br&gt;
• Checks the employee’s compliance status&lt;br&gt;
• Sends a compliance reminder when required&lt;br&gt;
• Requests human approval when compliance is pending&lt;br&gt;
• Provisions role-based access after approval&lt;br&gt;
• Sends a welcome notification&lt;br&gt;
• Completes the onboarding workflow&lt;/p&gt;

&lt;p&gt;The project uses mock HR and compliance data, so access provisioning and notifications are simulated locally.&lt;/p&gt;

&lt;p&gt;Technical Architecture&lt;/p&gt;

&lt;p&gt;The agent orchestration runs locally, while LLM inference is handled through the Groq API.&lt;/p&gt;

&lt;p&gt;Local Python Agent&lt;br&gt;
↓&lt;br&gt;
Employee Profile Tool&lt;br&gt;
↓&lt;br&gt;
Compliance Check Tool&lt;br&gt;
↓&lt;br&gt;
Notification Tool&lt;br&gt;
↓&lt;br&gt;
Access Provisioning Tool&lt;br&gt;
↓&lt;br&gt;
Groq API&lt;br&gt;
↓&lt;br&gt;
LLM Response&lt;br&gt;
↓&lt;br&gt;
Agent continues the workflow&lt;/p&gt;

&lt;p&gt;This helped me understand an important distinction: the agent orchestration and tools can run locally, while the actual LLM inference can be provided through a remote API.&lt;/p&gt;

&lt;p&gt;ReAct-Style Tool Calling&lt;/p&gt;

&lt;p&gt;The workflow follows a ReAct-style pattern where the model determines the next action, selects a tool, receives an observation, and continues the workflow.&lt;/p&gt;

&lt;p&gt;For a pending-compliance employee:&lt;/p&gt;

&lt;p&gt;Get employee profile&lt;br&gt;
↓&lt;br&gt;
Check compliance&lt;br&gt;
↓&lt;br&gt;
Compliance = PENDING&lt;br&gt;
↓&lt;br&gt;
Send reminder&lt;br&gt;
↓&lt;br&gt;
Ask for human approval&lt;br&gt;
↓&lt;br&gt;
Approval received&lt;br&gt;
↓&lt;br&gt;
Provision access&lt;br&gt;
↓&lt;br&gt;
Send welcome notification&lt;br&gt;
↓&lt;br&gt;
Complete&lt;/p&gt;

&lt;p&gt;For an employee whose compliance is already cleared:&lt;/p&gt;

&lt;p&gt;Get employee profile&lt;br&gt;
↓&lt;br&gt;
Check compliance&lt;br&gt;
↓&lt;br&gt;
Compliance = CLEARED&lt;br&gt;
↓&lt;br&gt;
Provision access&lt;br&gt;
↓&lt;br&gt;
Send welcome notification&lt;br&gt;
↓&lt;br&gt;
Complete&lt;/p&gt;

&lt;p&gt;This difference was useful for validating that the compliance state actually controls the agent’s behavior.&lt;/p&gt;

&lt;p&gt;Engineering Work&lt;/p&gt;

&lt;p&gt;During the project, I worked through the complete development workflow:&lt;/p&gt;

&lt;p&gt;• Installed and verified Git and Python&lt;br&gt;
• Created an Ed25519 SSH key&lt;br&gt;
• Configured the Windows SSH agent&lt;br&gt;
• Connected the SSH key to GitHub&lt;br&gt;
• Forked and cloned the repository&lt;br&gt;
• Configured origin and upstream remotes&lt;br&gt;
• Created a dedicated development branch&lt;br&gt;
• Created a Python virtual environment&lt;br&gt;
• Installed project dependencies&lt;br&gt;
• Ran the agent’s dry-run validation&lt;br&gt;
• Connected the agent to Groq&lt;br&gt;
• Tested the agent end-to-end&lt;br&gt;
• Committed and pushed the changes&lt;br&gt;
• Opened a pull request&lt;/p&gt;

&lt;p&gt;Fixing a Model Compatibility Issue&lt;/p&gt;

&lt;p&gt;During the first real agent run, I encountered a Groq API error:&lt;/p&gt;

&lt;p&gt;The model “llama-3.3-70b-versatile” was no longer available, resulting in a 404 model_not_found error.&lt;/p&gt;

&lt;p&gt;I verified the models available through the API and updated the agent to use:&lt;/p&gt;

&lt;p&gt;openai/gpt-oss-120b&lt;/p&gt;

&lt;p&gt;I also moved the model selection behind a single GROQ_MODEL constant instead of leaving the model identifier hardcoded.&lt;/p&gt;

&lt;p&gt;This was a useful reminder that LLM integrations have dependency-management concerns just like other API integrations. Model identifiers and provider availability can change and break an otherwise working application.&lt;/p&gt;

&lt;p&gt;Adding a New Test Scenario&lt;/p&gt;

&lt;p&gt;The first task was to add a new employee:&lt;/p&gt;

&lt;p&gt;EMP-2026-0849&lt;br&gt;
Arjun Reddy&lt;br&gt;
Software Engineer&lt;br&gt;
L4&lt;br&gt;
Platform Engineering&lt;/p&gt;

&lt;p&gt;The employee was added to the mock HR database with a CLEARED compliance record.&lt;/p&gt;

&lt;p&gt;I then ran the dry-run validation and executed the agent against the new employee.&lt;/p&gt;

&lt;p&gt;The agent successfully detected the CLEARED compliance status and proceeded directly to access provisioning without triggering the human approval gate.&lt;/p&gt;

&lt;p&gt;I also tested the existing pending-compliance employee to confirm that the human-in-the-loop behavior remained intact.&lt;/p&gt;

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

&lt;p&gt;The biggest takeaway was that an AI agent is more than an LLM prompt.&lt;/p&gt;

&lt;p&gt;A useful agent combines:&lt;/p&gt;

&lt;p&gt;• LLM reasoning&lt;br&gt;
• Tool calling&lt;br&gt;
• Application state&lt;br&gt;
• Business rules&lt;br&gt;
• Guardrails&lt;br&gt;
• Human-in-the-loop decisions&lt;br&gt;
• External APIs&lt;br&gt;
• Testing and observability&lt;/p&gt;

&lt;p&gt;The LLM can determine what action should happen next, but the surrounding application defines what tools exist, what data is available, what actions are permitted, and when human approval is required.&lt;/p&gt;

&lt;p&gt;That separation becomes especially important when moving from an AI demo toward a production system.&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;This project gave me hands-on experience with the complete lifecycle of a small AI agent: setting up the development environment, integrating an LLM API, debugging a model compatibility issue, implementing a new workflow scenario, testing different execution paths, and submitting the work through GitHub.&lt;/p&gt;

&lt;p&gt;More importantly, it helped me understand how LLMs, tools, workflow state, and deterministic business rules can work together to automate a real-world process while keeping humans in control of sensitive decisions.&lt;/p&gt;

&lt;h1&gt;
  
  
  AI #AIAgents #LLM #GenerativeAI
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>nasscom</category>
    </item>
    <item>
      <title>RabbitMQ Installation on Windows: A Complete Setup &amp; Troubleshooting Guide</title>
      <dc:creator>Pavithran M</dc:creator>
      <pubDate>Mon, 03 Aug 2026 14:29:39 +0000</pubDate>
      <link>https://dev.to/pavithranp12/rabbitmq-installation-on-windows-a-complete-setup-troubleshooting-guide-8lh</link>
      <guid>https://dev.to/pavithranp12/rabbitmq-installation-on-windows-a-complete-setup-troubleshooting-guide-8lh</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;A real-world RabbitMQ installation journey on Windows—from installation to debugging Erlang compatibility, Windows services, management plugins, and startup failures.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;RabbitMQ is one of the most popular open-source message brokers used for asynchronous communication between applications. Whether you're building microservices, event-driven systems, or background processing applications, RabbitMQ provides a reliable messaging infrastructure.&lt;/p&gt;

&lt;p&gt;Installing RabbitMQ on Windows appears straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install Erlang&lt;/li&gt;
&lt;li&gt;Install RabbitMQ&lt;/li&gt;
&lt;li&gt;Enable the management plugin&lt;/li&gt;
&lt;li&gt;Start the service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, in practice, installation can quickly become complicated due to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Erlang version mismatches&lt;/li&gt;
&lt;li&gt;Incorrect environment variables&lt;/li&gt;
&lt;li&gt;Windows service configuration&lt;/li&gt;
&lt;li&gt;Plugin issues&lt;/li&gt;
&lt;li&gt;Startup failures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article documents the complete installation process along with the real troubleshooting steps required to get RabbitMQ running successfully.&lt;/p&gt;




&lt;h1&gt;
  
  
  Prerequisites
&lt;/h1&gt;

&lt;p&gt;Before installing RabbitMQ, ensure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows 10/11&lt;/li&gt;
&lt;li&gt;Administrator privileges&lt;/li&gt;
&lt;li&gt;Internet connection&lt;/li&gt;
&lt;li&gt;Latest compatible Erlang OTP&lt;/li&gt;
&lt;li&gt;RabbitMQ Installer&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Step 1 — Install Erlang OTP
&lt;/h1&gt;

&lt;p&gt;RabbitMQ depends on Erlang Runtime.&lt;/p&gt;

&lt;p&gt;Install Erlang OTP from the official website.&lt;/p&gt;

&lt;p&gt;After installation verify it.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Expected output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Erlang/OTP ...

Eshell V...
1&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the command immediately returns to the command prompt, Erlang is &lt;strong&gt;not configured correctly&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Exit Erlang using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight erlang"&gt;&lt;code&gt;&lt;span class="nf"&gt;q&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Step 2 — Configure Environment Variables
&lt;/h1&gt;

&lt;p&gt;Create an environment variable.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Value&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\Program Files\Erlang OTP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also verify the PATH contains&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\Program Files\Erlang OTP\bin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verification:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo %ERLANG_HOME%

where erl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Step 3 — Install RabbitMQ
&lt;/h1&gt;

&lt;p&gt;Install RabbitMQ Server.&lt;/p&gt;

&lt;p&gt;After installation verify the service.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sc query RabbitMQ
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;SERVICE_NAME&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;RabbitMQ&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Step 4 — Enable RabbitMQ Management Plugin
&lt;/h1&gt;

&lt;p&gt;Navigate to RabbitMQ sbin.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd "C:\Program Files\RabbitMQ Server\rabbitmq_server-4.3.4\sbin"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enable Management UI.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rabbitmq-plugins enable rabbitmq_management
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected output&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Enabling plugins on node rabbit@hostname...

rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch

started 3 plugins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Step 5 — Restart RabbitMQ
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;net stop RabbitMQ

net start RabbitMQ
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or restart from&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;services.msc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Step 6 — Verify Installation
&lt;/h1&gt;

&lt;p&gt;Open&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;http://localhost:15672
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Default Login&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;Username&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;guest&lt;/span&gt;
&lt;span class="py"&gt;Password&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;guest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  RabbitMQ Default Ports
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th&gt;Port&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AMQP&lt;/td&gt;
&lt;td&gt;5672&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Management UI&lt;/td&gt;
&lt;td&gt;15672&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Erlang Distribution&lt;/td&gt;
&lt;td&gt;25672&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  Real Troubleshooting Journey
&lt;/h1&gt;

&lt;p&gt;This section documents every issue encountered during installation.&lt;/p&gt;




&lt;h1&gt;
  
  
  Problem 1
&lt;/h1&gt;

&lt;h2&gt;
  
  
  rabbitmq-plugins produced no output
&lt;/h2&gt;

&lt;p&gt;Running&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rabbitmq-plugins enable rabbitmq_management
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;returned immediately.&lt;/p&gt;

&lt;p&gt;No output.&lt;/p&gt;

&lt;p&gt;No error.&lt;/p&gt;

&lt;p&gt;Normally RabbitMQ should display&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;started 3 plugins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Investigation
&lt;/h3&gt;

&lt;p&gt;Checked&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rabbitmq-plugins list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No output.&lt;/p&gt;

&lt;p&gt;Checked&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rabbitmqctl status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No output.&lt;/p&gt;

&lt;p&gt;This indicated RabbitMQ tools were unable to communicate with Erlang.&lt;/p&gt;




&lt;h1&gt;
  
  
  Problem 2
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Erlang immediately exited
&lt;/h2&gt;

&lt;p&gt;Running&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;returned directly to the command prompt.&lt;/p&gt;

&lt;p&gt;Instead of&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight erlang"&gt;&lt;code&gt;&lt;span class="nv"&gt;Eshell&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This confirmed Erlang itself wasn't functioning properly.&lt;/p&gt;




&lt;h1&gt;
  
  
  Problem 3
&lt;/h1&gt;

&lt;h2&gt;
  
  
  RabbitMQ Service Error 1067
&lt;/h2&gt;

&lt;p&gt;Checking the service&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sc query RabbitMQ
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;STATE&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;STOPPED&lt;/span&gt;

&lt;span class="py"&gt;WIN32_EXIT_CODE&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1067&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Meaning&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;RabbitMQ started and terminated unexpectedly.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Problem 4
&lt;/h1&gt;

&lt;h2&gt;
  
  
  RabbitMQ Boot Failed
&lt;/h2&gt;

&lt;p&gt;Instead of using the Windows service, RabbitMQ was started manually.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rabbitmq-server.bat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;BOOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;FAILED&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;throw:&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;horus&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;extraction_denied&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Initially it appeared to be a configuration issue.&lt;/p&gt;




&lt;h1&gt;
  
  
  Problem 5
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Configuration File
&lt;/h2&gt;

&lt;p&gt;RabbitMQ loaded&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;advanced.config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The configuration file was renamed.&lt;/p&gt;

&lt;p&gt;RabbitMQ still failed.&lt;/p&gt;

&lt;p&gt;Therefore configuration wasn't the root cause.&lt;/p&gt;




&lt;h1&gt;
  
  
  Problem 6
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Windows Service Error
&lt;/h2&gt;

&lt;p&gt;Running&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;net start RabbitMQ
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;returned&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;System error 2

The system cannot find the file specified.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This was confusing because the RabbitMQ service already existed.&lt;/p&gt;




&lt;h1&gt;
  
  
  Root Cause Investigation
&lt;/h1&gt;

&lt;p&gt;Instead of checking RabbitMQ logs repeatedly, the Windows service configuration was inspected.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sc qc RabbitMQ
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="err"&gt;BINARY_PATH_NAME&lt;/span&gt;

&lt;span class="py"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\P&lt;/span&gt;&lt;span class="s"&gt;rogram Files&lt;/span&gt;&lt;span class="se"&gt;\E&lt;/span&gt;&lt;span class="s"&gt;rlang OTP&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s"&gt;rts-17.0.4&lt;/span&gt;&lt;span class="se"&gt;\b&lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s"&gt;rlsrv.exe&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, the installed Erlang version contained&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;erts-16.4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;RabbitMQ was still pointing to the old Erlang runtime.&lt;/p&gt;

&lt;p&gt;Windows therefore attempted to launch&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;erts-17.0.4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;which no longer existed.&lt;/p&gt;

&lt;p&gt;Hence&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;System error 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Solution
&lt;/h1&gt;

&lt;p&gt;Remove the existing RabbitMQ service.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rabbitmq-service.bat remove
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo %ERLANG_HOME%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install the service again.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rabbitmq-service.bat install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start RabbitMQ.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rabbitmq-service.bat start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify the service configuration.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sc qc RabbitMQ
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;RabbitMQ should now reference the current Erlang runtime.&lt;/p&gt;




&lt;h1&gt;
  
  
  Useful Commands
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Verify Erlang
&lt;/h2&gt;



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

&lt;/div&gt;






&lt;h2&gt;
  
  
  Verify Environment Variable
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo %ERLANG_HOME%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Check Erlang Path
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;where erl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  RabbitMQ Status
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rabbitmqctl status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  RabbitMQ Service Status
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sc query RabbitMQ
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  RabbitMQ Service Configuration
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sc qc RabbitMQ
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Start RabbitMQ
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;net start RabbitMQ
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Stop RabbitMQ
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;net stop RabbitMQ
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Restart RabbitMQ
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;net stop RabbitMQ

net start RabbitMQ
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Start RabbitMQ in Foreground
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rabbitmq-server.bat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Enable Management Plugin
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rabbitmq-plugins enable rabbitmq_management
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  List Enabled Plugins
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rabbitmq-plugins list -E
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Lessons Learned
&lt;/h1&gt;

&lt;p&gt;There were several important takeaways from this debugging session.&lt;/p&gt;

&lt;h3&gt;
  
  
  Always verify Erlang first
&lt;/h3&gt;

&lt;p&gt;Before installing RabbitMQ, ensure&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;opens the Erlang shell.&lt;/p&gt;




&lt;h3&gt;
  
  
  Verify Environment Variables
&lt;/h3&gt;

&lt;p&gt;Incorrect&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;or PATH configuration causes multiple RabbitMQ issues.&lt;/p&gt;




&lt;h3&gt;
  
  
  RabbitMQ Depends on Erlang Runtime
&lt;/h3&gt;

&lt;p&gt;Reinstalling Erlang changes the runtime directory.&lt;/p&gt;

&lt;p&gt;RabbitMQ Windows Service still references the previous runtime until the service is recreated.&lt;/p&gt;




&lt;h3&gt;
  
  
  Windows Service Errors Can Be Misleading
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;System error 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;did not mean RabbitMQ was missing.&lt;/p&gt;

&lt;p&gt;It meant the service executable path referenced a missing Erlang runtime.&lt;/p&gt;




&lt;h3&gt;
  
  
  Use rabbitmq-server.bat
&lt;/h3&gt;

&lt;p&gt;Instead of relying on Windows Service errors.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rabbitmq-server.bat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;provides detailed startup diagnostics.&lt;/p&gt;




&lt;h3&gt;
  
  
  Always Verify Service Configuration
&lt;/h3&gt;

&lt;p&gt;The most useful command during this debugging session was&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sc qc RabbitMQ
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It immediately exposed the incorrect Erlang runtime path.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;RabbitMQ installation is usually straightforward, but Windows service configuration and Erlang compatibility can introduce subtle issues that are difficult to diagnose.&lt;/p&gt;

&lt;p&gt;The key takeaway from this experience is to troubleshoot methodically:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Verify Erlang.&lt;/li&gt;
&lt;li&gt;Verify environment variables.&lt;/li&gt;
&lt;li&gt;Check RabbitMQ startup.&lt;/li&gt;
&lt;li&gt;Inspect Windows service configuration.&lt;/li&gt;
&lt;li&gt;Recreate the RabbitMQ service after changing Erlang versions.&lt;/li&gt;
&lt;li&gt;Enable the management plugin only after the server starts successfully.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Following this process made it possible to move from repeated startup failures to a fully working RabbitMQ installation with the Management UI enabled.&lt;/p&gt;




&lt;p&gt;If this guide helped you save hours of debugging, consider sharing it with other developers who are setting up RabbitMQ on Windows. It might save them from the same troubleshooting journey.&lt;/p&gt;

</description>
      <category>backend</category>
      <category>debugging</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>📬 Automate Email Attachments to Telegram with Python + Render.com</title>
      <dc:creator>Pavithran M</dc:creator>
      <pubDate>Sun, 10 Aug 2025 13:00:11 +0000</pubDate>
      <link>https://dev.to/pavithranp12/automate-email-attachments-to-telegram-with-python-rendercom-3p7j</link>
      <guid>https://dev.to/pavithranp12/automate-email-attachments-to-telegram-with-python-rendercom-3p7j</guid>
      <description>&lt;p&gt;Ever wished you could automatically forward email attachments to your Telegram chat or group? Whether it's invoices, reports, or alerts—this Python script does exactly that. And the best part? You can deploy it as a scheduled cron job on &lt;a href="https://render.com" rel="noopener noreferrer"&gt;Render.com&lt;/a&gt; with zero hassle.&lt;/p&gt;

&lt;p&gt;Let’s walk through the features, setup, and deployment steps to get this automation running in minutes.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 What This App Does
&lt;/h2&gt;

&lt;p&gt;This Python application:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Connects securely to Yahoo Mail via IMAP
&lt;/li&gt;
&lt;li&gt;📂 Downloads the latest attachment from a specific folder (&lt;code&gt;B2b&lt;/code&gt;)
&lt;/li&gt;
&lt;li&gt;📤 Sends the attachment to a Telegram chat or group using the Telegram Bot API
&lt;/li&gt;
&lt;li&gt;🧾 Logs each step for easy debugging
&lt;/li&gt;
&lt;li&gt;🕒 Runs automatically on a schedule using Render.com’s cron job feature
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Perfect for automating workflows that rely on email-based file delivery.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Tech Stack
&lt;/h2&gt;

&lt;p&gt;Here’s what powers the app:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Python 3&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;imaplib&lt;/code&gt; – for accessing email via IMAP
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;email&lt;/code&gt; – for parsing MIME messages
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;requests&lt;/code&gt; – for sending files to Telegram
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;dotenv&lt;/code&gt; – for managing environment variables locally
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📦 Getting Started
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Clone the Repository
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/your-username/email-to-telegram.git
&lt;span class="nb"&gt;cd &lt;/span&gt;email-to-telegram
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Create a &lt;code&gt;.env&lt;/code&gt; File (for local testing)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="py"&gt;EMAIL_USER&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_yahoo_email@example.com&lt;/span&gt;
&lt;span class="py"&gt;EMAIL_PASS&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_yahoo_app_password&lt;/span&gt;
&lt;span class="py"&gt;TELEGRAM_TOKEN&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_telegram_bot_token&lt;/span&gt;
&lt;span class="py"&gt;TELEGRAM_CHAT_ID&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_chat_id_or_group_id&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ Use a Yahoo &lt;strong&gt;App Password&lt;/strong&gt; instead of your regular password for IMAP access.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧑‍💻 Local Testing
&lt;/h2&gt;

&lt;p&gt;Run the script manually to verify everything works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python script.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see logs showing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connection to Yahoo Mail
&lt;/li&gt;
&lt;li&gt;Attachment download
&lt;/li&gt;
&lt;li&gt;Telegram API response
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ☁️ Deploying on Render.com
&lt;/h2&gt;

&lt;p&gt;Render makes it super easy to automate this with a cron job.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Create a New Cron Job
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;a href="https://dashboard.render.com/new/cron" rel="noopener noreferrer"&gt;Render Cron Jobs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Python&lt;/strong&gt; as the runtime
&lt;/li&gt;
&lt;li&gt;Set your schedule using cron syntax (e.g., &lt;code&gt;0 * * * *&lt;/code&gt; for hourly)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Upload Your Code
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Upload your script (&lt;code&gt;script.py&lt;/code&gt;)
&lt;/li&gt;
&lt;li&gt;Include a &lt;code&gt;requirements.txt&lt;/code&gt; with:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  requests
  python-dotenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Set Environment Variables
&lt;/h3&gt;

&lt;p&gt;In the &lt;strong&gt;Environment&lt;/strong&gt; section of the cron job setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;EMAIL_USER&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;EMAIL_PASS&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;TELEGRAM_TOKEN&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;TELEGRAM_CHAT_ID&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;You don’t need the &lt;code&gt;.env&lt;/code&gt; file on Render—just set the variables directly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Step 4: Confirm and Deploy
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Save and deploy the cron job
&lt;/li&gt;
&lt;li&gt;Check logs after the first scheduled run to confirm success
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧪 Troubleshooting Tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No logs?&lt;/strong&gt; Add &lt;code&gt;print()&lt;/code&gt; statements to trace execution.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No attachment sent?&lt;/strong&gt; Double-check the folder name (&lt;code&gt;B2b&lt;/code&gt;) and email structure.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telegram error?&lt;/strong&gt; Make sure the bot isn’t blocked and has permission to send messages.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧾 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;This setup is ideal for automating repetitive email-based workflows and keeping your Telegram feed updated with important files. You can easily extend it to support multiple folders, file types, or even filter by subject lines.&lt;/p&gt;

&lt;p&gt;If you found this helpful, drop a ❤️ or share your own automation ideas in the comments!&lt;/p&gt;




&lt;p&gt;Take a look at &lt;a href="https://pavithran.tech" rel="noopener noreferrer"&gt;me!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>automation</category>
      <category>python</category>
    </item>
    <item>
      <title>🎮 Turning My GitHub into a Game — My First Step Toward Showcasing My Skills!</title>
      <dc:creator>Pavithran M</dc:creator>
      <pubDate>Fri, 08 Aug 2025 17:28:12 +0000</pubDate>
      <link>https://dev.to/pavithranp12/turning-my-github-into-a-game-my-first-step-toward-showcasing-my-skills-400e</link>
      <guid>https://dev.to/pavithranp12/turning-my-github-into-a-game-my-first-step-toward-showcasing-my-skills-400e</guid>
      <description>&lt;p&gt;Hey everyone 👋,&lt;/p&gt;

&lt;p&gt;I've been working in the tech industry for almost 5 years, gaining hands-on experience in various technologies — particularly in .NET, SQL, application development, and database engineering.&lt;/p&gt;

&lt;p&gt;But until now, I never really showcased my work, projects, or progress publicly.&lt;br&gt;
Well... better late than never, right? 😄&lt;/p&gt;

&lt;p&gt;🚀 What Sparked the Change?&lt;br&gt;
Big shoutout to this amazing post by &lt;a class="mentioned-user" href="https://dev.to/vidakhoshpey22"&gt;@vidakhoshpey22&lt;/a&gt; &lt;br&gt;
It inspired me to transform my GitHub profile into a gamified contribution graph — featuring Pac-Man!&lt;/p&gt;

&lt;p&gt;This was a fun and rewarding project that not only added visual flair to my profile but also kickstarted my journey into consistently recording and sharing my professional milestones.&lt;/p&gt;

&lt;p&gt;🛠️ What I've Done So Far&lt;br&gt;
✅ Setup a Pac-Man-themed contribution graph on my GitHub&lt;br&gt;
✅ Created a dedicated Milestones repo to track all my achievements&lt;br&gt;
✅ Committed to logging everything I learn or build going forward&lt;/p&gt;

&lt;p&gt;🔗 Check out my GitHub: github.com/Pavithran-P12&lt;/p&gt;

&lt;p&gt;✨ What’s Next?&lt;br&gt;
This is just the beginning.&lt;br&gt;
I'll be documenting more tasks, sharing bite-sized accomplishments, and contributing to open-source wherever I can.&lt;/p&gt;

&lt;p&gt;If you're like me — experienced but haven't showcased much — this is your sign to start now. Share, track, and celebrate your journey 🎉&lt;/p&gt;

&lt;p&gt;Happy coding everyone!&lt;br&gt;
Happy developing! 💻🚀&lt;/p&gt;

</description>
      <category>github</category>
      <category>portfolio</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
