<?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: Jehadur Rahman (Emran)</title>
    <description>The latest articles on DEV Community by Jehadur Rahman (Emran) (@jehadurre).</description>
    <link>https://dev.to/jehadurre</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%2F726879%2Fa07ae71a-dbf3-4aaf-a8c9-21ec894aece9.jpeg</url>
      <title>DEV Community: Jehadur Rahman (Emran)</title>
      <link>https://dev.to/jehadurre</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jehadurre"/>
    <language>en</language>
    <item>
      <title>Beyond Code: Why Soft Skills Are the True Multiplier for Developers</title>
      <dc:creator>Jehadur Rahman (Emran)</dc:creator>
      <pubDate>Thu, 16 Jul 2026 23:22:22 +0000</pubDate>
      <link>https://dev.to/jehadurre/beyond-code-why-soft-skills-are-the-true-multiplier-for-developers-5l7</link>
      <guid>https://dev.to/jehadurre/beyond-code-why-soft-skills-are-the-true-multiplier-for-developers-5l7</guid>
      <description>&lt;p&gt;In the rapidly evolving landscape of software engineering, we often obsess over the latest frameworks, cloud architectures, and language features. We spend our weekends learning Rust, Kubernetes, or the next big AI integration. Yet, when we look at the trajectory of successful careers, one truth remains consistent: technical prowess is merely the baseline. The true differentiator, the multiplier that takes a developer from "good" to "great," is the mastery of soft skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Myth of the Lone Wolf
&lt;/h2&gt;

&lt;p&gt;The caricature of the antisocial programmer hacking away in a dark room is a relic of the past. Modern software development is a team sport. Whether you are working in an Agile scrum, a startup, or a massive enterprise, your ability to interact with others is as critical as your ability to write clean, efficient code.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Communication as a Technical Skill
&lt;/h2&gt;

&lt;p&gt;Communication is not just about "being nice." It is about precision. When you explain a complex technical limitation to a non-technical product manager, you are translating abstract concepts into business value. This is a technical skill. If you cannot articulate why a feature takes two weeks to build, you lose the trust of your stakeholders.&lt;/p&gt;

&lt;p&gt;Consider the difference in how we document our code. Writing readable code is an act of empathy for your future self and your teammates.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Bad&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;86400000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// milliseconds in a day&lt;/span&gt;

&lt;span class="c1"&gt;// Good&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MS_PER_DAY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;86400000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second example isn't just "clean code"; it is effective communication.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Empathy: The User-Centric Mindset
&lt;/h2&gt;

&lt;p&gt;Technical debt is often a result of ignoring the human element. When we ignore soft skills, we build software that works, but it doesn't solve problems. Empathy allows us to step into the user's shoes. It asks, "Does this feature actually help the person using it, or does it just add bloat?"&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Conflict Resolution and Collaboration
&lt;/h2&gt;

&lt;p&gt;Technical debates are inevitable. How you handle disagreement defines your leadership potential. The best developers don't fight to be "right"; they fight to find the best solution for the company. This requires active listening, patience, and the ability to detach your ego from your pull request.&lt;/p&gt;

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

&lt;p&gt;Soft skills are not "fluffy." They are the scaffolding that supports your technical expertise. As you progress in your career, prioritize your ability to lead, listen, and communicate just as much as you prioritize your ability to code. Your code can change the system, but your soft skills will change the world around you.&lt;/p&gt;

</description>
      <category>career</category>
      <category>development</category>
      <category>softskills</category>
      <category>mindset</category>
    </item>
    <item>
      <title>Prompt Engineering is Dead, System Design Matters More</title>
      <dc:creator>Jehadur Rahman (Emran)</dc:creator>
      <pubDate>Thu, 16 Jul 2026 23:19:14 +0000</pubDate>
      <link>https://dev.to/jehadurre/prompt-engineering-is-dead-system-design-matters-more-3hjd</link>
      <guid>https://dev.to/jehadurre/prompt-engineering-is-dead-system-design-matters-more-3hjd</guid>
      <description>&lt;p&gt;The era of obsession with the "perfect prompt" is coming to a close.&lt;/p&gt;

&lt;p&gt;For the last year, many of us have spent countless hours iterating on system instructions, trying to nudge LLMs into better performance. We treated prompts like magic spells. But in production-grade AI, the prompt is just one variable. The real engineering—and the real differentiator—is the system design that surrounds the model.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "Harness" is the Ceiling
&lt;/h2&gt;

&lt;p&gt;As industry experts often note, the model sets the floor, but the harness sets the ceiling.&lt;/p&gt;

&lt;p&gt;What is this harness? It is the infrastructure of your agent. It is the scaffolding that makes an LLM useful in a real-world environment. If you focus only on the prompt, you are building on sand.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Memory: How do you store, retrieve, and summarize long-term knowledge?&lt;/li&gt;
&lt;li&gt;Tool Calling: How does the agent safely interact with APIs, files, and databases?&lt;/li&gt;
&lt;li&gt;Durable Execution: If your process crashes, can your agent recover its state?&lt;/li&gt;
&lt;li&gt;Orchestration: How do you manage multi-agent handoffs and complex sub-tasks?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The AI Agent Stack
&lt;/h2&gt;

&lt;p&gt;If you are still only looking at the prompt, you are missing the architectural layers that make agents production-ready. The typical agent stack is far deeper than a single API call:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agent Runtime: The reasoning loop (think, tool call, observe, reflect).&lt;/li&gt;
&lt;li&gt;Model Layer: The engine powering reasoning.&lt;/li&gt;
&lt;li&gt;Tool Layer: The "hands" of the agent.&lt;/li&gt;
&lt;li&gt;Memory Layer: Short-term working memory and long-term retrieval.&lt;/li&gt;
&lt;li&gt;Observability &amp;amp; Safety: Debugging, evaluation, and cost-control guardrails.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why System Design Wins
&lt;/h2&gt;

