<?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: K Merchant</title>
    <description>The latest articles on DEV Community by K Merchant (@kayforkind).</description>
    <link>https://dev.to/kayforkind</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%2F4091350%2F781b245d-1897-4111-aaca-a4fc22ac5944.jpg</url>
      <title>DEV Community: K Merchant</title>
      <link>https://dev.to/kayforkind</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kayforkind"/>
    <language>en</language>
    <item>
      <title>How I built a PDF editor with zero backend</title>
      <dc:creator>K Merchant</dc:creator>
      <pubDate>Tue, 29 Sep 2026 15:00:27 +0000</pubDate>
      <link>https://dev.to/kayforkind/how-i-built-a-pdf-editor-with-zero-backend-4p72</link>
      <guid>https://dev.to/kayforkind/how-i-built-a-pdf-editor-with-zero-backend-4p72</guid>
      <description>&lt;p&gt;Every PDF editor you've ever used has a server. You upload your document, it gets processed somewhere you can't see, and a modified file comes back. For tax returns, legal contracts, and medical records, that's a strange thing we've all agreed to.&lt;/p&gt;

&lt;p&gt;I kept wondering: how much of a PDF editor actually needs the server? Turns out, almost none of it. So I built one with zero backend. No API, no database, no auth, no analytics. Just static files. Here's how.&lt;/p&gt;

&lt;h3&gt;
  
  
  The core realization
&lt;/h3&gt;

&lt;p&gt;A PDF is a structured document format, not magic. Rendering it means parsing objects and painting them to a canvas. Editing it means rewriting those objects and re-serializing the file. Every step of that is computation, and browsers are extremely good at computation now. The server was never doing anything the client couldn't do — it was just where developers found it convenient to put the code.&lt;/p&gt;

&lt;p&gt;Going serverless wasn't a cost decision. It was the product. If there is no server, there is nothing to breach, subpoena, or monetize. Privacy becomes a property of the architecture instead of a promise in a privacy policy.&lt;/p&gt;

&lt;h3&gt;
  
  
  The architecture
&lt;/h3&gt;

&lt;p&gt;The app is a static site. &lt;code&gt;index.html&lt;/code&gt;, some JS, some CSS. That's the entire deployment. Here's what happens inside:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rendering.&lt;/strong&gt; Pages render to &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; elements at the device's pixel ratio. There's no text-selection layer — pages are canvas-only with selection disabled to keep touch annotation reliable; the edit tool locates text through its own hit-testing of the content stream instead. Zoom is re-rendering at a higher scale, not image stretching, so text stays sharp.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Editing real text.&lt;/strong&gt; This is the part most "PDF editors" fake. Many tools let you click on text and type, then export a PDF with your new text drawn &lt;em&gt;on top of&lt;/em&gt; the old text — the original bytes are still in the file. Select the text underneath, or extract it programmatically, and the old content is right there.&lt;/p&gt;

