<?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: bruce huang</title>
    <description>The latest articles on DEV Community by bruce huang (@bruce_huang_576f71890f95e).</description>
    <link>https://dev.to/bruce_huang_576f71890f95e</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%2F3927315%2F698cd979-50c1-43c6-9140-839ca90496bc.png</url>
      <title>DEV Community: bruce huang</title>
      <link>https://dev.to/bruce_huang_576f71890f95e</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bruce_huang_576f71890f95e"/>
    <language>en</language>
    <item>
      <title>Building a Browser-Side Document Comparison Tool: Privacy-First .docx Diffing with JavaScript</title>
      <dc:creator>bruce huang</dc:creator>
      <pubDate>Tue, 12 May 2026 13:50:24 +0000</pubDate>
      <link>https://dev.to/bruce_huang_576f71890f95e/building-a-browser-side-document-comparison-tool-privacy-first-docx-diffing-with-javascript-253e</link>
      <guid>https://dev.to/bruce_huang_576f71890f95e/building-a-browser-side-document-comparison-tool-privacy-first-docx-diffing-with-javascript-253e</guid>
      <description>&lt;p&gt;1、The Problem — Why lawyers overpay for document comparison&lt;br&gt;
2、Architecture — JSZip + LCS paragraph alignment + word-level diff&lt;br&gt;
3、Implementation Details&lt;br&gt;
  Extracting text from .docx (ZIP → XML → structured paragraphs)&lt;br&gt;
  Fuzzy paragraph alignment (why LCS isn't enough)&lt;br&gt;
  Word-level diff rendering (redline format)&lt;br&gt;
4、Performance — 140ms for 20 pages, all client-side&lt;br&gt;
5、Limitations &amp;amp; Next Steps — Formatting changes, tables, PDF&lt;br&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%2Fo9423bvxecpfpp7ncdei.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%2Fo9423bvxecpfpp7ncdei.png" alt=" " width="800" height="350"&gt;&lt;/a&gt;&lt;br&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%2F5662asbh12kahh0i048k.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%2F5662asbh12kahh0i048k.png" alt=" " width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>javascript</category>
      <category>privacy</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