&lt;p&gt;When you treat your AI agent as a software system rather than a text-completion task, your priorities shift. You stop asking, "Why won't the model follow these instructions?" and start asking, "How can I make the state transitions more reliable?"&lt;/p&gt;

&lt;p&gt;Robustness comes from designing for failure, not from perfectly crafted system instructions. Consider a simple, modular agent loop implementation that prioritizes error recovery:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run_agent_loop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;memory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;initialize_memory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_complete&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="c1"&gt;# Step 1: Reason and pick tool
&lt;/span&gt;        &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Step 2: Safe execution with error handling
&lt;/span&gt;        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;execute_with_timeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Step 3: Update state and memory
&lt;/span&gt;        &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 
            &lt;span class="nf"&gt;handle_recovery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;final_answer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Future is Infrastructure
&lt;/h2&gt;

&lt;p&gt;Prompt engineering will always be a part of the workflow, but it is no longer the bottleneck. The real challenges lie in managing context, ensuring reliable tool execution, and building systems that can self-correct when things go wrong.&lt;/p&gt;

&lt;p&gt;If you want to build AI that actually works, stop chasing the next model release and start investing in your harness. Engineering for resilience, scalability, and observability is what separates a toy chatbot from a production-grade agent.&lt;/p&gt;

&lt;p&gt;What are you building? Are you focusing on the harness or the prompt? Let me know in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>systemdesign</category>
      <category>architecture</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why Most AI Agents Fail in Production: Bridging the Infrastructure Gap</title>
      <dc:creator>Jehadur Rahman (Emran)</dc:creator>
      <pubDate>Thu, 16 Jul 2026 23:19:02 +0000</pubDate>
      <link>https://dev.to/jehadurre/why-most-ai-agents-fail-in-production-bridging-the-infrastructure-gap-2mbb</link>
      <guid>https://dev.to/jehadurre/why-most-ai-agents-fail-in-production-bridging-the-infrastructure-gap-2mbb</guid>
      <description>&lt;p&gt;The landscape of software development is undergoing a tectonic shift. While industry projections suggest that 40% of enterprise applications will run AI agents by the end of 2026, the reality is that many organizations remain stuck in the experimentation phase. The reason for this "agent gap" is rarely about the intelligence of the model itself; rather, it is about the infrastructure surrounding it.&lt;/p&gt;

&lt;p&gt;As noted by engineers at the forefront of this shift, the model sets the floor, but the harness sets the ceiling. If you are struggling to move your agents from a local prototype to a reliable production system, you are likely missing one of the four critical pillars: context management, robust tool calling, intelligent memory, and durable execution.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The Criticality of Context Management
&lt;/h3&gt;

&lt;p&gt;Retrieval-Augmented Generation (RAG) is often the first step, but it is rarely enough. Whether you are using standard RAG, Graph RAG, or moving toward Agentic RAG—where agents break queries into sub-questions and verify their own retrieved context—the way you manage data is pivotal. Standard RAG is fast and cheap, but it lacks the depth required for complex, multi-step reasoning. For structured knowledge like compliance or legal data, Graph RAG provides superior traversal, whereas Agentic RAG allows for self-correction.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Intelligent Tool Calling and Orchestration
&lt;/h3&gt;

&lt;p&gt;An agent that can only "chat" is limited. The transition to a functional agent requires a harness that allows for delegation, triage, and orchestration. Your infrastructure must support a loop where tools, streaming, and model turns fit together seamlessly. You are no longer just building a prompt; you are building an execution environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Memory Systems: Compaction and Summarization
&lt;/h3&gt;

&lt;p&gt;One of the biggest pitfalls in production agents is the degradation of performance over long conversations due to token limits. To maintain consistency, you must implement memory systems that prioritize summarization and compaction. By keeping long-term context relevant and compressed, your agent can maintain its "personality" and efficacy without overflowing the window.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Error Recovery and Durable Execution
&lt;/h3&gt;

&lt;p&gt;Production systems crash. If your agent is a stateless script, a single disconnect can ruin an hour of work. Implementing durable execution—such as using &lt;a href="https://dev.to[link%20removed]"&gt;DBOS&lt;/a&gt; or Postgres—ensures that sessions survive crashes and network interruptions. &lt;/p&gt;

&lt;p&gt;Consider the structure of a basic production-grade loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run_agent_loop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Ensure the state is persisted for recovery
&lt;/span&gt;    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;durable_execution_context&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_complete&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
            &lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;retrieve_relevant_memory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_tool_call&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
                &lt;span class="c1"&gt;# Securely execute tool and update state
&lt;/span&gt;                &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;execute_sandboxed_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="nf"&gt;update_memory_with_result&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="nf"&gt;finalize_output&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;The competitive edge in 2026 will not belong to those who merely integrate the latest model, but to those who master harness engineering. By focusing on durable infrastructure, controlled tool execution, and robust memory management, you can finally close the gap between your prototype and a production-grade AI system. For further learning on building these systems, resources like &lt;a href="https://dev.to[link%20removed]"&gt;Scott's AI Engineering course&lt;/a&gt; offer deep dives into agent orchestration.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>production</category>
      <category>engineering</category>
    </item>
    <item>
      <title>Building an Agentic Coding Assistant Without Breaking the Bank</title>
      <dc:creator>Jehadur Rahman (Emran)</dc:creator>
      <pubDate>Thu, 16 Jul 2026 23:17:09 +0000</pubDate>
      <link>https://dev.to/jehadurre/building-an-agentic-coding-assistant-without-breaking-the-bank-3abf</link>
      <guid>https://dev.to/jehadurre/building-an-agentic-coding-assistant-without-breaking-the-bank-3abf</guid>
      <description>&lt;h1&gt;
  
  
  Building an Agentic Coding Assistant Without Breaking the Bank
&lt;/h1&gt;