&lt;p&gt;PDF Studio rewrites the page's content stream on export. When you edit a paragraph, the old text-showing operators are replaced and the file is re-serialized without the original bytes. Old content is gone, not covered up — for text the document's encoding can represent, which is the overwhelmingly common case. (Edge case, stated plainly: replacements in scripts the original font can't encode fall back to painting over the old text.) This distinction matters enormously for redaction (more on that in a moment) and it's the difference between editing a PDF and annotating a screenshot of one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forms.&lt;/strong&gt; The app parses AcroForm field definitions, renders fillable inputs over the page, and on export can either keep fields live or flatten them into static page content. Flattening matters when you're sending a form to someone who shouldn't be able to change the answers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Redaction, done honestly.&lt;/strong&gt; A lot of redaction tools draw a black rectangle over sensitive text and call it done. The text is still in the file — anyone can select it, copy it, or extract it. Proper redaction means removing the text from the content stream entirely and burning the black box into the rendered page. That's what this does: the export contains no trace of the redacted content. I wrote a separate guide on verifying this (linked at the end), because "trust me" is not a redaction strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OCR on-device.&lt;/strong&gt; Scanned PDFs get OCR through a WebAssembly build of Tesseract running in a Web Worker, so the UI never blocks. The language data downloads once and caches locally. Your scanned document never leaves the machine — which is the entire point, since scanned documents are disproportionately the sensitive kind (signed contracts, IDs, medical forms).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;State and undo.&lt;/strong&gt; All document state lives in memory with a full undo/redo stack, and the app quietly autosaves your session to your own browser's local storage — never a server — so you can pick up where you left off. Export is just the browser downloading a file it built locally, and one click wipes the saved session from the device entirely.&lt;/p&gt;

&lt;h3&gt;
  
  
  The hard parts
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Memory.&lt;/strong&gt; A 200-page PDF with embedded fonts can eat serious RAM when every page holds a canvas. The discipline so far: cap render resolution, cancel stale render tasks the moment you zoom, keep per-page work cheap. Full viewport culling — only rendering pages near the visible area — is still on the roadmap. Mobile forced this discipline — phones have no patience for desktop memory habits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Text editing fidelity.&lt;/strong&gt; Replacing text in a content stream while preserving the surrounding layout means understanding the text-showing operators, the font encodings, and the positioning math. PDFs position glyphs with explicit coordinates, not flow layout. Editing a line of text is closer to surgery than word processing: you remove the old showing operations, compute where the replacement goes in the same coordinate space, and write new operations that the next renderer will interpret identically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mobile.&lt;/strong&gt; The recent overhaul was the biggest single chunk of work. Touch-based annotation, dialogs that fit phone viewports, a top bar that scrolls internally instead of overflowing the page at tablet widths. Sixteen markup tools had to work with fingers, not cursors. The lesson: mobile isn't a smaller desktop, it's a different input paradigm, and every interaction needs rethinking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The service worker trap.&lt;/strong&gt; The app works offline via a service worker, which is great for users and terrible for developers: during testing I repeatedly "verified" fixes against a stale cached bundle. If you ship an offline-capable app, build bundle-hash verification into your QA process or you will chase ghosts.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I'd do differently
&lt;/h3&gt;

&lt;p&gt;I'd have designed the export pipeline around incremental saves earlier. Right now export re-serializes the whole document, which is fine for typical files but wasteful for 500-page reports where you changed one word. That's the next architectural project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Try it / tear it apart
&lt;/h3&gt;

&lt;p&gt;It's free and MIT-licensed: &lt;a href="https://navigatorslab.com/pdf-studio/" rel="noopener noreferrer"&gt;https://navigatorslab.com/pdf-studio/&lt;/a&gt;&lt;br&gt;
Source: &lt;a href="https://github.com/Kayforkind/NavigatorsLab-PDF-Studio" rel="noopener noreferrer"&gt;https://github.com/Kayforkind/NavigatorsLab-PDF-Studio&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No signup, no tracking — there's genuinely nothing to sign up for. If you find a PDF it chokes on, that's the most useful bug report you can file.&lt;/p&gt;

&lt;p&gt;The verification guide: &lt;a href="https://dev.to/kayforkind/how-to-properly-redact-a-pdf-so-the-text-is-actually-gone-5alf"&gt;https://dev.to/kayforkind/how-to-properly-redact-a-pdf-so-the-text-is-actually-gone-5alf&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>privacy</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How to properly redact a PDF so the text is actually gone</title>
      <dc:creator>K Merchant</dc:creator>
      <pubDate>Tue, 29 Sep 2026 14:18:07 +0000</pubDate>
      <link>https://dev.to/kayforkind/how-to-properly-redact-a-pdf-so-the-text-is-actually-gone-5alf</link>
      <guid>https://dev.to/kayforkind/how-to-properly-redact-a-pdf-so-the-text-is-actually-gone-5alf</guid>
      <description>&lt;p&gt;Drawing a black rectangle over sensitive text in a PDF does not redact it. I need you to understand this before anything else, because people get fired, sued, and embarrassed over this exact mistake.&lt;/p&gt;

&lt;p&gt;A PDF is not an image. When you draw a black box over text, you're adding a new object &lt;em&gt;on top of&lt;/em&gt; the text. The text is still there, in the file, in the content stream, fully selectable, copyable, and extractable. Anyone who selects the "redacted" area and pastes it into a text editor gets your secrets. Anyone who runs a text-extraction script gets all of them at once.&lt;/p&gt;

&lt;p&gt;This has happened to governments, law firms, and newspapers. It's not a theoretical risk.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 30-second test
&lt;/h3&gt;

&lt;p&gt;Before trusting any redaction, do this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the "redacted" PDF.&lt;/li&gt;
&lt;li&gt;Try to select the text underneath a black box with your cursor.&lt;/li&gt;
&lt;li&gt;Copy it. Paste it into a text editor.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If anything pastes, the redaction failed. It doesn't matter what the tool promised. The file is the truth.&lt;/p&gt;

&lt;p&gt;For a stronger check, run a text extraction tool over the whole document and search the output for the sensitive terms. If they appear, the content stream still contains them.&lt;/p&gt;

&lt;h3&gt;
  
  
  What proper redaction actually means
&lt;/h3&gt;

&lt;p&gt;Real redaction has two parts, and both are required:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Remove the content from the file.&lt;/strong&gt; The text-showing operations for the sensitive content must be deleted from the page's content stream — not covered, deleted. The bytes should not exist in the exported file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Burn the visual mark into the page.&lt;/strong&gt; The black box should be part of the rendered page content, so the document still reads naturally with visible redaction marks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If a tool only does step 2, it's a highlighter with bad intentions.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to do it properly (step by step)
&lt;/h3&gt;

&lt;p&gt;Using PDF Studio (free, runs in your browser, no signup — and relevantly, your document never uploads anywhere, which matters when the document needs redacting):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://navigatorslab.com/pdf-studio/" rel="noopener noreferrer"&gt;https://navigatorslab.com/pdf-studio/&lt;/a&gt; and load your PDF. Nothing uploads; everything happens on your machine.&lt;/li&gt;
&lt;li&gt;Select the redaction tool and mark every piece of sensitive text. Marked regions show as a hatched pattern with a dashed red outline labeled "marked for redaction" — that's a promise, not the removal. Be thorough — and don't forget metadata-adjacent content: headers, footers, and text baked into scanned images needs OCR-aware handling.&lt;/li&gt;
&lt;li&gt;Export the PDF — that's when the actual destruction happens, not in the editor. The export clears hidden copies (form values, annotations, structure-tree text) under the marked regions, deletes the vector text operations from the content streams (recursively through Form XObjects), pixel-burns anything it can't provably remove (partial text coverage forces a full-page raster replacement), scrubs metadata/XMP/attachments/JavaScript/actions, and refuses the export entirely if any covered text survives — then burns in the black boxes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify.&lt;/strong&gt; This step is not optional. Open the exported file, try the 30-second select-and-copy test on every redacted region. Then run text extraction across the whole document and search for the sensitive terms. They should be absent.&lt;/li&gt;
&lt;li&gt;Check the document metadata too (File → Properties in most readers). Author names and revision history have leaked through "redacted" documents before.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  What about scanned documents?
&lt;/h3&gt;

&lt;p&gt;If your PDF is a scan (an image of a page, not real text), there's no text layer to leak — but there's also no text to redact selectively. The safe approach: redact regions of the image itself, so the pixels are destroyed, not covered. Covering part of an image with a black box in a PDF is the same lie in a different format — the underlying image object still contains the original pixels. Make sure your tool destroys the pixels, then verify by extracting the images from the exported file.&lt;/p&gt;

&lt;h3&gt;
  
  
  The rule
&lt;/h3&gt;

&lt;p&gt;Never trust a redaction you haven't verified. Not from my tool, not from anyone's. The 30-second test takes less time than reading this article. If a tool fails it, stop using that tool for sensitive documents immediately.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;PDF Studio redacts by removing content from the file's content stream on export — then invites you to verify it with the test above. Free, MIT-licensed, no server, no signup: &lt;a href="https://navigatorslab.com/pdf-studio/" rel="noopener noreferrer"&gt;https://navigatorslab.com/pdf-studio/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>privacy</category>
      <category>pdf</category>
    </item>
    <item>
      <title>reimagine-it v2.4.3 — one command, every page's CSS restored</title>
      <dc:creator>K Merchant</dc:creator>
      <pubDate>Thu, 27 Aug 2026 00:12:00 +0000</pubDate>
      <link>https://dev.to/kayforkind/reimagine-it-v242-one-command-15-design-tokens-80-source-fidelity-floor-f51</link>
      <guid>https://dev.to/kayforkind/reimagine-it-v242-one-command-15-design-tokens-80-source-fidelity-floor-f51</guid>
      <description>&lt;h2&gt;
  
  
  🛠️ v2.4.3 — every generated page just got its CSS back
&lt;/h2&gt;

&lt;p&gt;This release fixes the deepest bug the engine has ever shipped: &lt;strong&gt;every token was embedding a literal &lt;code&gt;undefined&lt;/code&gt; where its shared CSS should be&lt;/strong&gt;. The token dispatcher ran before the engine built its CSS systems, so pages silently lost their mesh aurora fields, giant data-wash numbers, glyph tiles, donut charts, stats bands, bento grids, and band marquees/footers — while still passing the craft audit (the audit inspects body markup, not CSS). One command, one-line fix, and every output grows its full art system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No more &lt;code&gt;undefined&lt;/code&gt; in any of the 15 tokens&lt;/strong&gt; — outputs grew by the complete band/art CSS (a webpage render went 15 KB → 24 KB).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Background numbers no longer glue together&lt;/strong&gt; — &lt;code&gt;336,000&lt;/code&gt; + &lt;code&gt;40,000&lt;/code&gt; used to render as one clipped &lt;code&gt;336,00040,00&lt;/code&gt;; they now spread, cap at 32vw, and ellipsize on phones.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The webpage token's isometric stamp floats again&lt;/strong&gt; — it was the only token missing the shared art CSS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Palette gate fixed&lt;/strong&gt; — source brand hexes like &lt;code&gt;#FF3366&lt;/code&gt; no longer count as two colors when the engine lowercases them into CSS vars; a 1500-cell sweep (100 sources × 15 tokens) passes 100% with 0 errors, fidelity avg 99.6%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regression-locked&lt;/strong&gt; — a new unit test fails if any token output ever embeds a literal &lt;code&gt;undefined&lt;/code&gt; or drops its shared CSS systems again (59/59 tests green).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All seven end-user examples, the gallery, and the live playground were regenerated through the fixed engine — the visuals on &lt;a href="https://kayforkind.github.io/reimagine-it" rel="noopener noreferrer"&gt;kayforkind.github.io/reimagine-it&lt;/a&gt; are what the engine actually produces now.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;reimagine-it&lt;/strong&gt; is a one-command agent skill that redesigns an existing HTML file into a beautiful, working artifact — using only the nouns, dates, colors, links, and numbers already in that file. No mood boards, no gold layouts with swapped labels. The output is a real page you can open.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx reimagine-it@2.4.3 &lt;span class="nt"&gt;-i&lt;/span&gt; mypage.html &lt;span class="nt"&gt;-o&lt;/span&gt; redesigned.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What's new in v2.4.2
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Source fidelity floor raised to 80% across every token
&lt;/h3&gt;

&lt;p&gt;Before v2.4.2, 61 of 105 token×source cells fell below 80% fidelity — the engine preferred headings over real source anchors, so phrases like "Venator Become" or "Arcade Tee" never rendered. Now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Anchors = headings + source anchors&lt;/strong&gt;, deduplicated — every clickable phrase survives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;All 105 token×source cells ≥80%&lt;/strong&gt; (worst token: 80%).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;All seven shipped examples report 100% fidelity&lt;/strong&gt; in their auto.json reports.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Links and emails surface on every token
&lt;/h3&gt;

&lt;p&gt;A shared &lt;strong&gt;Source-index footer&lt;/strong&gt; renders all &lt;code&gt;content.links&lt;/code&gt; and emails on every generated page — not just the webpage/landing tokens.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. All 15 design tokens in the browser extension
&lt;/h3&gt;

&lt;p&gt;The popup now exposes all 15 tokens: &lt;code&gt;webpage, landing, dashboard, infographic, cinematic, artistic, photography, svg, 3js, simulation, glass, editorial, motion, gradient, showcase&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Docs can't drift anymore
&lt;/h3&gt;

&lt;p&gt;A new &lt;code&gt;docs-drift&lt;/code&gt; CI job regenerates the case tables and fails the build if they diverge from ground truth.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 15 design tokens
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Token&lt;/th&gt;
&lt;th&gt;What it builds&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;webpage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Clean content-first page&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;landing&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Conversion-focused landing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dashboard&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;KPI dashboard from facts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;infographic&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Paper-poster argument&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cinematic&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Film-poster energy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;artistic&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Expressive art direction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;photography&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Photo-led layout&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;svg&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Living SVG mark&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;3js&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;WebGL orbit scene&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;simulation&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Interactive timeline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;glass&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Glassmorphism UI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;editorial&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Magazine layout&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;motion&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Animated micro-interactions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gradient&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bold gradient arena&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;showcase&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Product showcase&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Measured, not vibes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;57/57 unit tests&lt;/strong&gt; pass&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;15-token benchmark&lt;/strong&gt;: all tokens hold the 100/100 usability bar&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;100-source stress test&lt;/strong&gt;: 0 errors, fidelity avg 99.7, min 80&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;7 end-user examples&lt;/strong&gt; at 100% fidelity&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it — no install
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live gallery (no install):&lt;/strong&gt; &lt;a href="https://kayforkind.github.io/reimagine-it/" rel="noopener noreferrer"&gt;https://kayforkind.github.io/reimagine-it/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/Kayforkind/reimagine-it" rel="noopener noreferrer"&gt;https://github.com/Kayforkind/reimagine-it&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;npm:&lt;/strong&gt; &lt;code&gt;npx reimagine-it@2.4.3&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Give it one HTML file. It gives you back something worth opening.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>design</category>
      <category>html</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
