<?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: Mayank Kumar Chaudhari</title>
    <description>The latest articles on DEV Community by Mayank Kumar Chaudhari (@mayank1513).</description>
    <link>https://dev.to/mayank1513</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F319425%2F43f1f848-3d57-49d2-a846-377702e0cf80.png</url>
      <title>DEV Community: Mayank Kumar Chaudhari</title>
      <link>https://dev.to/mayank1513</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mayank1513"/>
    <language>en</language>
    <item>
      <title>🔥 Blazing Fast Markdown Rendering for React – Benchmarked &amp; Battle-Tested</title>
      <dc:creator>Mayank Kumar Chaudhari</dc:creator>
      <pubDate>Sat, 12 Jul 2025 03:29:52 +0000</pubDate>
      <link>https://dev.to/mayank1513/blazing-fast-markdown-rendering-for-react-benchmarked-battle-tested-4748</link>
      <guid>https://dev.to/mayank1513/blazing-fast-markdown-rendering-for-react-benchmarked-battle-tested-4748</guid>
      <description>&lt;p&gt;We just benchmarked &lt;code&gt;@m2d/react-markdown&lt;/code&gt; against the popular &lt;code&gt;react-markdown&lt;/code&gt; — and the results are in:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;✅ &lt;strong&gt;Competitive speed&lt;/strong&gt;,&lt;br&gt;
✅ &lt;strong&gt;Cleaner architecture&lt;/strong&gt;,&lt;br&gt;
✅ &lt;strong&gt;Purpose-built for MDAST-first workflows&lt;/strong&gt; like &lt;a href="https://github.com/md2docx/mdast2docx" rel="noopener noreferrer"&gt;&lt;code&gt;mdast2docx&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🚀 Why Another Markdown Renderer?
&lt;/h2&gt;

&lt;p&gt;Most renderers are great at one thing: rendering. But if you’re working on &lt;strong&gt;docx/pdf export, hybrid output (MDX/HTML/JSX), or unified pipelines&lt;/strong&gt;, you need something:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fast 🏎&lt;/li&gt;
&lt;li&gt;Extensible 💡&lt;/li&gt;
&lt;li&gt;MDAST-respecting 🧠&lt;/li&gt;
&lt;li&gt;SSR/Streaming/Edge-ready 💪&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's exactly what &lt;a href="https://github.com/md2docx/react-markdown" rel="noopener noreferrer"&gt;&lt;code&gt;@m2d/react-markdown&lt;/code&gt;&lt;/a&gt; is for.&lt;/p&gt;




&lt;h2&gt;
  
  
  📊 Real Benchmarks — No Hype
&lt;/h2&gt;