&lt;p&gt;The landscape of software engineering has shifted as AI agents become integral to developer workflows. However, with increased autonomy comes the challenge of cost management. This guide outlines how to build a robust, production-grade agentic assistant while maintaining efficiency.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI Agent Stack
&lt;/h2&gt;

&lt;p&gt;To build effectively, you must understand the four distinct layers of an AI agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agent Runtime: Operates the ReAct loop, allowing the model to reflect on results and plan the next step.&lt;/li&gt;
&lt;li&gt;Model Layer: The foundational LLM. Choosing the right model (e.g., opting for cost-effective open-weight models like &lt;a href="https://dev.to[link%20removed]"&gt;Kimi K2.7&lt;/a&gt;) can significantly impact your budget.&lt;/li&gt;
&lt;li&gt;Tool Layer: Provides the "hands" for the agent (APIs, search, code execution).&lt;/li&gt;
&lt;li&gt;Memory Layer: Manages short-term working memory, long-term semantic memory, and state storage.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Optimizing for Cost and Performance
&lt;/h2&gt;

&lt;p&gt;Many developers default to complex, multi-agent architectures that introduce unnecessary coordination costs. Here is how to keep your build lean:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Start with a Single Agent
&lt;/h3&gt;

&lt;p&gt;Begin with a single reasoning LLM that plans and executes. Only transition to multi-agent architectures when the problem becomes too large for a single agent to coordinate.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Context Management
&lt;/h3&gt;

&lt;p&gt;Avoid passing redundant context. Implementing a context maturity model can prevent "token burning" and inconsistent outputs. Utilize memory layers to store transactional states effectively.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Loop Implementation
&lt;/h3&gt;

&lt;p&gt;A basic ReAct loop allows for reflection and self-correction, which increases reliability without needing massive, expensive models.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run_agent_loop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_description&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;memory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;initialize_memory&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;task_complete&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="c1"&gt;# Reflect and plan
&lt;/span&gt;        &lt;span class="n"&gt;plan&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_next_step&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="c1"&gt;# Execute
&lt;/span&gt;        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tool_executor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;plan&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="c1"&gt;# Update state
&lt;/span&gt;        &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;The most efficient systems leverage unique data and intelligent retrieval rather than heavy orchestration. By focusing on observability and safety, you can deploy agents that are debuggable, cost-aware, and production-ready. For further learning on advanced workflows, consider resources like the &lt;a href="https://dev.to[link%20removed]"&gt;GitHub Education&lt;/a&gt; community or specialized &lt;a href="https://www.google.com/url?q=https://zenva.acemlna.com/lt.php?x%3D4lZy%7EGDKJFCd65J_yA%7ENheSeAqBTutf0w%7Ek1jXE4VqTPD5N7_ky7xuFw232kjdJf0DYxzKpEInSb6I37y_5OYOG-2HQiitH&amp;amp;sa=E&amp;amp;source=workflows" rel="noopener noreferrer"&gt;https://www.google.com/url?q=https://zenva.acemlna.com/lt.php?x%3D4lZy~GDKJFCd65J_yA~NheSeAqBTutf0w~k1jXE4VqTPD5N7_ky7xuFw232kjdJf0DYxzKpEInSb6I37y_5OYOG-2HQiitH&amp;amp;sa=E&amp;amp;source=workflows&lt;/a&gt; courses.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agentic</category>
      <category>python</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Building NLP Tools for Languages That Big Tech Ignores</title>
      <dc:creator>Jehadur Rahman (Emran)</dc:creator>
      <pubDate>Wed, 24 Jun 2026 06:10:34 +0000</pubDate>
      <link>https://dev.to/jehadurre/building-nlp-tools-for-languages-that-big-tech-ignores-2api</link>
      <guid>https://dev.to/jehadurre/building-nlp-tools-for-languages-that-big-tech-ignores-2api</guid>
      <description>&lt;p&gt;In an era where massive Large Language Models (LLMs) dominate headlines, millions of speakers of underrepresented languages remain excluded from the AI revolution. Building NLP tools for these "low-resource" languages isn't just a technical challenge; it is a necessity for democratizing technology.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Fundamentals
&lt;/h2&gt;

&lt;p&gt;To build effective tools, we must first understand the building blocks of Natural Language Processing (NLP). NLP is the field of artificial intelligence where computers analyze and derive meaning from human language. Key concepts include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stemming and Lemmatization: Stemming reduces words to their root format (e.g., "branching" becomes "branch"), while Lemmatization uses dictionaries to normalize words (e.g., "was" becomes "be").&lt;/li&gt;
&lt;li&gt;Parts of Speech (POS) Tagging: The task of labeling each word with its appropriate grammatical part of speech.&lt;/li&gt;
&lt;li&gt;Named Entity Recognition (NER): Identifying and classifying entities like names, organizations, or locations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When dealing with languages ignored by big tech, standardized models often fail because they lack the necessary training data or linguistic nuance. This is where custom development becomes crucial.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Python Toolkit
&lt;/h2&gt;

&lt;p&gt;Python remains the language of choice for the data science community due to its versatility and mature ecosystem. When starting your project, you will likely rely on powerful packages like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gensim: Excellent for analyzing large textual collections and implementing algorithms like word2vec to transform text into vector features.&lt;/li&gt;
&lt;li&gt;Scikit-learn: A library essential for tasks like classification, regression, and clustering.&lt;/li&gt;
&lt;li&gt;NumPy: For high-level mathematical functions and matrix computations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started: A Simple Workflow
&lt;/h2&gt;

&lt;p&gt;Before diving into complex neural networks, focus on the basics of text preprocessing. Vectorization, the process of converting text into numerical representation, is a vital first step. You can implement a simple stemming process to normalize your data using NLTK:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;nltk&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;nltk.stem&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PorterStemmer&lt;/span&gt;

&lt;span class="n"&gt;stemmer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;PorterStemmer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;words&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;branched&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;branching&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;branches&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;words&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; -&amp;gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;stemmer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Thinking Like a Designer
&lt;/h2&gt;

&lt;p&gt;Writing the "right" software requires more than just code; it requires understanding the human interface. Designers of ML systems must anticipate how users will interact with the system. When building for underrepresented languages, consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data Scarcity: You may not have access to massive datasets. Use techniques like transfer learning or unsupervised learning for topic modeling to extract insights from smaller document collections.&lt;/li&gt;
&lt;li&gt;Technical Debt: Avoid poor system design that accumulates interest over time. Focus on refactoring code to ensure it remains maintainable and scalable as your project grows.&lt;/li&gt;
&lt;li&gt;Community Engagement: Leverage open-source knowledge bases and participate in the community to gather authentic, domain-specific data.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Building tools for ignored languages empowers creators and developers to bridge the digital divide. By utilizing Python's robust libraries and adhering to solid software engineering principles—like test-driven development and refactoring—you can create systems that truly serve diverse linguistic populations. Start small, focus on the essentials, and build a system that reflects the unique nuances of your target language.&lt;/p&gt;

</description>
      <category>nlp</category>
      <category>python</category>
      <category>ai</category>
      <category>a11y</category>
    </item>
    <item>
      <title>The Invisible 99%: Why Low-Resource Languages Need More AI Research</title>
      <dc:creator>Jehadur Rahman (Emran)</dc:creator>
      <pubDate>Wed, 24 Jun 2026 06:10:13 +0000</pubDate>
      <link>https://dev.to/jehadurre/the-invisible-99-why-low-resource-languages-need-more-ai-research-31i6</link>
      <guid>https://dev.to/jehadurre/the-invisible-99-why-low-resource-languages-need-more-ai-research-31i6</guid>
      <description>&lt;p&gt;In the current landscape of rapid AI development, large language models (LLMs) like GPT-4 and LLaMA have become standard tools for productivity and information access. However, this technological revolution is built on a foundation of "high-resource" languages—those with abundant digital data, standardized writing systems, and significant online presence. As these models become deeply integrated into societal functions, we face an urgent, often overlooked crisis: the marginalization of low-resource languages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Language Divide
&lt;/h2&gt;

&lt;p&gt;Of the world's over 7,000 living languages, only a tiny fraction are classified as "high-resource". Low-resource languages are those that suffer from a lack of labeled training data, poor data quality, or the absence of standardized orthography. This data scarcity creates a "long-tail distribution" in machine learning, where the majority of global languages remain underserved by modern AI technology.&lt;/p&gt;

&lt;p&gt;The technical disparity is exacerbated by the way current AI pipelines are constructed. Most models rely on massive, internet-scraped datasets that favor dominant languages. When developers build for "scale," they often ignore the nuanced, cultural, and linguistic specificities of smaller language communities.&lt;/p&gt;

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

&lt;p&gt;The consequences of this digital gap extend far beyond mere convenience. We are witnessing several critical impacts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Socio-Economic Exclusion: Language barriers impede access to essential services like quality education, healthcare, and financial tools. If AI-driven government or commercial interfaces do not function in a user's native language, they effectively cut those populations off from participating in the modern economy.&lt;/li&gt;
&lt;li&gt;Safety and Bias Risks: Studies have shown that models like GPT-4 are significantly more likely to produce harmful or unsafe content when prompted in low-resource languages compared to high-resource ones. This occurs because safety fine-tuning and guardrails are overwhelmingly optimized for English, failing to generalize to other linguistic contexts.&lt;/li&gt;
&lt;li&gt;Cultural and Intellectual Loss: Language is a repository of human history and cultural identity. When these languages are excluded from AI advancements, the incentive for younger generations to maintain or use them diminishes, threatening their long-term survival.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A Path Forward: Rethinking Development
&lt;/h2&gt;

&lt;p&gt;To bridge this gap, the AI research community must move away from the "bigger is always better" mentality. Addressing the language gap requires dedicated, interdisciplinary collaboration rather than just brute-force data collection.&lt;/p&gt;

&lt;p&gt;One promising avenue is the development of specialized, smaller-scale models trained on curated, high-quality datasets rather than massive, noisy web scrapes. Additionally, adopting participatory design approaches—where native speakers are involved in every stage of the AI development cycle—ensures that models are culturally representative and accurate.&lt;/p&gt;

&lt;p&gt;For developers interested in exploring this space, evaluating model performance across diverse linguistic tiers is a critical first step. Below is a simplified conceptual example of how researchers might implement a check for data distribution parity in a training pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;evaluate_language_parity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dataset_metrics&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Calculate representation scores for each language
&lt;/span&gt;    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;language&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;dataset_metrics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;THRESHOLD&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;flag_for_augmentation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;language&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Priority Alert: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;language&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; is underrepresented.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Optimization required for long-tail languages.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;The inclusion of all languages is essential for the future of global AI. As we continue to advance LLM capabilities, it is our collective responsibility to ensure that this progress does not come at the cost of linguistic diversity. By subsidizing research, supporting data stewardship, and designing methods that "do more with less," we can build a future where AI empowers, rather than excludes, communities around the world.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>ethics</category>
      <category>research</category>
    </item>
    <item>
      <title>Conquering Complexity: Building a Robust Bangla Proofreading API</title>
      <dc:creator>Jehadur Rahman (Emran)</dc:creator>
      <pubDate>Wed, 24 Jun 2026 05:57:34 +0000</pubDate>
      <link>https://dev.to/jehadurre/conquering-complexity-building-a-robust-bangla-proofreading-api-15p4</link>
      <guid>https://dev.to/jehadurre/conquering-complexity-building-a-robust-bangla-proofreading-api-15p4</guid>
      <description>&lt;h1&gt;
  
  
  Unlocking Linguistic Precision: The Technical Challenges of Building a Bangla Proofreading API
&lt;/h1&gt;