&lt;p&gt;We ran thorough benchmarks with various markdown types: simple notes, complex nested GFM, large tutorials, and even full-site markdown dumps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Takeaways:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🟢 &lt;code&gt;@m2d/react-markdown&lt;/code&gt; outperformed or matched &lt;code&gt;react-markdown&lt;/code&gt; in &lt;strong&gt;several medium/complex files&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🔁 Bulk rendering (all files in one go) saw &lt;strong&gt;better JSX tree handling&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;📉 Slightly slower in very short/simple cases (which don't matter much in real apps)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check out the full results here:&lt;br&gt;
👉 &lt;a href="https://github.com/md2docx/react-markdown/blob/main/benchmark.md" rel="noopener noreferrer"&gt;&lt;code&gt;benchmark.md&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Includes tables, deltas, and even visual charts!&lt;/p&gt;




&lt;h2&gt;
  
  
  🔌 Perfect Companion for &lt;code&gt;mdast2docx&lt;/code&gt; &amp;amp; Export Tooling
&lt;/h2&gt;

&lt;p&gt;If you're building tools like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;mdast2docx&lt;/code&gt; (Markdown → Word)&lt;/li&gt;
&lt;li&gt;Hybrid export systems (PDF/HTML from a single source)&lt;/li&gt;
&lt;li&gt;Local-first writing tools with output control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then &lt;code&gt;@m2d/react-markdown&lt;/code&gt; is your new best friend.&lt;br&gt;
It &lt;strong&gt;retains the full MDAST&lt;/strong&gt;, supports plugin injection, and gives you &lt;strong&gt;full control over rendering + export paths&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 Join the Discussion – Shape the Future
&lt;/h2&gt;

&lt;p&gt;We’re actively planning support for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inline JSX support in markdown&lt;/li&gt;
&lt;li&gt;Better handling of reusable ASTs&lt;/li&gt;
&lt;li&gt;Declarative hydration markers for SSR/Edge use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💬 Engage, vote, or suggest improvements here:&lt;br&gt;
👉 &lt;a href="https://github.com/md2docx/react-markdown/discussions/3" rel="noopener noreferrer"&gt;https://github.com/md2docx/react-markdown/discussions/3&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠 Build Your Own Library Like This
&lt;/h2&gt;

&lt;p&gt;This library was scaffolded using &lt;a href="https://github.com/react18-tools/turborepo-template" rel="noopener noreferrer"&gt;&lt;code&gt;react18-tools/turborepo-template&lt;/code&gt;&lt;/a&gt; — a production-grade template for building and publishing modern React libraries.&lt;/p&gt;

&lt;p&gt;If you want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build &amp;amp; test across Next.js/Vite&lt;/li&gt;
&lt;li&gt;Auto-generate docs &amp;amp; examples&lt;/li&gt;
&lt;li&gt;Publish fast and right&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 Use this template to create your own library in minutes.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤝 Call for Contributors
&lt;/h2&gt;

&lt;p&gt;If you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Love performance and clean architecture&lt;/li&gt;
&lt;li&gt;Use React with Markdown in any serious way&lt;/li&gt;
&lt;li&gt;Care about &lt;strong&gt;maintainable DX&lt;/strong&gt; and &lt;strong&gt;OSS karma&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…then jump in!&lt;/p&gt;

&lt;p&gt;Star, fork, or file issues here → &lt;a href="https://github.com/md2docx/react-markdown" rel="noopener noreferrer"&gt;https://github.com/md2docx/react-markdown&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or explore &lt;a href="https://github.com/md2docx/mdast2docx" rel="noopener noreferrer"&gt;&lt;code&gt;mdast2docx&lt;/code&gt;&lt;/a&gt; to see how this library integrates into real export workflows.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧘‍♂️ Built with Care
&lt;/h2&gt;

&lt;p&gt;This isn’t just a library — it’s a piece in a larger mission to &lt;strong&gt;simplify dev workflows&lt;/strong&gt; and &lt;strong&gt;bridge content with output&lt;/strong&gt; in meaningful ways.&lt;/p&gt;

</description>
      <category>react</category>
      <category>markdown</category>
      <category>opensource</category>
      <category>performance</category>
    </item>
    <item>
      <title>🧠 Shadow AI: The Invisible Power (or Threat) Inside Your Organization</title>
      <dc:creator>Mayank Kumar Chaudhari</dc:creator>
      <pubDate>Tue, 01 Jul 2025 16:56:29 +0000</pubDate>
      <link>https://dev.to/mayank1513/shadow-ai-the-invisible-power-or-threat-inside-your-organization-lmh</link>
      <guid>https://dev.to/mayank1513/shadow-ai-the-invisible-power-or-threat-inside-your-organization-lmh</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“If you don’t manage Shadow AI, it will manage you.”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  ⚡ TL;DR
&lt;/h3&gt;

&lt;p&gt;Shadow AI refers to the use of AI tools (like ChatGPT, Copilot, Notion AI) &lt;strong&gt;without official approval&lt;/strong&gt; from an organization’s IT or governance teams.&lt;/p&gt;

&lt;p&gt;It’s fast. It’s helpful.&lt;br&gt;
But it’s also risky. And potentially lethal.&lt;/p&gt;

&lt;p&gt;Let’s unpack why this is happening, what it means for your team, and what you can do about it — today.&lt;/p&gt;




&lt;h3&gt;
  
  
  🤖 What is Shadow AI?
&lt;/h3&gt;

&lt;p&gt;Shadow AI = &lt;em&gt;Unofficial AI&lt;/em&gt;.&lt;br&gt;
Tools used by employees without IT's knowledge.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Think: ChatGPT in a browser tab, GitHub Copilot in VSCode, or Notion AI drafting reports — all outside org policies.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;It’s like Shadow IT&lt;/strong&gt;, but more powerful, less visible, and harder to regulate.&lt;/p&gt;




&lt;h3&gt;
  
  
  💡 Why It’s Happening
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;AI tools are easy to access, free or freemium.&lt;/li&gt;
&lt;li&gt;Employees want to &lt;strong&gt;work faster, smarter&lt;/strong&gt;, and &lt;strong&gt;skip the red tape&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Organizations are slow to adopt or govern AI use.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;In short: &lt;strong&gt;the people are ready&lt;/strong&gt;, the process is not.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  🚀 The Good
&lt;/h3&gt;

&lt;p&gt;Shadow AI can be &lt;strong&gt;incredibly productive&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster content creation&lt;/li&gt;
&lt;li&gt;Smarter code generation&lt;/li&gt;
&lt;li&gt;Rapid brainstorming and analysis&lt;/li&gt;
&lt;li&gt;Reduced grunt work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📸 &lt;strong&gt;Suggested image&lt;/strong&gt;:&lt;br&gt;
Illustration of a developer using Copilot, a marketer using ChatGPT, and a student using Notion AI — side by side.&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚠️ The Bad (and Dangerous)
&lt;/h3&gt;

&lt;p&gt;But the risks are &lt;em&gt;very real&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ &lt;strong&gt;Sensitive data leaks&lt;/strong&gt; (e.g., uploading internal reports to ChatGPT)&lt;/li&gt;
&lt;li&gt;⚖️ &lt;strong&gt;Compliance violations&lt;/strong&gt; (GDPR, HIPAA, etc.)&lt;/li&gt;
&lt;li&gt;🧠 &lt;strong&gt;Unvetted outputs&lt;/strong&gt;: hallucinations, bias, misinformation&lt;/li&gt;
&lt;li&gt;🕳️ &lt;strong&gt;Lack of accountability&lt;/strong&gt; for decisions made by AI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📸 &lt;strong&gt;Suggested image/GIF&lt;/strong&gt;:&lt;br&gt;
A file labeled "Confidential.pdf" being dragged into a chatbot — with a red alert popping up.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔍 Real-World Examples
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A fintech employee uses ChatGPT to summarize client reports → GDPR breach&lt;/li&gt;
&lt;li&gt;Dev team relies on Copilot → accidentally ships AI-generated insecure code&lt;/li&gt;
&lt;li&gt;Marketing team drafts email with AI → brand voice misaligned&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren’t &lt;em&gt;what ifs&lt;/em&gt; — they’ve already happened.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧩 The Shadow AI Dilemma
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;⚡ Speed&lt;/th&gt;
&lt;th&gt;🔒 Risk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Rapid innovation&lt;/td&gt;
&lt;td&gt;Data leakage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Personal productivity boost&lt;/td&gt;
&lt;td&gt;Compliance violations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automation of routine tasks&lt;/td&gt;
&lt;td&gt;Brand or legal liabilities&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You can’t ignore Shadow AI.&lt;br&gt;
You can’t block it completely.&lt;br&gt;
&lt;strong&gt;You have to manage it.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  ✅ What You Can Do (Right Now)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Acknowledge&lt;/strong&gt; it’s happening — Shadow AI is already in your org.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit&lt;/strong&gt; usage: who is using what, how, and where?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Educate&lt;/strong&gt; teams on safe and unsafe practices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adopt&lt;/strong&gt; a lightweight AI Use Policy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Provide&lt;/strong&gt; sanctioned alternatives where possible (e.g., secure AI endpoints).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;📎 &lt;strong&gt;Bonus&lt;/strong&gt;:&lt;br&gt;
Check out this free &lt;a href="https://gist.github.com/mayank1513/a1912e2fe3a4ba58709170e90784c38c#file-shadow-ai-checklist-md" rel="noopener noreferrer"&gt;🧠 Shadow AI Risk &amp;amp; Readiness Checklist&lt;/a&gt; to get started.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧠 Final Thought
&lt;/h3&gt;

&lt;p&gt;Shadow AI isn’t evil.&lt;br&gt;
It’s simply &lt;em&gt;ahead of your processes&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Leaders who embrace it &lt;strong&gt;strategically&lt;/strong&gt; will unlock the next wave of productivity.&lt;br&gt;
Those who ignore it risk being blindsided — by their own teams.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Written by &lt;a href="https://mayank-chaudhari.vercel.app" rel="noopener noreferrer"&gt;Mayank Chaudhari&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Should You Use position: absolute for Chat UI Timestamps? A Front-End Architect's Guide</title>
      <dc:creator>Mayank Kumar Chaudhari</dc:creator>
      <pubDate>Thu, 26 Jun 2025 02:32:57 +0000</pubDate>
      <link>https://dev.to/mayank1513/should-you-use-position-absolute-for-chat-ui-timestamps-a-front-end-architects-guide-4aln</link>
      <guid>https://dev.to/mayank1513/should-you-use-position-absolute-for-chat-ui-timestamps-a-front-end-architects-guide-4aln</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Learn when to use position: absolute in chat UIs — and when it breaks. Explore layout best practices, real-world examples, and performance tips from a front-end architect's perspective.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When building modern chat UIs, we often obsess over message bubbles, delivery ticks, avatars—but one tiny UI detail keeps sparking debate: &lt;strong&gt;where and how should timestamps be placed?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As a front-end architect, this tiny decision is a microcosm of a bigger question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;✨ &lt;em&gt;When should we use &lt;code&gt;position: absolute&lt;/code&gt;, and when should we let layout engines do the work?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let’s break it down.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔍 Absolute Positioning: A Quick Primer
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;position: absolute&lt;/code&gt; removes an element from the document flow and lets you place it precisely relative to its nearest &lt;code&gt;position: relative&lt;/code&gt; ancestor.&lt;/p&gt;

&lt;p&gt;This can be extremely useful… or dangerously brittle.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Pros of Using &lt;code&gt;position: absolute&lt;/code&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Precise control&lt;/strong&gt;: Place elements exactly where you want, pixel-perfect.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean layout&lt;/strong&gt;: Timestamps don’t affect the wrapping of text or sibling layout.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI isolation&lt;/strong&gt;: Keeps metadata (timestamps) visually detached from message content.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  💡 Ideal Use Cases:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Tooltips&lt;/li&gt;
&lt;li&gt;Dropdowns&lt;/li&gt;
&lt;li&gt;Floating badges&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Timestamps in message bubbles&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ❌ Cons of Using &lt;code&gt;position: absolute&lt;/code&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Non-responsive&lt;/strong&gt;: Doesn’t naturally scale with content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hard to maintain&lt;/strong&gt;: Prone to breaking if DOM structure changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stacking context issues&lt;/strong&gt;: Requires careful z-index and containment.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💬 The Chat Bubble Use Case
&lt;/h2&gt;

&lt;p&gt;Say you have a message bubble like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"message"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"message-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Hello! How are you?&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"timestamp"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;10:42 PM&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.message&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;relative&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f1f1f1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;75%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.timestamp&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;right&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&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="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#888&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 works &lt;em&gt;beautifully&lt;/em&gt;. The timestamp is always anchored in the bottom-right of the bubble, no matter how short or long the message is.&lt;/p&gt;




&lt;h2&gt;
  
  
  👎 When to Avoid It
&lt;/h2&gt;

&lt;p&gt;Avoid &lt;code&gt;position: absolute&lt;/code&gt; if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your layout is &lt;strong&gt;fluid&lt;/strong&gt;, or&lt;/li&gt;
&lt;li&gt;Messages contain &lt;strong&gt;media&lt;/strong&gt;, &lt;strong&gt;links&lt;/strong&gt;, or &lt;strong&gt;multiple lines&lt;/strong&gt;, or&lt;/li&gt;
&lt;li&gt;You’re dealing with &lt;strong&gt;RTL&lt;/strong&gt;, &lt;strong&gt;dynamic content&lt;/strong&gt;, or &lt;strong&gt;multiline interactions&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In these cases, it’s often better to use &lt;strong&gt;Flexbox&lt;/strong&gt; or &lt;strong&gt;CSS Grid&lt;/strong&gt; for layout control.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎓 Best Practices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ DO:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;absolute&lt;/code&gt; &lt;strong&gt;within a positioned container&lt;/strong&gt; (&lt;code&gt;relative&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Use it for &lt;strong&gt;visual elements&lt;/strong&gt; that shouldn’t impact layout flow (timestamps, icons).&lt;/li&gt;
&lt;li&gt;Combine with &lt;strong&gt;z-index strategy&lt;/strong&gt; to prevent overlap issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ DON'T:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Don’t build full layouts with &lt;code&gt;absolute&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Don’t mix with Flex/Grid without clear intent.&lt;/li&gt;
&lt;li&gt;Don’t forget responsiveness!&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 Final Verdict: Use &lt;code&gt;absolute&lt;/code&gt;... Carefully
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;✅ If your chat bubble is tightly scoped, controlled, and visually simple — use &lt;code&gt;position: absolute&lt;/code&gt; for your timestamp.&lt;/p&gt;

&lt;p&gt;❌ If you're designing for scale, multiple content types, or edge cases — lean into Flex/Grid and let the browser do the heavy lifting.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>css</category>
      <category>frontend</category>
      <category>webdev</category>
      <category>ui</category>
    </item>
    <item>
      <title>Introducing Kosha – A Minimal, Modern State Manager for React</title>
      <dc:creator>Mayank Kumar Chaudhari</dc:creator>
      <pubDate>Wed, 11 Jun 2025 04:57:40 +0000</pubDate>
      <link>https://dev.to/mayank1513/introducing-kosha-a-minimal-modern-state-manager-for-react-431c</link>
      <guid>https://dev.to/mayank1513/introducing-kosha-a-minimal-modern-state-manager-for-react-431c</guid>
      <description>&lt;h2&gt;
  
  
  ⚡ Kosha – A Minimal, Modern State Manager for React
&lt;/h2&gt;

&lt;p&gt;Looking for a fast, ergonomic, and lightweight state management solution tailored for modern React?&lt;/p&gt;

&lt;p&gt;Meet &lt;strong&gt;Kosha&lt;/strong&gt; – a &lt;strong&gt;~450 byte&lt;/strong&gt;, production-ready global state manager built with React 18+ in mind. It gives you the performance of &lt;code&gt;useSyncExternalStore&lt;/code&gt; and the elegance of Immer – all in one tiny package.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Why Kosha?
&lt;/h2&gt;

&lt;p&gt;Kosha was built to simplify state management for real-world apps — small enough to fit in your head, but powerful enough to scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✨ Highlights
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ultra-lightweight&lt;/strong&gt; (~450 bytes minzipped)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero re-renders by default&lt;/strong&gt; – powered by &lt;code&gt;useSyncExternalStore&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modular slice architecture&lt;/strong&gt; – supports Zustand-style slices&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in middleware support&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/react18-tools/kosha/blob/main/lib/src/middleware/persist.ts" rel="noopener noreferrer"&gt;&lt;code&gt;persist&lt;/code&gt;&lt;/a&gt;: syncs state across &lt;strong&gt;tabs&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/react18-tools/kosha/blob/main/lib/src/middleware/immer.ts" rel="noopener noreferrer"&gt;&lt;code&gt;immer&lt;/code&gt;&lt;/a&gt;: ergonomically mutate nested state&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;TypeScript-first DX&lt;/strong&gt; – store creation, selection, and updates are fully typed&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Test-ready&lt;/strong&gt; – includes testing utilities to reset stores between test cases&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  📦 Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i kosha
&lt;span class="c"&gt;# or&lt;/span&gt;
yarn add kosha
&lt;span class="c"&gt;# or&lt;/span&gt;
pnpm add kosha
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Slice Composition (Modular Store Setup)
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`ts&lt;br&gt;
type Store = CounterSlice &amp;amp; ThemeSlice;&lt;/p&gt;

&lt;p&gt;const createCounterSlice: SliceCreator = set =&amp;gt; ({&lt;br&gt;
  count: 0,&lt;br&gt;
  setCount: count =&amp;gt; set({ count }),&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;const createThemeSlice: SliceCreator = set =&amp;gt; ({&lt;br&gt;
  theme: 'light',&lt;br&gt;
  setTheme: theme =&amp;gt; set({ theme }),&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;const useStore = create((...a) =&amp;gt; ({&lt;br&gt;
  ...createCounterSlice(...a),&lt;br&gt;
  ...createThemeSlice(...a),&lt;br&gt;
}));&lt;br&gt;
`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 Testing Made Simple
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`ts&lt;br&gt;
import { create } from 'kosha/utils/test';&lt;/p&gt;

&lt;p&gt;const useTestStore = create(set =&amp;gt; ({&lt;br&gt;
  count: 0,&lt;br&gt;
  increment: () =&amp;gt; set(state =&amp;gt; ({ count: state.count + 1 })),&lt;br&gt;
}));&lt;/p&gt;

&lt;p&gt;// Automatically resets between tests&lt;br&gt;
`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🌐 See it Live
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;🔗 &lt;a href="https://kosha-six.vercel.app" rel="noopener noreferrer"&gt;Live Demo&lt;/a&gt;&lt;br&gt;
📦 &lt;a href="https://github.com/react18-tools/kosha" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;br&gt;
📘 &lt;a href="https://github.com/react18-tools/kosha#readme" rel="noopener noreferrer"&gt;Docs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  ❤️ Built with love by &lt;a href="https://mayank-chaudhari.vercel.app" rel="noopener noreferrer"&gt;Mayank Chaudhari&lt;/a&gt;
&lt;/h2&gt;




&lt;p&gt;Give Kosha a try — and say goodbye to bloated state libraries ✌️&lt;br&gt;
Let me know what you build with it! 🚀&lt;/p&gt;

</description>
      <category>react</category>
      <category>typescript</category>
      <category>opensource</category>
      <category>redux</category>
    </item>
    <item>
      <title>🧠 Kosha – A 450-byte Global State Manager for React (Highly Optimized and with Middleware Support)</title>
      <dc:creator>Mayank Kumar Chaudhari</dc:creator>
      <pubDate>Wed, 11 Jun 2025 04:51:22 +0000</pubDate>
      <link>https://dev.to/mayank1513/kosha-a-450-byte-global-state-manager-for-react-highly-optimized-and-with-middleware-support-3nl5</link>
      <guid>https://dev.to/mayank1513/kosha-a-450-byte-global-state-manager-for-react-highly-optimized-and-with-middleware-support-3nl5</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fegipbxesn6zyjvubuh8s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fegipbxesn6zyjvubuh8s.png" alt="Kosha" width="40" height="40"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;React developers often juggle between &lt;strong&gt;performance&lt;/strong&gt;, &lt;strong&gt;bundle size&lt;/strong&gt;, and &lt;strong&gt;developer ergonomics&lt;/strong&gt; when choosing a state management library.&lt;/p&gt;

&lt;p&gt;Introducing &lt;strong&gt;Kosha&lt;/strong&gt; – a production-ready, &lt;strong&gt;~450 byte&lt;/strong&gt; global state manager with:&lt;/p&gt;

&lt;p&gt;✅ Full React 18+ and concurrent rendering support&lt;br&gt;&lt;br&gt;
✅ Optimized selectors using &lt;code&gt;useSyncExternalStore&lt;/code&gt;&lt;br&gt;&lt;br&gt;
✅ Partial updates out-of-the-box&lt;br&gt;&lt;br&gt;
✅ Built-in middleware architecture&lt;br&gt;&lt;br&gt;
✅ Working &lt;code&gt;persist&lt;/code&gt; middleware&lt;br&gt;&lt;br&gt;
✅ No unnecessary re-renders  &lt;/p&gt;


&lt;h3&gt;
  
  
  🧪 How it Works
&lt;/h3&gt;

&lt;p&gt;Create a store with a minimal API:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;create&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;kosha&lt;/span&gt;&lt;span class="dl"&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;useStore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&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="p"&gt;}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;Use selector-based consumption for optimization:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;ts&lt;br&gt;
const count = useStore(state =&amp;gt; state.count);&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Update state from anywhere, even outside React:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;ts&lt;br&gt;
useStore.getState().increment();&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚖️ Kosha vs Zustand
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Kosha&lt;/th&gt;
&lt;th&gt;Zustand&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Size (minzipped)&lt;/td&gt;
&lt;td&gt;~450 bytes&lt;/td&gt;
&lt;td&gt;~0.6–2.5kB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Optimized Selectors&lt;/td&gt;
&lt;td&gt;✅ Built-in&lt;/td&gt;
&lt;td&gt;⚠️ Manual&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Middleware&lt;/td&gt;
&lt;td&gt;✅ (custom)&lt;/td&gt;
&lt;td&gt;✅ Rich plugins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Devtools&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  🔧 Middleware Support Example
&lt;/h3&gt;

&lt;p&gt;Check out the working &lt;a href="https://github.com/mayank1513/kosha/blob/main/lib/src/middleware/persist.ts" rel="noopener noreferrer"&gt;persist middleware&lt;/a&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  📦 Try It Now
&lt;/h3&gt;

&lt;p&gt;Live demo: &lt;a href="https://kosha-six.vercel.app" rel="noopener noreferrer"&gt;kosha-six.vercel.app&lt;/a&gt;&lt;br&gt;
Source: &lt;a href="https://github.com/react18-tools/kosha" rel="noopener noreferrer"&gt;github.com/react18-tools/kosha&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me know what middleware you'd love to see added next!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Post the long-form blog above with tags: &lt;code&gt;react&lt;/code&gt;, &lt;code&gt;javascript&lt;/code&gt;, &lt;code&gt;webdev&lt;/code&gt;, &lt;code&gt;opensource&lt;/code&gt;, &lt;code&gt;state-management&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Publish during &lt;strong&gt;weekday morning IST/EST&lt;/strong&gt; (e.g., Tue/Wed ~9–10am IST or EST)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Answer: Architecture patterns for extendable MVC applications</title>
      <dc:creator>Mayank Kumar Chaudhari</dc:creator>
      <pubDate>Tue, 10 Dec 2024 12:56:13 +0000</pubDate>
      <link>https://dev.to/mayank1513/answer-architecture-patterns-for-extendable-mvc-applications-5hh7</link>
      <guid>https://dev.to/mayank1513/answer-architecture-patterns-for-extendable-mvc-applications-5hh7</guid>
      <description>&lt;div class="ltag__stackexchange--container"&gt;
  &lt;div class="ltag__stackexchange--title-container"&gt;
    
      &lt;div class="ltag__stackexchange--title"&gt;
        &lt;div class="ltag__stackexchange--header"&gt;
          &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackoverflow-logo-b42691ae545e4810b105ee957979a853a696085e67e43ee14c5699cf3e890fb4.svg" alt=""&gt;
          &lt;a href="https://stackoverflow.com/questions/79247876/architecture-patterns-for-extendable-mvc-applications/79268336#79268336" rel="noopener noreferrer"&gt;
            &lt;span class="title-flare"&gt;answer&lt;/span&gt; re: Architecture patterns for extendable MVC applications
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="ltag__stackexchange--post-metadata"&gt;
          &lt;span&gt;Dec 10 '24&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;a class="ltag__stackexchange--score-container" href="https://stackoverflow.com/questions/79247876/architecture-patterns-for-extendable-mvc-applications/79268336#79268336" rel="noopener noreferrer"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackexchange-arrow-up-eff2e2849e67d156181d258e38802c0b57fa011f74164a7f97675ca3b6ab756b.svg" alt=""&gt;
        &lt;div class="ltag__stackexchange--score-number"&gt;
          0
        &lt;/div&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackexchange-arrow-down-4349fac0dd932d284fab7e4dd9846f19a3710558efde0d2dfd05897f3eeb9aba.svg" alt=""&gt;
      &lt;/a&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--body"&gt;
    
&lt;p&gt;I am sure you have already thought through SOLID principles. The way you have described your code seems very similar to &lt;a href="https://code.visualstudio.com/api/get-started/your-first-extension" rel="nofollow noreferrer noopener"&gt;VS Code extensions&lt;/a&gt; framework.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;splitting views and controllers into atomic chunks (e.g. methods)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This seems a very good starting point.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;The customization must be possible in the runtime&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I…&lt;/p&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--btn--container"&gt;
    &lt;a href="https://stackoverflow.com/questions/79247876/architecture-patterns-for-extendable-mvc-applications/79268336#79268336" class="ltag__stackexchange--btn" rel="noopener noreferrer"&gt;Open Full Answer&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Answer: Typing a dynamic tag in React with TypeScript?</title>
      <dc:creator>Mayank Kumar Chaudhari</dc:creator>
      <pubDate>Sun, 08 Dec 2024 10:58:23 +0000</pubDate>
      <link>https://dev.to/mayank1513/answer-typing-a-dynamic-tag-in-react-with-typescript-59d9</link>
      <guid>https://dev.to/mayank1513/answer-typing-a-dynamic-tag-in-react-with-typescript-59d9</guid>
      <description>&lt;div class="ltag__stackexchange--container"&gt;
  &lt;div class="ltag__stackexchange--title-container"&gt;
    
      &lt;div class="ltag__stackexchange--title"&gt;
        &lt;div class="ltag__stackexchange--header"&gt;
          &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackoverflow-logo-b42691ae545e4810b105ee957979a853a696085e67e43ee14c5699cf3e890fb4.svg" alt=""&gt;
          &lt;a href="https://stackoverflow.com/questions/55969769/typing-a-dynamic-tag-in-react-with-typescript/79262296#79262296" rel="noopener noreferrer"&gt;
            &lt;span class="title-flare"&gt;answer&lt;/span&gt; re: Typing a dynamic tag in React with TypeScript?
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="ltag__stackexchange--post-metadata"&gt;
          &lt;span&gt;Dec  8 '24&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;a class="ltag__stackexchange--score-container" href="https://stackoverflow.com/questions/55969769/typing-a-dynamic-tag-in-react-with-typescript/79262296#79262296" rel="noopener noreferrer"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackexchange-arrow-up-eff2e2849e67d156181d258e38802c0b57fa011f74164a7f97675ca3b6ab756b.svg" alt=""&gt;
        &lt;div class="ltag__stackexchange--score-number"&gt;
          0
        &lt;/div&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackexchange-arrow-down-4349fac0dd932d284fab7e4dd9846f19a3710558efde0d2dfd05897f3eeb9aba.svg" alt=""&gt;
      &lt;/a&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--body"&gt;
    
&lt;p&gt;&lt;code&gt;JSX.IntrinsicElements&lt;/code&gt; no longer works with the new TypeScript version. It throws &lt;code&gt;namespace JSX not found&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The solution is to use either &lt;code&gt;ReactHTML&lt;/code&gt; from React or &lt;code&gt;HTMLElementTagNameMap&lt;/code&gt; from &lt;code&gt;lib.dom.d.ts&lt;/code&gt; (No need to import, works out of box).&lt;/p&gt;
&lt;p&gt;So the full solution for allowing the HTML tags as well as React…&lt;/p&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--btn--container"&gt;
    &lt;a href="https://stackoverflow.com/questions/55969769/typing-a-dynamic-tag-in-react-with-typescript/79262296#79262296" class="ltag__stackexchange--btn" rel="noopener noreferrer"&gt;Open Full Answer&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Answer: Handling pending state for server components during revalidatePath in Next.js</title>
      <dc:creator>Mayank Kumar Chaudhari</dc:creator>
      <pubDate>Wed, 07 Feb 2024 11:56:39 +0000</pubDate>
      <link>https://dev.to/mayank1513/answer-handling-pending-state-for-server-components-during-revalidatepath-in-nextjs-26a3</link>
      <guid>https://dev.to/mayank1513/answer-handling-pending-state-for-server-components-during-revalidatepath-in-nextjs-26a3</guid>
      <description>&lt;div class="ltag__stackexchange--container"&gt;
  &lt;div class="ltag__stackexchange--title-container"&gt;
    
      &lt;div class="ltag__stackexchange--title"&gt;
        &lt;div class="ltag__stackexchange--header"&gt;
          &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackoverflow-logo-b42691ae545e4810b105ee957979a853a696085e67e43ee14c5699cf3e890fb4.svg" alt=""&gt;
          &lt;a href="https://stackoverflow.com/questions/77599545/handling-pending-state-for-server-components-during-revalidatepath-in-next-js/77952324#77952324" rel="noopener noreferrer"&gt;
            &lt;span class="title-flare"&gt;answer&lt;/span&gt; re: Handling pending state for server components during revalidatePath in Next.js
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="ltag__stackexchange--post-metadata"&gt;
          &lt;span&gt;Feb  7 '24&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;a class="ltag__stackexchange--score-container" href="https://stackoverflow.com/questions/77599545/handling-pending-state-for-server-components-during-revalidatepath-in-next-js/77952324#77952324" rel="noopener noreferrer"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackexchange-arrow-up-eff2e2849e67d156181d258e38802c0b57fa011f74164a7f97675ca3b6ab756b.svg" alt=""&gt;
        &lt;div class="ltag__stackexchange--score-number"&gt;
          1
        &lt;/div&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackexchange-arrow-down-4349fac0dd932d284fab7e4dd9846f19a3710558efde0d2dfd05897f3eeb9aba.svg" alt=""&gt;
      &lt;/a&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--body"&gt;
    
&lt;p&gt;Please check out the official docs - &lt;a href="https://nextjs.org/docs/app/api-reference/functions/revalidatePath" rel="nofollow noreferrer noopener"&gt;https://nextjs.org/docs/app/api-reference/functions/revalidatePath&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;revalidatePath only invalidates the cache when the included path is &lt;strong&gt;next visited&lt;/strong&gt;. This means calling revalidatePath with a dynamic route segment will not immediately trigger many revalidations at once. The invalidation only happens when the path is next visited.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thus, your…&lt;/p&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--btn--container"&gt;
    &lt;a href="https://stackoverflow.com/questions/77599545/handling-pending-state-for-server-components-during-revalidatepath-in-next-js/77952324#77952324" class="ltag__stackexchange--btn" rel="noopener noreferrer"&gt;Open Full Answer&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Answer: srcSet in Image component is not working and it is not displaying right image in next js</title>
      <dc:creator>Mayank Kumar Chaudhari</dc:creator>
      <pubDate>Tue, 07 Nov 2023 05:37:49 +0000</pubDate>
      <link>https://dev.to/mayank1513/answer-srcset-in-image-component-is-not-working-and-it-is-not-displaying-right-image-in-next-js-5g55</link>
      <guid>https://dev.to/mayank1513/answer-srcset-in-image-component-is-not-working-and-it-is-not-displaying-right-image-in-next-js-5g55</guid>
      <description>&lt;div class="ltag__stackexchange--container"&gt;
  &lt;div class="ltag__stackexchange--title-container"&gt;
    
      &lt;div class="ltag__stackexchange--title"&gt;
        &lt;div class="ltag__stackexchange--header"&gt;
          &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackoverflow-logo-b42691ae545e4810b105ee957979a853a696085e67e43ee14c5699cf3e890fb4.svg" alt=""&gt;
          &lt;a href="https://stackoverflow.com/questions/77429131/srcset-in-image-component-is-not-working-and-it-is-not-displaying-right-image-in/77429639#77429639" rel="noopener noreferrer"&gt;
            &lt;span class="title-flare"&gt;answer&lt;/span&gt; re: srcSet in Image component is not working and it is not displaying right image in next js
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="ltag__stackexchange--post-metadata"&gt;
          &lt;span&gt;Nov  6 '23&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;a class="ltag__stackexchange--score-container" href="https://stackoverflow.com/questions/77429131/srcset-in-image-component-is-not-working-and-it-is-not-displaying-right-image-in/77429639#77429639" rel="noopener noreferrer"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackexchange-arrow-up-eff2e2849e67d156181d258e38802c0b57fa011f74164a7f97675ca3b6ab756b.svg" alt=""&gt;
        &lt;div class="ltag__stackexchange--score-number"&gt;
          1
        &lt;/div&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackexchange-arrow-down-4349fac0dd932d284fab7e4dd9846f19a3710558efde0d2dfd05897f3eeb9aba.svg" alt=""&gt;
      &lt;/a&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--body"&gt;
    
&lt;p&gt;Checkout this API reference - &lt;a href="https://nextjs.org/docs/pages/api-reference/components/image" rel="nofollow noreferrer noopener"&gt;https://nextjs.org/docs/pages/api-reference/components/image&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Next.js Image component does not support passing &lt;code&gt;srcSet&lt;/code&gt; like how you are trying to do. You can handle this using JavaScript, e.g., using a custom loader function or storing the image URL in a state variable.&lt;/p&gt;

    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--btn--container"&gt;
    &lt;a href="https://stackoverflow.com/questions/77429131/srcset-in-image-component-is-not-working-and-it-is-not-displaying-right-image-in/77429639#77429639" class="ltag__stackexchange--btn" rel="noopener noreferrer"&gt;Open Full Answer&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Answer: Fetching related data via an API and rendering it in components via Next.js</title>
      <dc:creator>Mayank Kumar Chaudhari</dc:creator>
      <pubDate>Sun, 05 Nov 2023 02:57:47 +0000</pubDate>
      <link>https://dev.to/mayank1513/answer-fetching-related-data-via-an-api-and-rendering-it-in-components-via-nextjs-40a1</link>
      <guid>https://dev.to/mayank1513/answer-fetching-related-data-via-an-api-and-rendering-it-in-components-via-nextjs-40a1</guid>
      <description>&lt;div class="ltag__stackexchange--container"&gt;
  &lt;div class="ltag__stackexchange--title-container"&gt;
    
      &lt;div class="ltag__stackexchange--title"&gt;
        &lt;div class="ltag__stackexchange--header"&gt;
          &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackoverflow-logo-b42691ae545e4810b105ee957979a853a696085e67e43ee14c5699cf3e890fb4.svg" alt=""&gt;
          &lt;a href="https://stackoverflow.com/questions/77419887/fetching-related-data-via-an-api-and-rendering-it-in-components-via-next-js/77420664#77420664" rel="noopener noreferrer"&gt;
            &lt;span class="title-flare"&gt;answer&lt;/span&gt; re: Fetching related data via an API and rendering it in components via Next.js
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="ltag__stackexchange--post-metadata"&gt;
          &lt;span&gt;Nov  4 '23&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;a class="ltag__stackexchange--score-container" href="https://stackoverflow.com/questions/77419887/fetching-related-data-via-an-api-and-rendering-it-in-components-via-next-js/77420664#77420664" rel="noopener noreferrer"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackexchange-arrow-up-eff2e2849e67d156181d258e38802c0b57fa011f74164a7f97675ca3b6ab756b.svg" alt=""&gt;
        &lt;div class="ltag__stackexchange--score-number"&gt;
          1
        &lt;/div&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackexchange-arrow-down-4349fac0dd932d284fab7e4dd9846f19a3710558efde0d2dfd05897f3eeb9aba.svg" alt=""&gt;
      &lt;/a&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--body"&gt;
    
&lt;p&gt;Rendering html in API doesn't make much sense. Best way is to include that render information in your API response.&lt;/p&gt;
&lt;p&gt;If you have deeply nested components, you should use global state management or context API (useContext and Provider) to make the props available.&lt;/p&gt;
&lt;p&gt;But since you are using Next.js, you…&lt;/p&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--btn--container"&gt;
    &lt;a href="https://stackoverflow.com/questions/77419887/fetching-related-data-via-an-api-and-rendering-it-in-components-via-next-js/77420664#77420664" class="ltag__stackexchange--btn" rel="noopener noreferrer"&gt;Open Full Answer&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Answer: Next.js 13: Data Fetching Issue with Prisma ORM - Old Data Displayed During Navigation Instead of Updated Data</title>
      <dc:creator>Mayank Kumar Chaudhari</dc:creator>
      <pubDate>Tue, 10 Oct 2023 19:45:56 +0000</pubDate>
      <link>https://dev.to/mayank1513/answer-nextjs-13-data-fetching-issue-with-prisma-orm-old-data-displayed-during-navigation-instead-of-updated-data-2h9b</link>
      <guid>https://dev.to/mayank1513/answer-nextjs-13-data-fetching-issue-with-prisma-orm-old-data-displayed-during-navigation-instead-of-updated-data-2h9b</guid>
      <description>&lt;div class="ltag__stackexchange--container"&gt;
  &lt;div class="ltag__stackexchange--title-container"&gt;
    
      &lt;div class="ltag__stackexchange--title"&gt;
        &lt;div class="ltag__stackexchange--header"&gt;
          &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackoverflow-logo-b42691ae545e4810b105ee957979a853a696085e67e43ee14c5699cf3e890fb4.svg" alt=""&gt;
          &lt;a href="https://stackoverflow.com/questions/76244697/next-js-13-data-fetching-issue-with-prisma-orm-old-data-displayed-during-navi/76737955#76737955" rel="noopener noreferrer"&gt;
            &lt;span class="title-flare"&gt;answer&lt;/span&gt; re: Next.js 13: Data Fetching Issue with Prisma ORM - Old Data Displayed During Navigation Instead of Updated Data
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="ltag__stackexchange--post-metadata"&gt;
          &lt;span&gt;Jul 21 '23&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;a class="ltag__stackexchange--score-container" href="https://stackoverflow.com/questions/76244697/next-js-13-data-fetching-issue-with-prisma-orm-old-data-displayed-during-navi/76737955#76737955" rel="noopener noreferrer"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackexchange-arrow-up-eff2e2849e67d156181d258e38802c0b57fa011f74164a7f97675ca3b6ab756b.svg" alt=""&gt;
        &lt;div class="ltag__stackexchange--score-number"&gt;
          2
        &lt;/div&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackexchange-arrow-down-4349fac0dd932d284fab7e4dd9846f19a3710558efde0d2dfd05897f3eeb9aba.svg" alt=""&gt;
      &lt;/a&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--body"&gt;
    
&lt;p&gt;You need to export a constant from the &lt;code&gt;page.tsx&lt;/code&gt; to revalidate.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export const revalidate = 1; //revalidates every one second -- requires page reload
&lt;/code&gt;&lt;/pre&gt;

    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--btn--container"&gt;
    &lt;a href="https://stackoverflow.com/questions/76244697/next-js-13-data-fetching-issue-with-prisma-orm-old-data-displayed-during-navi/76737955#76737955" class="ltag__stackexchange--btn" rel="noopener noreferrer"&gt;Open Full Answer&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>How to mock next/router for unit testing with vitest?</title>
      <dc:creator>Mayank Kumar Chaudhari</dc:creator>
      <pubDate>Wed, 26 Jul 2023 04:48:32 +0000</pubDate>
      <link>https://dev.to/mayank1513/how-to-mock-nextrouter-for-unit-testing-with-vitest-48hm</link>
      <guid>https://dev.to/mayank1513/how-to-mock-nextrouter-for-unit-testing-with-vitest-48hm</guid>
      <description>&lt;div class="ltag__stackexchange--container"&gt;
  &lt;div class="ltag__stackexchange--title-container"&gt;
    
      &lt;div class="ltag__stackexchange--title"&gt;
        &lt;div class="ltag__stackexchange--header"&gt;
          &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackoverflow-logo-b42691ae545e4810b105ee957979a853a696085e67e43ee14c5699cf3e890fb4.svg" alt=""&gt;
          &lt;a href="https://stackoverflow.com/questions/75831875/how-to-mock-next-router-for-unit-testing-with-vitest" rel="noopener noreferrer"&gt;
            How to mock next/router for unit testing with vitest?
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="ltag__stackexchange--post-metadata"&gt;
          &lt;span&gt;Mar 24 '23&lt;/span&gt;
            &lt;span&gt;Comments: 1&lt;/span&gt;
            &lt;span&gt;Answers: 1&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;a class="ltag__stackexchange--score-container" href="https://stackoverflow.com/questions/75831875/how-to-mock-next-router-for-unit-testing-with-vitest" rel="noopener noreferrer"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackexchange-arrow-up-eff2e2849e67d156181d258e38802c0b57fa011f74164a7f97675ca3b6ab756b.svg" alt=""&gt;
        &lt;div class="ltag__stackexchange--score-number"&gt;
          1
        &lt;/div&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fstackexchange-arrow-down-4349fac0dd932d284fab7e4dd9846f19a3710558efde0d2dfd05897f3eeb9aba.svg" alt=""&gt;
      &lt;/a&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--body"&gt;
    
&lt;p&gt;When trying to write simple tests for out Next.js app that uses &lt;code&gt;useRouter()&lt;/code&gt; hook, &lt;code&gt;vitest&lt;/code&gt; starts throwing errors.&lt;/p&gt;
&lt;p&gt;Looking for ways to mock next/router for unit testing with vitest.&lt;/p&gt;

    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--btn--container"&gt;
    &lt;a href="https://stackoverflow.com/questions/75831875/how-to-mock-next-router-for-unit-testing-with-vitest" class="ltag__stackexchange--btn" rel="noopener noreferrer"&gt;Open Full Question&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
  </channel>
</rss>