&lt;p&gt;Creating an automated proofreading tool for the Bangla language is a task that sits at the intersection of complex morphology and computational linguistics. Unlike English, Bangla presents distinct challenges that require custom engineering solutions to ensure accuracy and user satisfaction.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The Morphological Hurdle
&lt;/h2&gt;

&lt;p&gt;Bangla is an agglutinative language, where prefixes and suffixes are frequently combined with roots to alter meaning. A simple dictionary lookup will inevitably fail to catch errors in conjugated verbs or complex compound words. Developers must focus on morphological analyzers and stemming algorithms to understand the root structure of words, rather than relying on static word lists.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Unicode Normalization
&lt;/h2&gt;

&lt;p&gt;One of the most persistent issues in Bangla NLP is the inconsistency in Unicode character representation, particularly regarding the 'hasant' (্) and various vowel signs. Different keyboards and operating systems may produce visually identical text that is encoded differently, leading to massive indexing errors. A robust API must implement a rigorous normalization layer before any processing occurs.&lt;/p&gt;

&lt;p&gt;Consider this simple example of a normalization pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;unicodedata&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;normalize_bangla_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Convert input to normalized Unicode form (NFC)
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;unicodedata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;normalize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;NFC&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Data Scarcity and Quality
&lt;/h2&gt;

&lt;p&gt;While languages like English enjoy vast, curated corpora, Bangla lacks the sheer scale of high-quality, annotated datasets for training grammar checkers. Building a deep learning model often requires vast amounts of labeled 'correct vs. incorrect' text. Developers often have to rely on synthetic data generation or limited open-source resources available on platforms like &lt;a href="https://dev.to[link%20removed]"&gt;Hugging Face&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Contextual Nuance and Ambiguity
&lt;/h2&gt;

&lt;p&gt;Bangla possesses a rich vocabulary where spelling variations—such as 'ওঠো' vs 'উঠো'—can depend heavily on regional dialects or formal versus informal usage. Building an API requires an N-gram or Transformer-based model capable of analyzing sentence structure to flag context-specific errors accurately. The model must be trained not just to spot spelling mistakes, but to understand the semantic intent of the sentence.&lt;/p&gt;

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

&lt;p&gt;Building a Bangla proofreading API is more than just coding; it is about respecting the linguistic architecture of the language. By focusing on morphological analysis and high-quality Unicode normalization, we can bridge the digital divide for Bangla speakers and provide a tool that is both functional and culturally aware.&lt;/p&gt;

</description>
      <category>bangla</category>
      <category>nlp</category>
      <category>programming</category>
      <category>api</category>
    </item>
    <item>
      <title>Algorithmic Logo Design: Building Numerical Integration into the CyArm SVG</title>
      <dc:creator>Jehadur Rahman (Emran)</dc:creator>
      <pubDate>Mon, 22 Jun 2026 07:15:52 +0000</pubDate>
      <link>https://dev.to/jehadurre/algorithmic-logo-design-building-numerical-integration-into-the-cyarm-svg-4ehj</link>
      <guid>https://dev.to/jehadurre/algorithmic-logo-design-building-numerical-integration-into-the-cyarm-svg-4ehj</guid>
      <description>&lt;p&gt;When we approach logo design as a form of systemizing, we move beyond the limitations of manual vector tools and embrace the beauty of repeatable, algorithmic truths. Creating the CyArm SVG requires us to bridge the gap between abstract mathematical functions and concrete visual output—a practice reminiscent of Feynman's approach to physics, where internalizing the problem geometry leads to the most elegant solutions.&lt;/p&gt;

&lt;p&gt;At its core, building this logo relies on numerical integration. By calculating the path segments of our design through iterative summation, we generate complex, organic shapes that are inherently structured. This process mirrors the emergence of complex patterns from simple feedback loops, where the system dictates the form through self-stabilization.&lt;/p&gt;

&lt;p&gt;To implement this, we can use a JavaScript function that iterates through a defined range, calculating coordinates based on a function f(x) and appending them to an SVG path string.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateLogoPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;end&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;M&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;)};&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt;  &lt;span class="nx"&gt;L&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This technique allows for infinite variation. By simply tweaking the underlying mathematical function, we generate a logo that is not only visually striking but also mathematically consistent. It transforms the act of design from a subjective endeavor into a precise, exploratory process of defining systems.&lt;/p&gt;

</description>
      <category>svg</category>
      <category>generative</category>
      <category>mathematics</category>
      <category>programming</category>
    </item>
    <item>
      <title>The Art of CSS: Rendering a Chrysanthemum using only HTML and CSS</title>
      <dc:creator>Jehadur Rahman (Emran)</dc:creator>
      <pubDate>Mon, 22 Jun 2026 06:27:25 +0000</pubDate>
      <link>https://dev.to/jehadurre/the-art-of-css-rendering-a-chrysanthemum-using-only-html-and-css-3j6d</link>
      <guid>https://dev.to/jehadurre/the-art-of-css-rendering-a-chrysanthemum-using-only-html-and-css-3j6d</guid>
      <description>&lt;p&gt;The Art of CSS: Rendering a Chrysanthemum using only HTML and CSS&lt;/p&gt;

&lt;p&gt;CSS art is a fascinating intersection of design and technical precision. By leveraging powerful properties like border-radius, linear-gradient, box-shadow, and transform, you can create intricate illustrations without loading a single external image file. Today, we are exploring the process of rendering a Chrysanthemum—a flower defined by its dense, rhythmic petals—using nothing but pure HTML and CSS.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Philosophy of CSS Art
&lt;/h2&gt;

&lt;p&gt;When we build with CSS, we are essentially drawing shapes. A flower is simply a collection of layered div elements and pseudo-elements. The secret to rendering a complex, organic shape like a chrysanthemum is breaking it down into basic geometric components: petals, layers, and a central core.&lt;/p&gt;

&lt;h2&gt;
  
  
  Constructing the Petals
&lt;/h2&gt;

&lt;p&gt;The signature 'rounded teardrop' shape of a chrysanthemum petal can be achieved using border-radius combined with transform: rotate(). By carefully rotating these shapes around a central point, we can mimic the bloom pattern. Check out this snippet for a single petal:&lt;/p&gt;

&lt;p&gt;css&lt;br&gt;
.petal {&lt;br&gt;
  width: 50px;&lt;br&gt;
  height: 100px;&lt;br&gt;
  background: linear-gradient(to bottom, #ff0, #f90);&lt;br&gt;
  border-radius: 50% 50% 0 0;&lt;br&gt;
  position: absolute;&lt;br&gt;
  transform: rotate(45deg);&lt;br&gt;
  transform-origin: bottom center;&lt;br&gt;
}&lt;/p&gt;

&lt;h2&gt;
  
  
  Stacking and Layering
&lt;/h2&gt;

&lt;p&gt;To achieve depth, you will want to use z-index and varied opacities. A chrysanthemum has hundreds of petals. To optimize this without cluttering your HTML, use CSS pseudo-elements (::before and ::after) as much as possible. This keeps your DOM tree clean while allowing for complex layering.&lt;/p&gt;

&lt;p&gt;For more inspiration on CSS Art, check out the community work at &lt;a href="https://dev.to[link%20removed]"&gt;CodePen&lt;/a&gt; or &lt;a href="https://dev.to[link%20removed]"&gt;CSS-Tricks&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Create CSS Art?
&lt;/h2&gt;

&lt;p&gt;Beyond the aesthetic challenge, CSS art is an excellent way to improve your understanding of the CSS box model, positioning, and animations. It forces you to think spatially and creatively about browser rendering.&lt;/p&gt;

&lt;p&gt;Go ahead, open your favorite code editor and see if you can manifest a floral masterpiece today!&lt;/p&gt;

</description>
      <category>css</category>
      <category>webdev</category>
      <category>art</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Implementing Premium Tech Typography in CSS: A shutdownX Case Study</title>
      <dc:creator>Jehadur Rahman (Emran)</dc:creator>
      <pubDate>Mon, 22 Jun 2026 06:10:57 +0000</pubDate>
      <link>https://dev.to/jehadurre/implementing-premium-tech-typography-in-css-a-shutdownx-case-studynewline-1hbg</link>
      <guid>https://dev.to/jehadurre/implementing-premium-tech-typography-in-css-a-shutdownx-case-studynewline-1hbg</guid>
      <description>&lt;p&gt;Typography is the backbone of user experience in modern SaaS applications. When we set out to build the interface for &lt;a href="https://shutdownx.com" rel="noopener noreferrer"&gt;https://shutdownx.com&lt;/a&gt;, we knew that legibility and a premium "tech-first" aesthetic were non-negotiable. While managing our infrastructure via Supabase and tracking user behavior through Microsoft Clarity, we realized that typography directly influences how users interact with our data-heavy dashboards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Challenge of Modern Readability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In a world of high-DPI displays, "premium" doesn't just mean a nice font family—it means responsive, fluid scale. We needed a system that looked as sharp on a mobile device as it did on a wide-screen monitor. Additionally, given that we have been actively monitoring our site performance and indexing status in Google Search Console, we understood that lean CSS was critical for reducing layout shifts and improving core web vitals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementing Fluid Typography&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of relying on rigid media queries for font sizing, we implemented fluid typography using the CSS clamp() function. This allows the font size to scale smoothly between a defined minimum and maximum range without triggering layout breakpoints.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;css&lt;/span&gt;
&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--fluid-min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;320px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--fluid-max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1440px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--fluid-min-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--fluid-max-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;'Inter'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;-apple-system&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BlinkMacSystemFont&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;'Segoe UI'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Roboto&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--fluid-min-size&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--fluid-min-size&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="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--fluid-max-size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;-&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--fluid-min-size&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="m"&gt;100vw&lt;/span&gt; &lt;span class="n"&gt;-&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--fluid-min-width&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--fluid-max-width&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;-&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--fluid-min-width&lt;/span&gt;&lt;span class="p"&gt;)))),&lt;/span&gt;
    &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--fluid-max-size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Optimizing for the "Tech" Aesthetic&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A premium tech feel often relies on hierarchy and contrast. For our headers, we utilized tabular figures (font-variant-numeric: tabular-nums) to ensure that data displayed in our Supabase-backed tables remained perfectly aligned. This is crucial for financial or metrics-heavy dashboards where visual consistency equals trust.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance Considerations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As noted in our recent Search Console reports, indexing issues such as "Page indexed without content" or "Duplicate, Google chose different canonical than user" can be exacerbated by poor site structure. By leveraging modern CSS variables and a system-font-first approach, we reduced our external font requests, contributing to faster FCP (First Contentful Paint) times. This keeps our site lightweight and ensures search engines can parse our content hierarchy efficiently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use clamp() for fluid typography to eliminate excessive media queries.&lt;/li&gt;
&lt;li&gt;Leverage system font stacks to minimize network requests and improve performance.&lt;/li&gt;
&lt;li&gt;Use tabular-nums for data-heavy components to maintain professional alignment.&lt;/li&gt;
&lt;li&gt;Monitor your CSS impact on site performance using tools like Microsoft Clarity to ensure that your design choices aren't negatively impacting your SEO.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Building for the web requires balancing aesthetics with technical performance. By standardizing our typography, we have not only improved the look of &lt;a href="https://shutdownx.com" rel="noopener noreferrer"&gt;https://shutdownx.com&lt;/a&gt; but also laid a stronger, more maintainable foundation for our frontend.&lt;/p&gt;

&lt;p&gt;Have you implemented fluid typography in your projects? Let me know your favorite techniques in the comments!&lt;/p&gt;

</description>
      <category>newlinecss</category>
      <category>webdesign</category>
      <category>frontend</category>
      <category>performancenewline</category>
    </item>
    <item>
      <title>Stop Nesting: How to Optimize Your Data Mapping Performance</title>
      <dc:creator>Jehadur Rahman (Emran)</dc:creator>
      <pubDate>Mon, 22 Jun 2026 05:31:45 +0000</pubDate>
      <link>https://dev.to/jehadurre/stop-nesting-how-to-optimize-your-data-mapping-performance-4p1j</link>
      <guid>https://dev.to/jehadurre/stop-nesting-how-to-optimize-your-data-mapping-performance-4p1j</guid>
      <description>&lt;p&gt;Why You Should Stop Using Nested Loops for Data Mapping&lt;br&gt;
Nested loops are a common pitfall in software development. They appear frequently when merging datasets, filtering lists, or finding relationships between two arrays. While they might seem intuitive at first, they often lead to performance bottlenecks as your data grows.&lt;/p&gt;

&lt;p&gt;The Problem with Nested Loops&lt;br&gt;
When you nest a loop inside another, you create quadratic time complexity, represented as O(n * m) in &lt;a href="https://dev.to[link%20removed]"&gt;Big O Notation&lt;/a&gt;. For example, if you have two lists of 1,000 items each, a nested loop will perform 1,000,000 operations.&lt;/p&gt;

&lt;p&gt;// The Slow Approach&lt;br&gt;
const users = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }];&lt;br&gt;
const orders = [{ userId: 1, item: 'Book' }, { userId: 2, item: 'Pen' }];&lt;/p&gt;

&lt;p&gt;const result = users.map(user =&amp;gt; {&lt;br&gt;
  const userOrder = orders.find(order =&amp;gt; order.userId === user.id);&lt;br&gt;
  return { ...user, order: userOrder };&lt;br&gt;
});&lt;br&gt;
In this example, for every user, the code scans the entire orders array. If the orders list contains thousands of records, your application will slow down significantly.&lt;/p&gt;

&lt;p&gt;The Solution: Lookups and Maps&lt;br&gt;
The most efficient way to solve this is to reduce the time complexity from O(n * m) to O(n). You can achieve this by transforming one of the datasets into a dictionary or a Map structure for constant-time lookup.&lt;/p&gt;

&lt;p&gt;// The Fast Approach&lt;br&gt;
const orderMap = new Map(orders.map(order =&amp;gt; [order.userId, order]));&lt;/p&gt;

&lt;p&gt;const result = users.map(user =&amp;gt; ({&lt;br&gt;
  ...user,&lt;br&gt;
  order: orderMap.get(user.id)&lt;br&gt;
}));&lt;br&gt;
By creating the orderMap first, we traverse the orders array exactly once. When we map through the users array, looking up the associated order becomes an O(1) operation.&lt;/p&gt;

&lt;p&gt;Why This Matters&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Performance: Your application remains responsive even with large datasets.&lt;/li&gt;
&lt;li&gt;Scalability: As your product grows, your code is less likely to become a performance bottleneck.&lt;/li&gt;
&lt;li&gt;Maintainability: Cleaner, more efficient code is easier to debug and read.
By avoiding nested loops in favor of hash maps or specialized lookup structures, you ensure your software scales gracefully. Optimize your data mapping early to build robust and performant applications.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>performance</category>
      <category>optimization</category>
    </item>
    <item>
      <title>Building an Apple Mail Channel Plugin for OpenClaw</title>
      <dc:creator>Jehadur Rahman (Emran)</dc:creator>
      <pubDate>Mon, 22 Jun 2026 03:12:42 +0000</pubDate>
      <link>https://dev.to/jehadurre/building-an-apple-mail-channel-plugin-for-openclaw-4cgk</link>
      <guid>https://dev.to/jehadurre/building-an-apple-mail-channel-plugin-for-openclaw-4cgk</guid>
      <description>&lt;h1&gt;
  
  
  Building an Apple Mail Channel Plugin for OpenClaw
&lt;/h1&gt;

&lt;p&gt;I recently built and published a plugin that integrates Apple Mail with OpenClaw (an AI automation platform), allowing AI agents to monitor and respond to emails with per-thread session isolation.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 The Problem
&lt;/h2&gt;

&lt;p&gt;OpenClaw and Hermes are powerful AI automation platforms, but they lacked native Apple Mail integration on macOS. Users wanted to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monitor multiple email accounts&lt;/li&gt;
&lt;li&gt;Have AI agents automatically respond to emails&lt;/li&gt;
&lt;li&gt;Maintain conversation context across email threads&lt;/li&gt;
&lt;li&gt;Keep different email conversations isolated&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💡 The Solution
&lt;/h2&gt;

&lt;p&gt;I built &lt;code&gt;@jehadurre/openclaw-apple-mail&lt;/code&gt; - a channel plugin that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connects to Apple Mail via AppleScript&lt;/li&gt;
&lt;li&gt;Creates isolated sessions per email thread&lt;/li&gt;
&lt;li&gt;Processes HTML emails intelligently&lt;/li&gt;
&lt;li&gt;Supports multi-account configuration&lt;/li&gt;
&lt;li&gt;Includes security features like sender allowlists&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; - Type-safe development&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AppleScript&lt;/strong&gt; - Native macOS Mail.app integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTML Processing&lt;/strong&gt; - DOMPurify, jsdom, sanitize-html, marked&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schema Validation&lt;/strong&gt; - Zod for configuration validation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📦 Key Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Per-Thread Session Isolation
&lt;/h3&gt;

&lt;p&gt;Each email conversation gets its own isolated session, preventing context mixing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Each thread gets unique session ID&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sessionId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`apple-mail:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;threadId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Multi-Account Support
&lt;/h3&gt;

&lt;p&gt;Configure multiple email accounts with independent settings:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"channels"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"apple-mail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"accounts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"work"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"work@company.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"pollIntervalMs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;15000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"archiveOnReply"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"personal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"personal@gmail.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"pollIntervalMs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;60000&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&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;h3&gt;
  
  
  3. Security Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Sender allowlist per account&lt;/li&gt;
&lt;li&gt;HTML sanitization&lt;/li&gt;
&lt;li&gt;AppleScript sandboxing&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Smart HTML Processing
&lt;/h3&gt;

&lt;p&gt;Automatically converts HTML emails to clean markdown:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Table extraction and conversion&lt;/li&gt;
&lt;li&gt;Removes tracking pixels&lt;/li&gt;
&lt;li&gt;Sanitizes malicious content&lt;/li&gt;
&lt;li&gt;Preserves formatting for AI agents&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📚 Publishing Journey
&lt;/h2&gt;

&lt;p&gt;I published this plugin to multiple platforms:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. npm Registry
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @jehadurre/openclaw-apple-mail
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;Full source code&lt;/li&gt;
&lt;li&gt;Issue tracking&lt;/li&gt;
&lt;li&gt;Contribution guidelines&lt;/li&gt;
&lt;li&gt;MIT License&lt;/li&gt;
&lt;/ul&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw plugins &lt;span class="nb"&gt;install&lt;/span&gt; @jehadurre/openclaw-apple-mail
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. OpenClaw Skill
&lt;/h3&gt;

&lt;p&gt;Created a comprehensive setup skill:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;clawhub &lt;span class="nb"&gt;install &lt;/span&gt;apple-mail-setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The skill includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installation guide&lt;/li&gt;
&lt;li&gt;5 configuration templates&lt;/li&gt;
&lt;li&gt;Troubleshooting solutions&lt;/li&gt;
&lt;li&gt;Best practices&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎓 Lessons Learned
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Compiled Output Matters
&lt;/h3&gt;

&lt;p&gt;ClawHub requires compiled JavaScript, not just TypeScript source. I had to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Get compiled output from production deployment&lt;/li&gt;
&lt;li&gt;Include &lt;code&gt;index.js&lt;/code&gt; in the package&lt;/li&gt;
&lt;li&gt;Update &lt;code&gt;package.json&lt;/code&gt; to reference the compiled file&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Skills Enhance Adoption
&lt;/h3&gt;

&lt;p&gt;Creating a separate "skill" package that teaches users how to set up and use the plugin significantly improves the user experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Multi-Platform Publishing
&lt;/h3&gt;

&lt;p&gt;Publishing to npm, GitHub, ClawHub, and creating documentation on GitHub Pages maximizes discoverability.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Usage Example
&lt;/h2&gt;

&lt;p&gt;Here's how users set it up:&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Install
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw plugins &lt;span class="nb"&gt;install&lt;/span&gt; @jehadurre/openclaw-apple-mail
clawhub &lt;span class="nb"&gt;install &lt;/span&gt;apple-mail-setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Configure
&lt;/h3&gt;

&lt;p&gt;Add to &lt;code&gt;openclaw.json&lt;/code&gt;:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"channels"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"apple-mail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"accounts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"personal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"user@example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"mailboxAccount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"iCloud"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"allowFrom"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&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;h3&gt;
  
  
  Step 3: Start
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it! OpenClaw now monitors your email and can respond automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  📊 Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Email → Apple Mail.app
              ↓ (AppleScript)
           Plugin Monitor
              ↓
        Session Manager (per-thread isolation)
              ↓
         HTML Processor
              ↓
        OpenClaw/Hermes AI Agent
              ↓
          Response
              ↓ (AppleScript)
        Apple Mail.app → Send Reply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔐 Security Considerations
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sender Allowlist&lt;/strong&gt;: Only process emails from trusted senders&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTML Sanitization&lt;/strong&gt;: Remove malicious content from HTML emails&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AppleScript Sandboxing&lt;/strong&gt;: Limited access to Mail.app APIs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Credential Storage&lt;/strong&gt;: Uses existing Apple Mail accounts&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🌟 Future Enhancements
&lt;/h2&gt;

&lt;p&gt;Planned features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Smart reply suggestions&lt;/li&gt;
&lt;li&gt;[ ] Attachment handling&lt;/li&gt;
&lt;li&gt;[ ] Email categorization&lt;/li&gt;
&lt;li&gt;[ ] Custom email templates&lt;/li&gt;
&lt;li&gt;[ ] Integration with other channels&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📖 Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/JehadurRE/openclaw-apple-mail" rel="noopener noreferrer"&gt;https://github.com/JehadurRE/openclaw-apple-mail&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;npm&lt;/strong&gt;: &lt;a href="https://www.npmjs.com/package/@jehadurre/openclaw-apple-mail" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/@jehadurre/openclaw-apple-mail&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt;: &lt;a href="https://openclaw-apple-mail.jehadurre.me" rel="noopener noreferrer"&gt;https://openclaw-apple-mail.jehadurre.me&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skill&lt;/strong&gt;: &lt;code&gt;clawhub install apple-mail-setup&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🤝 Contributing
&lt;/h2&gt;

&lt;p&gt;Contributions welcome! Check out the &lt;a href="https://github.com/JehadurRE/openclaw-apple-mail/blob/master/CONTRIBUTING.md" rel="noopener noreferrer"&gt;Contributing Guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  💬 Feedback
&lt;/h2&gt;

&lt;p&gt;Have you used AI automation with email? What features would you like to see? Let me know in the comments!&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;About Me&lt;/strong&gt;: I'm Md. Jehadur Rahman (Emran), a developer passionate about AI automation and productivity tools. Find me on &lt;a href="https://github.com/JehadurRE" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and &lt;a href="https://jehadurre.me" rel="noopener noreferrer"&gt;my website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;License&lt;/strong&gt;: MIT - Free to use, modify, and redistribute!&lt;/p&gt;

</description>
      <category>automation</category>
      <category>ai</category>
      <category>macos</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
