<?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: uni928</title>
    <description>The latest articles on DEV Community by uni928 (@uni928).</description>
    <link>https://dev.to/uni928</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%2F1769007%2F31d8b973-bff2-4bd9-b0ec-57b51de523cb.png</url>
      <title>DEV Community: uni928</title>
      <link>https://dev.to/uni928</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/uni928"/>
    <language>en</language>
    <item>
      <title>Connecting Screen Transitions with Image Preservation and a Circular Mask</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Mon, 31 Aug 2026 05:25:07 +0000</pubDate>
      <link>https://dev.to/uni928/connecting-screen-transitions-with-image-preservation-and-a-circular-mask-41hc</link>
      <guid>https://dev.to/uni928/connecting-screen-transitions-with-image-preservation-and-a-circular-mask-41hc</guid>
      <description>&lt;p&gt;A simple fade transition can sometimes make the connection between the previous screen and the next screen feel weak.&lt;/p&gt;

&lt;p&gt;One way to create a more seamless transition is to temporarily preserve the previous screen as an image, place it over the next screen, and gradually reveal the new screen with a circular mask.&lt;/p&gt;

&lt;p&gt;👇 Sample site&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs/index95English.html" rel="noopener noreferrer"&gt;https://uni928.github.io/Uni928PublicHTMLs/index95English.html&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Basic Flow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Save the current screen as an image.&lt;/li&gt;
&lt;li&gt;Generate and load the next screen.&lt;/li&gt;
&lt;li&gt;Place the saved image over the entire screen.&lt;/li&gt;
&lt;li&gt;Reveal the next screen in a circular shape centered around the character or another desired position.&lt;/li&gt;
&lt;li&gt;Delete the saved image once the circle has expanded across the entire screen.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Important Implementation Notes
&lt;/h2&gt;

&lt;p&gt;The captured image should be created according to the screen size and must always be discarded after the transition is complete.&lt;/p&gt;

&lt;p&gt;If loading the next screen takes time, this transition can also be used when navigating to a loading screen and again when leaving the loading screen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;By preserving the previous screen as an image, displaying the next screen underneath it, and gradually revealing the new screen with a circular mask, you can create an engaging transition without passing through a black screen.&lt;/p&gt;

&lt;p&gt;Once this type of screen transition has been made reusable, it can be applied not only to mazes and games, but also to web pages, settings screens, detail screens, modal windows, and many other interfaces.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>effect</category>
      <category>javascript</category>
      <category>webanimation</category>
    </item>
    <item>
      <title>Share Formatted AI Documents on Discord—One-Click Viewing, No File Uploads</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Mon, 31 Aug 2026 01:15:46 +0000</pubDate>
      <link>https://dev.to/uni928/how-to-easily-share-ai-generated-documents-on-discord-2163</link>
      <guid>https://dev.to/uni928/how-to-easily-share-ai-generated-documents-on-discord-2163</guid>
      <description>&lt;p&gt;This article introduces a simple way to share AI-generated documents on Discord:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The recipient can open a formatted document with one click&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The sender does not need to upload any files&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The basic idea is simple.&lt;/p&gt;

&lt;p&gt;The tool generates a Discord-ready link like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;View Document&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;URL containing compressed and Base64-encoded Markdown&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Discord, the recipient only sees a clean link such as:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs/index80Sample2English.html" rel="noopener noreferrer"&gt;View Document&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;They can click the link and immediately view the document as a formatted webpage, with Markdown headings, bold text, lists, and other formatting applied.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try the Example First
&lt;/h2&gt;

&lt;p&gt;I created a sample page that explains how the tool works using the same sharing method.&lt;/p&gt;

&lt;p&gt;👇 View the example here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs/index80Sample2English.html" rel="noopener noreferrer"&gt;https://uni928.github.io/Uni928PublicHTMLs/index80Sample2English.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After reading the instructions, you can use the actual tool here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs/index80English.html" rel="noopener noreferrer"&gt;Create a Shareable Markdown Page&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;First, ask ChatGPT or another AI tool to create a document in Markdown format.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Please create a short Markdown document explaining XX for sharing on Discord.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then paste the generated Markdown into:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs/index80English.html" rel="noopener noreferrer"&gt;Create a Shareable Markdown Page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the "Save as URL" section, you can generate a Discord-ready link in this format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;View Document&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;URL containing compressed and Base64-encoded Markdown&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then simply paste that text into Discord.&lt;/p&gt;

&lt;p&gt;Instead of seeing the full long URL, the recipient sees a clean link like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs/index80Sample2English.html" rel="noopener noreferrer"&gt;View Document&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Discord Lets You Hide Long URLs Behind Link Text
&lt;/h2&gt;

&lt;p&gt;Discord supports Markdown-style links such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;View Document&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;URL&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;View Document&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;https://uni928.github.io/Uni928PublicHTMLs/index80Sample2English.html&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When posted in Discord, the recipient only needs to click the displayed text.&lt;/p&gt;

&lt;p&gt;This means even if the actual URL is very long, the message itself can stay clean and readable.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Markdown Is Stored Inside the URL
&lt;/h2&gt;

&lt;p&gt;This tool compresses the Markdown text, converts it to Base64, and stores the result directly inside the URL.&lt;/p&gt;

&lt;p&gt;The sharing process is therefore:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ask ChatGPT or another AI to create a Markdown document&lt;/li&gt;
&lt;li&gt;Paste the Markdown into the tool&lt;/li&gt;
&lt;li&gt;Generate a shareable URL&lt;/li&gt;
&lt;li&gt;Paste the generated link into Discord&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This means you do not need to separately create and upload a Markdown, HTML, or PDF file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The document itself can be shared through the URL.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Fewer Steps for Simple Document Sharing
&lt;/h2&gt;

&lt;p&gt;When using ChatGPT or other generative AI tools, it is easy to create things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Short guides&lt;/li&gt;
&lt;li&gt;Instructions&lt;/li&gt;
&lt;li&gt;Simple reports&lt;/li&gt;
&lt;li&gt;Explanatory documents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, sharing them on Discord can sometimes require extra steps such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Saving the text as a Markdown file&lt;/li&gt;
&lt;li&gt;Converting it to HTML or PDF&lt;/li&gt;
&lt;li&gt;Uploading the file to Discord&lt;/li&gt;
&lt;li&gt;Moving the content into Google Docs or another service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With this method, you can instead share something as simple as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;More details here:

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;View Document&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;URL&lt;/span&gt;&lt;span class="nt"&gt;&amp;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 keeps the Discord message short while letting the recipient view the full formatted document separately.&lt;/p&gt;




&lt;h2&gt;
  
  
  Good Use Cases
&lt;/h2&gt;

&lt;p&gt;I find this method particularly useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Short AI-generated guides&lt;/li&gt;
&lt;li&gt;Work instructions&lt;/li&gt;
&lt;li&gt;Rules for games or communities&lt;/li&gt;
&lt;li&gt;Development notes&lt;/li&gt;
&lt;li&gt;Long Discord messages that are easier to read as a separate page&lt;/li&gt;
&lt;li&gt;Temporary notes&lt;/li&gt;
&lt;li&gt;Summaries of ChatGPT discussions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is especially useful when the document is mostly text.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Use the Tool
&lt;/h2&gt;

&lt;p&gt;The actual tool is available here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs/index80English.html" rel="noopener noreferrer"&gt;Create a Shareable Markdown Page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The basic steps are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enter a &lt;strong&gt;document title&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Paste your &lt;strong&gt;Markdown content&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save as URL&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click the option to copy the &lt;strong&gt;Discord "View Document" link&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Paste the copied text into Discord&lt;/li&gt;
&lt;li&gt;The recipient clicks &lt;strong&gt;View Document&lt;/strong&gt; to open the formatted page&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;The document data is stored inside the URL itself, so you do not need to send a separate file.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;p&gt;This method stores the Markdown content directly inside the URL.&lt;/p&gt;

&lt;p&gt;Because browsers, Discord, and other services have practical URL-length limits, the current version limits the &lt;strong&gt;compressed and Base64-encoded data to under 1,920 characters&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Images are also not well suited to this method.&lt;/p&gt;

&lt;p&gt;Embedding image data directly in the URL can make the URL extremely large, so &lt;strong&gt;this method is primarily intended for text-based documents rather than image-heavy content&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In other words, this is not intended to replace full document hosting or cloud storage services.&lt;/p&gt;

&lt;p&gt;It is designed for a simpler use case:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Quickly sharing AI-generated, text-focused documents on Discord&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For short and medium-sized text documents, it can be a convenient approach.&lt;/p&gt;

&lt;p&gt;Also, because the content is embedded in the URL, editing the document usually means generating a new URL.&lt;/p&gt;

&lt;p&gt;So this method is not ideal when you need to keep updating the same shared URL over time.&lt;/p&gt;




&lt;h2&gt;
  
  
  For Users Who Want to Review the Code
&lt;/h2&gt;

&lt;p&gt;The source code is available on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/uni928/Uni928PublicHTMLs/blob/main/index80English.html" rel="noopener noreferrer"&gt;https://github.com/uni928/Uni928PublicHTMLs/blob/main/index80English.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The sample page in this article uses &lt;code&gt;index80Sample2English.html&lt;/code&gt;, while the actual English version of the tool is &lt;code&gt;index80English.html&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The source is published so users who care about security can review the code and network behavior themselves.&lt;/p&gt;

&lt;p&gt;As an additional check, you can download the HTML and ask ChatGPT or another AI tool something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Please review this HTML file and check whether it contains any suspicious external data transmission or malicious code.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, AI review should only be treated as an additional check.&lt;/p&gt;

&lt;p&gt;For important use cases, you should also review the code and network destinations yourself.&lt;/p&gt;




&lt;h2&gt;
  
  
  If You Want More Control
&lt;/h2&gt;

&lt;p&gt;If you want to reduce reliance on the original hosted version, you can also:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download the HTML from GitHub&lt;/li&gt;
&lt;li&gt;Review the code yourself&lt;/li&gt;
&lt;li&gt;Optionally ask an AI tool to review it as well&lt;/li&gt;
&lt;li&gt;Host it on your own GitHub Pages site or another static hosting service&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This way, you do not need to worry about the original hosted version changing later.&lt;/p&gt;




&lt;h2&gt;
  
  
  You Can Also Customize It for Your Own Use
&lt;/h2&gt;

&lt;p&gt;Because the HTML is public, you can modify it with ChatGPT or another coding assistant.&lt;/p&gt;

&lt;p&gt;For example, you could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change the design&lt;/li&gt;
&lt;li&gt;Remove unnecessary buttons&lt;/li&gt;
&lt;li&gt;Change the input workflow&lt;/li&gt;
&lt;li&gt;Add Discord-specific features&lt;/li&gt;
&lt;li&gt;Add your own document templates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Customizing the tool for your own workflow may make it even more useful.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you create and publish an improved version, I would be happy to hear about it and try it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you publish a modified version based on this repository, please follow the MIT License terms.&lt;/p&gt;

&lt;p&gt;You must include the required copyright notice and MIT License text.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;With this method, the sender's workflow is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Create Markdown with AI → Paste it into the tool → Paste the generated link into Discord&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The recipient's workflow is even simpler:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Click "View Document"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This approach works particularly well when you want to &lt;strong&gt;share simple, AI-generated, text-based documents on Discord without uploading files&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;👇 View the sample instructions:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs/index80Sample2English.html" rel="noopener noreferrer"&gt;https://uni928.github.io/Uni928PublicHTMLs/index80Sample2English.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>gemini</category>
      <category>claude</category>
    </item>
    <item>
      <title>A Small Solution to the Problem of HTML Files Created with ChatGPT Growing Larger with Every Revision</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Wed, 26 Aug 2026 05:23:25 +0000</pubDate>
      <link>https://dev.to/uni928/a-small-solution-to-the-problem-of-html-files-created-with-chatgpt-growing-larger-with-every-56m8</link>
      <guid>https://dev.to/uni928/a-small-solution-to-the-problem-of-html-files-created-with-chatgpt-growing-larger-with-every-56m8</guid>
      <description>&lt;p&gt;When you ask ChatGPT to create an HTML site, the code can gradually grow larger as you continue making revisions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Existing HTML minification tools are excellent for reducing file size. However, relatively few are designed with ChatGPT-based analysis and re-editing in mind, which makes them less suitable for this kind of workflow.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is why I created a tool that can minify HTML while keeping it as easy as possible for ChatGPT to analyze.&lt;/p&gt;

&lt;p&gt;In this article, I will refer to “minification” as “cleanup” for convenience.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Cleanup is intended to slightly reduce file size and token usage when repeatedly making revisions.&lt;/p&gt;

&lt;p&gt;Compression is intended to reduce file size when sharing HTML in a chat, assuming the recipient only needs to open the file and does not need to edit it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;※Because the cleanup process is performed mechanically, there is no guarantee that it will never introduce bugs. Always check that the HTML works correctly after cleanup.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;👇 Try the site here&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs2/index2English.html" rel="noopener noreferrer"&gt;https://uni928.github.io/Uni928PublicHTMLs2/index2English.html&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;p&gt;This tool has three modes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Safe&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Compresses the file without modifying the contents of the HTML, CSS, or JavaScript.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Experimental&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cleans up consecutive whitespace, comments, and similar elements before compressing the file. This mode is suitable when sharing HTML in a chat and you believe the recipient is unlikely to read the source code directly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Clean Only&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Only cleans up consecutive whitespace, comments, and similar elements, then saves the result as a regular HTML file without self-extracting compression. This mode is recommended when publishing the file on a web server.&lt;/p&gt;

&lt;p&gt;There are many third-party tools that can achieve more aggressive cleanup. However, this tool prioritizes &lt;strong&gt;keeping the HTML as easy as possible for ChatGPT to analyze while minimizing its impact on reasoning&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  It Can Also Be Used in Conversations with ChatGPT
&lt;/h2&gt;

&lt;p&gt;When you repeatedly ask ChatGPT to revise an HTML file, its size tends to grow because of comments, whitespace, and newly added code.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;With this tool, the parts that are cleaned up can often achieve a &lt;strong&gt;perceptible file-size reduction of around 15%&lt;/strong&gt;, depending on the HTML.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Code generated by ChatGPT is often relatively readable and well structured to begin with.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you only reduce unnecessary whitespace and comments, most of the actual code remains unchanged. Therefore, I believe the impact on reasoning is also relatively small.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For these reasons, when passing the HTML to ChatGPT again, this tool is expected to provide the following benefit:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Slightly reduce input/output token usage while keeping the impact on reasoning relatively small.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The reduction in output applies when asking ChatGPT to generate the entire revised HTML file.&lt;/p&gt;

&lt;p&gt;This does not necessarily apply when asking it to generate only part of the file.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I have added the following prompt to my ChatGPT custom instructions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Don't reformat minified HTML.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Choose a Mode Based on Your Use Case
&lt;/h2&gt;

&lt;p&gt;If you are only sharing an HTML file in a chat and the recipient probably does not need to read its contents directly, you can use &lt;strong&gt;Experimental&lt;/strong&gt; mode to reduce the file size further.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;On the other hand, when distributing a file through a web server, compression such as gzip or Brotli is often performed automatically. For that reason, self-extracting compression is generally not recommended.&lt;/p&gt;

&lt;p&gt;In such cases, I recommend using &lt;strong&gt;Clean Only&lt;/strong&gt; to reduce the size of the HTML itself before publishing it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You only need to drag and drop the file, so if you frequently create and revise HTML with ChatGPT, please give it a try.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;👇 Try the site here&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs2/index2English.html" rel="noopener noreferrer"&gt;https://uni928.github.io/Uni928PublicHTMLs2/index2English.html&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  For Those Who Want to See the Code
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;👇 GitHub&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://github.com/uni928/Uni928PublicHTMLs2/blob/main/index2English.html" rel="noopener noreferrer"&gt;https://github.com/uni928/Uni928PublicHTMLs2/blob/main/index2English.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The GitHub URL is provided for anyone who wants to visually inspect the source code and check for potentially malicious code.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Although it is not possible to perform a completely exhaustive review, another useful approach is to download the file, attach the code to ChatGPT, ask it to check for potentially malicious code, and then use it locally.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I also recommend using ChatGPT or similar tools to tune the site so that it works better for your own needs.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you create a more convenient site, I would be happy to use it as well, so I would appreciate it if you made it publicly available.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you publish a modified version of this repository rather than rebuilding it completely from scratch, please follow the terms of the MIT License when distributing it. This includes retaining the copyright notice and the MIT License text.&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>ai</category>
      <category>javascript</category>
      <category>html</category>
    </item>
    <item>
      <title>Make Basic HTML Analysis More Difficult</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Fri, 21 Aug 2026 01:14:10 +0000</pubDate>
      <link>https://dev.to/uni928/make-basic-html-analysis-more-difficult-372e</link>
      <guid>https://dev.to/uni928/make-basic-html-analysis-more-difficult-372e</guid>
      <description>&lt;p&gt;This plugin makes saving the page with “Save As” and analyzing it through Developer Tools more difficult.&lt;/p&gt;

&lt;p&gt;The page is displayed using a Blob URL, so “View Source” is also unavailable. This reduces the number of simple ways to inspect the source. However, some APIs may not work because the page uses a Blob URL.&lt;/p&gt;

&lt;p&gt;Add the following script:&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;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://uni928.github.io/Uni928PublicHTMLs/Plugin/plugin8.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sample:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs/index88_sample2.html" rel="noopener noreferrer"&gt;https://uni928.github.io/Uni928PublicHTMLs/index88_sample2.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is not a complete security measure, but it can make casual analysis more difficult.&lt;/p&gt;

&lt;p&gt;👇Github&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/uni928/Uni928PublicHTMLs/blob/main/index88_sample2.html" rel="noopener noreferrer"&gt;https://github.com/uni928/Uni928PublicHTMLs/blob/main/index88_sample2.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/uni928/Uni928PublicHTMLs/blob/main/Plugin/plugin8.js" rel="noopener noreferrer"&gt;https://github.com/uni928/Uni928PublicHTMLs/blob/main/Plugin/plugin8.js&lt;/a&gt;&lt;/p&gt;

</description>
      <category>html</category>
      <category>javascript</category>
      <category>analytics</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Back Up Your ChatGPT Conversations as Easy-to-Read HTML</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Wed, 19 Aug 2026 05:54:52 +0000</pubDate>
      <link>https://dev.to/uni928/back-up-your-chatgpt-conversations-as-easy-to-read-html-82b</link>
      <guid>https://dev.to/uni928/back-up-your-chatgpt-conversations-as-easy-to-read-html-82b</guid>
      <description>&lt;p&gt;I created a tool that lets you load a saved ChatGPT HTML file and &lt;strong&gt;convert the conversation into a cleaner, easier-to-read HTML page&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: This tool does &lt;strong&gt;not&lt;/strong&gt; create an HTML file that can be imported back into ChatGPT. It only generates an HTML file for easier viewing.&lt;/p&gt;

&lt;p&gt;Note: The tool is designed for the current HTML format saved by ChatGPT. It may stop working if ChatGPT changes the structure of its saved HTML pages.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Try the Tool
&lt;/h2&gt;

&lt;p&gt;You can use it directly in your browser:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs2/index6English.html" rel="noopener noreferrer"&gt;https://uni928.github.io/Uni928PublicHTMLs2/index6English.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No installation is required.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Use It
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the conversation you want to save in the browser version of ChatGPT.&lt;/li&gt;
&lt;li&gt;Right-click the page and select &lt;strong&gt;“Save As…”&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Drag and drop the saved HTML file into the tool.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;“Download HTML”&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s it.&lt;/p&gt;

&lt;p&gt;The tool will generate a new HTML file with the conversation organized into a much more readable format.&lt;/p&gt;

&lt;h2&gt;
  
  
  Main Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Organizes messages from you and ChatGPT into a conversation-style layout&lt;/li&gt;
&lt;li&gt;Can generate the page with &lt;strong&gt;ChatGPT responses collapsed by default&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;ChatGPT responses can be expanded and collapsed by clicking them&lt;/li&gt;
&lt;li&gt;Reformats tables to make them easier to read&lt;/li&gt;
&lt;li&gt;Displays code blocks, headings, lists, and other content in a cleaner format&lt;/li&gt;
&lt;li&gt;The generated page is also a single HTML file, making it easy to save or share&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is especially useful for long conversations.&lt;/p&gt;

&lt;p&gt;By keeping ChatGPT responses collapsed by default, you can quickly look through your previous questions and find the part of the conversation you want to review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Notes
&lt;/h2&gt;

&lt;p&gt;I made this tool for situations where you want to &lt;strong&gt;look back at a previous ChatGPT conversation later, almost like reading reference material or notes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Feel free to give it a try:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs2/index6English.html" rel="noopener noreferrer"&gt;https://uni928.github.io/Uni928PublicHTMLs2/index6English.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>ai</category>
      <category>webdev</category>
      <category>local</category>
    </item>
    <item>
      <title>Turn Markdown into a Readable, Re-Editable HTML File</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Fri, 24 Jul 2026 03:55:54 +0000</pubDate>
      <link>https://dev.to/uni928/turn-markdown-into-a-readable-re-editable-html-file-3g64</link>
      <guid>https://dev.to/uni928/turn-markdown-into-a-readable-re-editable-html-file-3g64</guid>
      <description>&lt;p&gt;I built a simple browser-based tool that converts Markdown into a clean, readable HTML file.&lt;/p&gt;

&lt;p&gt;You can use it immediately by visiting the following page:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs/index80English.html" rel="noopener noreferrer"&gt;https://uni928.github.io/Uni928PublicHTMLs/index80English.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No installation, account registration, or development environment is required.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Tool Does
&lt;/h2&gt;

&lt;p&gt;Write or paste Markdown into the editor, add an optional page title, and save the result as a standalone HTML file.&lt;/p&gt;

&lt;p&gt;For example, you can enter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Completed&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Fixed the login screen
&lt;span class="p"&gt;-&lt;/span&gt; Corrected a layout issue

&lt;span class="gu"&gt;## Under Review&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Mobile browser behavior
&lt;span class="p"&gt;-&lt;/span&gt; Final accessibility checks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The tool converts this content into a visually organized page that can be opened directly in a web browser.&lt;/p&gt;

&lt;p&gt;The downloaded file contains everything required to display the document, so you do not need a separate Markdown viewer.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Saved HTML Can Be Edited Again
&lt;/h2&gt;

&lt;p&gt;One useful difference from a typical Markdown-to-HTML converter is that the generated file is not limited to viewing.&lt;/p&gt;

&lt;p&gt;When you open the saved HTML file, you can return to the editing screen, update the title or Markdown content, and save a new version.&lt;/p&gt;

&lt;p&gt;This makes the file useful as a small self-contained document rather than a one-time export.&lt;/p&gt;

&lt;p&gt;A simple workflow might look like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a report in Markdown.&lt;/li&gt;
&lt;li&gt;Save it as an HTML file.&lt;/li&gt;
&lt;li&gt;Place it in a shared folder.&lt;/li&gt;
&lt;li&gt;Open the same file later.&lt;/li&gt;
&lt;li&gt;Edit the original Markdown.&lt;/li&gt;
&lt;li&gt;Save the updated version.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You do not need to keep a separate Markdown source file unless you want to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Useful for Shared Folders
&lt;/h2&gt;

&lt;p&gt;The generated HTML file can be placed in a shared team folder, cloud storage folder, USB drive, or local project directory.&lt;/p&gt;

&lt;p&gt;Other people can read it simply by opening the file in a browser.&lt;/p&gt;

&lt;p&gt;This can be useful because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no document-viewing application is required&lt;/li&gt;
&lt;li&gt;the result is easier to read than a plain text file&lt;/li&gt;
&lt;li&gt;the content can still be updated using Markdown&lt;/li&gt;
&lt;li&gt;only one HTML file needs to be shared&lt;/li&gt;
&lt;li&gt;links, headings, lists, tables, quotes, and code blocks can be displayed clearly&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Possible Use Cases
&lt;/h2&gt;

&lt;p&gt;The tool is suitable for lightweight documents such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;work reports&lt;/li&gt;
&lt;li&gt;project status pages&lt;/li&gt;
&lt;li&gt;meeting notes&lt;/li&gt;
&lt;li&gt;checklists&lt;/li&gt;
&lt;li&gt;setup instructions&lt;/li&gt;
&lt;li&gt;internal manuals&lt;/li&gt;
&lt;li&gt;reference link collections&lt;/li&gt;
&lt;li&gt;handover documents&lt;/li&gt;
&lt;li&gt;personal notes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is especially useful when a full document management system would be excessive, but a plain text file would be difficult to read.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Use It
&lt;/h2&gt;

&lt;p&gt;Open the tool:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs/index80English.html" rel="noopener noreferrer"&gt;https://uni928.github.io/Uni928PublicHTMLs/index80English.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enter a page title.&lt;/li&gt;
&lt;li&gt;Write or paste your Markdown.&lt;/li&gt;
&lt;li&gt;Preview the formatted page in the browser.&lt;/li&gt;
&lt;li&gt;Save it as a readable HTML file.&lt;/li&gt;
&lt;li&gt;Reopen the saved file whenever you need to view or edit it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The generated file can start either in viewing mode or editing mode, depending on the save option you choose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Supported Markdown Elements
&lt;/h2&gt;

&lt;p&gt;The tool supports commonly used Markdown formatting, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;headings&lt;/li&gt;
&lt;li&gt;bold and italic text&lt;/li&gt;
&lt;li&gt;ordered and unordered lists&lt;/li&gt;
&lt;li&gt;task lists&lt;/li&gt;
&lt;li&gt;blockquotes&lt;/li&gt;
&lt;li&gt;links&lt;/li&gt;
&lt;li&gt;images&lt;/li&gt;
&lt;li&gt;horizontal rules&lt;/li&gt;
&lt;li&gt;code blocks&lt;/li&gt;
&lt;li&gt;inline code&lt;/li&gt;
&lt;li&gt;tables&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to replace a full Markdown publishing system, but to make everyday Markdown documents easy to read and share.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;This tool provides a simple middle ground between a plain Markdown file and a full document platform.&lt;/p&gt;

&lt;p&gt;You can write in Markdown, export the content as a readable standalone HTML page, share it as a single file, and edit the same file again later.&lt;/p&gt;

&lt;p&gt;Try it here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs/index80English.html" rel="noopener noreferrer"&gt;https://uni928.github.io/Uni928PublicHTMLs/index80English.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>html</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>A Button Showcase with One-Click HTML Copy</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Fri, 24 Jul 2026 03:40:59 +0000</pubDate>
      <link>https://dev.to/uni928/a-button-showcase-with-one-click-html-copy-5gi7</link>
      <guid>https://dev.to/uni928/a-button-showcase-with-one-click-html-copy-5gi7</guid>
      <description>&lt;p&gt;When building a website, choosing a button design can take more time than expected.&lt;/p&gt;

&lt;p&gt;You may want something simple, soft, colorful, dark, outlined, or slightly unusual—but comparing many styles usually means repeatedly editing CSS and refreshing the page.&lt;/p&gt;

&lt;p&gt;To make that process easier, I created a browser-based button showcase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Online
&lt;/h2&gt;

&lt;p&gt;You can use it directly from the following page:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs/index78.html" rel="noopener noreferrer"&gt;https://uni928.github.io/Uni928PublicHTMLs/index78.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is nothing to install. Open the page, browse the available designs, and choose a button you like.&lt;/p&gt;

&lt;h2&gt;
  
  
  Many Button Styles in One Place
&lt;/h2&gt;

&lt;p&gt;The page includes a wide range of button designs, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Light and subtle buttons&lt;/li&gt;
&lt;li&gt;Solid-color buttons&lt;/li&gt;
&lt;li&gt;Dark buttons&lt;/li&gt;
&lt;li&gt;Gradient buttons&lt;/li&gt;
&lt;li&gt;Outline buttons&lt;/li&gt;
&lt;li&gt;Rounded and pill-shaped buttons&lt;/li&gt;
&lt;li&gt;Buttons with icons&lt;/li&gt;
&lt;li&gt;More experimental designs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The buttons are displayed as actual interactive elements, so you can compare their hover, focus, and pressed states directly in the browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Click a Button to Copy It
&lt;/h2&gt;

&lt;p&gt;The main feature of this tool is its copy workflow.&lt;/p&gt;

&lt;p&gt;Clicking a button copies a minimal HTML example for that design. This makes it easier to take only the button you need instead of copying the entire showcase page.&lt;/p&gt;

&lt;p&gt;The generated example includes the necessary HTML and CSS, so it can be pasted into a new file and tested immediately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Copy Features for Faster Comparison
&lt;/h2&gt;

&lt;p&gt;The site also includes additional copy-related features to make browsing a large number of designs more convenient.&lt;/p&gt;

&lt;p&gt;You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy a button directly by clicking it&lt;/li&gt;
&lt;li&gt;Review the generated code&lt;/li&gt;
&lt;li&gt;Copy frequently used button types from the quick-copy panel&lt;/li&gt;
&lt;li&gt;Receive visual feedback after a successful copy&lt;/li&gt;
&lt;li&gt;Use copied examples as standalone HTML files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is especially useful when you want to compare several designs before deciding which one to use in a project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Useful for Prototypes and Small Projects
&lt;/h2&gt;

&lt;p&gt;This tool is intended for situations where you need a usable button quickly, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating a prototype&lt;/li&gt;
&lt;li&gt;Building a small static website&lt;/li&gt;
&lt;li&gt;Testing a landing page design&lt;/li&gt;
&lt;li&gt;Comparing color combinations&lt;/li&gt;
&lt;li&gt;Looking for CSS design ideas&lt;/li&gt;
&lt;li&gt;Preparing a GitHub Pages project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The copied code can also be used as a starting point and customized for your own interface.&lt;/p&gt;

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

&lt;p&gt;This is not a complete UI framework. It is a practical collection of button ideas with a copy-focused workflow.&lt;/p&gt;

&lt;p&gt;Rather than searching through documentation or manually rebuilding a design, you can open the page, choose a button, and copy a small working example.&lt;/p&gt;

&lt;p&gt;Try it here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs/index78.html" rel="noopener noreferrer"&gt;https://uni928.github.io/Uni928PublicHTMLs/index78.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>html</category>
      <category>css</category>
    </item>
    <item>
      <title>Practical baseline safeguards for ChatGPT-powered services</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Fri, 13 Feb 2026 04:21:16 +0000</pubDate>
      <link>https://dev.to/uni928/practical-baseline-safeguards-for-chatgpt-powered-services-efd</link>
      <guid>https://dev.to/uni928/practical-baseline-safeguards-for-chatgpt-powered-services-efd</guid>
      <description>&lt;p&gt;Practical baseline safeguards for ChatGPT-powered services&lt;/p&gt;

&lt;p&gt;When building an application using the OpenAI API, it is tempting to ship as soon as “it works.”&lt;br&gt;
However, insufficient safeguards often lead to &lt;strong&gt;API key leakage&lt;/strong&gt;, &lt;strong&gt;unexpected traffic spikes&lt;/strong&gt;, and ultimately &lt;strong&gt;serious billing incidents&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This article summarizes &lt;strong&gt;practical, lightweight protections&lt;/strong&gt; that are especially relevant for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;personal projects&lt;/li&gt;
&lt;li&gt;internal tools&lt;/li&gt;
&lt;li&gt;early-stage prototypes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are &lt;strong&gt;not universal requirements&lt;/strong&gt;.&lt;br&gt;
What counts as a “baseline” depends heavily on your threat model, user anonymity, billing model, and scale.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A common but underestimated risk&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One frequently overlooked risk is &lt;strong&gt;direct access to your backend API endpoints&lt;/strong&gt;, bypassing the UI entirely.&lt;/p&gt;

&lt;p&gt;In practice, incidents may also be caused by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;abuse by authenticated users&lt;/li&gt;
&lt;li&gt;bugs or retry loops&lt;/li&gt;
&lt;li&gt;misconfigured proxies or shared environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, direct scripted access to your backend is a &lt;strong&gt;very common failure mode&lt;/strong&gt;, especially when no safeguards exist.&lt;/p&gt;

&lt;p&gt;If an attacker can replay the exact same request your frontend sends, they can often exhaust your usage limits in minutes.&lt;/p&gt;

&lt;p&gt;This article therefore focuses primarily on &lt;strong&gt;protecting your backend (Workers / server)&lt;/strong&gt; rather than the UI.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Never call the OpenAI API directly from the client&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your frontend should &lt;strong&gt;never&lt;/strong&gt; call the OpenAI API directly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API keys embedded in browsers or apps will leak&lt;/li&gt;
&lt;li&gt;DevTools, network inspection, and modified requests make this trivial&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recommended architecture&lt;/p&gt;

&lt;p&gt;Client → Your backend (Workers / server)&lt;br&gt;
Backend → OpenAI API&lt;/p&gt;

&lt;p&gt;The client receives only the processed result.&lt;/p&gt;

&lt;p&gt;This allows you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;keep API keys secret&lt;/li&gt;
&lt;li&gt;validate and throttle requests&lt;/li&gt;
&lt;li&gt;support streaming safely&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OpenAI explicitly recommends this approach in its official documentation.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Always implement rate limiting&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Rate limiting is essential, even for small projects.&lt;/p&gt;

&lt;p&gt;Typical limits include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;per 5 minutes&lt;/li&gt;
&lt;li&gt;per hour&lt;/li&gt;
&lt;li&gt;per day&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Implementation can be simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;store a counter&lt;/li&gt;
&lt;li&gt;store the start time of the window&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cloudflare Workers with KV, Durable Objects, or D1 make this straightforward using IPs, user IDs, or session identifiers.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lightweight one-time tokens (with clear limitations)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To discourage trivial scripted abuse, you may introduce &lt;strong&gt;short-lived request tokens&lt;/strong&gt;.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;embed an encrypted timestamp&lt;/li&gt;
&lt;li&gt;validate that it was generated recently (e.g., within 10 seconds)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⚠️ Important limitations&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This is &lt;strong&gt;not cryptographically strong authentication&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;This does &lt;strong&gt;not fully prevent replay within the valid window&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;This must &lt;strong&gt;never replace proper authentication&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of this as &lt;strong&gt;friction&lt;/strong&gt;, not security.&lt;/p&gt;

&lt;p&gt;It is useful against:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;naive replay scripts&lt;/li&gt;
&lt;li&gt;casual scraping&lt;/li&gt;
&lt;li&gt;low-effort abuse&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is &lt;strong&gt;not sufficient&lt;/strong&gt; against a determined attacker.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Review auto-recharge and billing assumptions carefully&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Billing incidents are often underestimated.&lt;/p&gt;

&lt;p&gt;There are real-world reports of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;usage continuing briefly after limits were reached&lt;/li&gt;
&lt;li&gt;negative balances appearing despite prepaid setups&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Budget limits should be treated as &lt;strong&gt;operational safeguards&lt;/strong&gt;, not hard guarantees.&lt;/p&gt;

&lt;p&gt;For small projects, consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;disabling auto-recharge&lt;/li&gt;
&lt;li&gt;keeping balances low&lt;/li&gt;
&lt;li&gt;adding monitoring and alerts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using a &lt;strong&gt;dedicated debit card with a low limit&lt;/strong&gt; can further cap worst-case damage.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Production services require real authentication&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The measures above are suitable for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;prototypes&lt;/li&gt;
&lt;li&gt;internal tools&lt;/li&gt;
&lt;li&gt;anonymous experiments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For real services, you will need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OAuth or equivalent authentication&lt;/li&gt;
&lt;li&gt;session and token management&lt;/li&gt;
&lt;li&gt;per-user quotas and permissions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;IP-based checks alone are insufficient, as client-side values can be forged.&lt;/p&gt;

&lt;p&gt;Defense must be layered: authentication, rate limits, quotas, and monitoring.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Never let the client choose the model&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Model selection directly affects cost.&lt;/p&gt;

&lt;p&gt;Best practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fix allowed models on the server&lt;/li&gt;
&lt;li&gt;reject anything outside a strict allowlist&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not rely on obscurity or “confusion” tactics.&lt;br&gt;
Clear validation and rejection are safer, simpler, and easier to operate.&lt;/p&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;For small-scale ChatGPT-powered services, the following baseline practices already eliminate many real-world incidents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;keep API keys on the server&lt;/li&gt;
&lt;li&gt;enforce rate limits&lt;/li&gt;
&lt;li&gt;treat billing controls realistically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These measures will not make your system unbreakable — but they &lt;strong&gt;raise the cost of abuse enough&lt;/strong&gt; that most attackers move on to easier targets.&lt;/p&gt;

&lt;p&gt;Security is not about perfect defenses, but about &lt;strong&gt;making misuse inconvenient and uneconomical&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Original Japanese article (source of revision): &lt;a href="https://qiita.com/uni928/items/061432019b316e418902" rel="noopener noreferrer"&gt;https://qiita.com/uni928/items/061432019b316e418902&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>[ChatGPT Blender] How to Work Around the BlenderGPT Error</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Fri, 15 Aug 2025 03:22:06 +0000</pubDate>
      <link>https://dev.to/uni928/chatgpt-x-blender-how-to-work-around-the-blendergpt-malfunction-4136</link>
      <guid>https://dev.to/uni928/chatgpt-x-blender-how-to-work-around-the-blendergpt-malfunction-4136</guid>
      <description>&lt;p&gt;BlenderGPT may sometimes fail to work properly.&lt;br&gt;
One of the main causes is that the ChatGPT API Key input field cannot read beyond the 128th character.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workaround Steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;After installing the add-on, go to Blender’s add-on settings screen, click the “folder” icon, and open the add-on’s installation folder.&lt;/li&gt;
&lt;li&gt;Open the &lt;code&gt;__init__.py&lt;/code&gt; file in Notepad or another text editor.&lt;/li&gt;
&lt;li&gt;Search for openai.api_key and enter your API Key directly in its declaration.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Operation Check
&lt;/h2&gt;

&lt;p&gt;Applying the above fix will allow BlenderGPT to function normally.&lt;/p&gt;

&lt;p&gt;That concludes our guide on how to work around the BlenderGPT malfunction.&lt;br&gt;
Thank you for reading.&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>blender</category>
      <category>blenderapi</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I’ve created a web tool to batch add update dates at the beginning of filenames</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Mon, 21 Jul 2025 01:53:17 +0000</pubDate>
      <link>https://dev.to/uni928/ive-created-a-web-tool-to-batch-add-update-dates-at-the-beginning-of-filenames-1cip</link>
      <guid>https://dev.to/uni928/ive-created-a-web-tool-to-batch-add-update-dates-at-the-beginning-of-filenames-1cip</guid>
      <description>&lt;p&gt;Have you ever had to &lt;strong&gt;add update dates at the start of filenames&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;For example, in some companies there are rules like:&lt;br&gt;&lt;br&gt;
“When uploading files to a shared folder, please &lt;strong&gt;add the update date at the beginning&lt;/strong&gt; of certain filenames.”&lt;/p&gt;

&lt;p&gt;However, when dealing with many files, this task can be surprisingly &lt;strong&gt;tedious and time-consuming&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Renaming each file manually every time is stressful&lt;/strong&gt;, isn’t it?&lt;/p&gt;

&lt;p&gt;To solve this, I developed a web tool that can &lt;strong&gt;process all files in a folder at once&lt;/strong&gt; and &lt;strong&gt;automatically add the update date&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Since it runs in your browser, there’s &lt;strong&gt;no need to install anything&lt;/strong&gt;—you can use it right away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Please give it a try!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🌐 &lt;a href="https://uni928.github.io/UpdateDatePusher/index2.html" rel="noopener noreferrer"&gt;Try it here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Use Cases&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This tool is useful in the following scenarios:&lt;/p&gt;

&lt;p&gt;✅ When you want to &lt;strong&gt;add dates before uploading files&lt;/strong&gt; to a shared drive or Google Drive&lt;br&gt;&lt;br&gt;
✅ When you need to &lt;strong&gt;organize multiple files&lt;/strong&gt; like monthly or weekly reports where update dates are important&lt;br&gt;&lt;br&gt;
✅ When you want to &lt;strong&gt;automate renaming&lt;/strong&gt; instead of manually editing filenames one by one&lt;br&gt;&lt;br&gt;
✅ When you want to &lt;strong&gt;replace old dates&lt;/strong&gt; in filenames with the latest update date&lt;/p&gt;

&lt;p&gt;🛠 &lt;strong&gt;How to Use&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;１. &lt;strong&gt;Click the “Select Folder” button&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use your browser’s File System Access API to select the folder you want to process. (Subfolders are not included.)&lt;/p&gt;

&lt;p&gt;２. &lt;strong&gt;Automatically process all files in the folder&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If a date in “YYYYMMDD” format already exists at the beginning, it will be &lt;strong&gt;removed and replaced&lt;/strong&gt; with the current update date.&lt;br&gt;&lt;br&gt;
The original files remain untouched; &lt;strong&gt;new copies with updated dates&lt;/strong&gt; are created.&lt;/p&gt;

&lt;p&gt;３. &lt;strong&gt;Check the results&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
After processing, new files like “20250717filename.txt” will appear in the folder.&lt;/p&gt;

&lt;p&gt;🚨 &lt;strong&gt;Notes:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This tool only works in browsers that support the File System Access API, such as Google Chrome or Microsoft Edge.  &lt;/p&gt;

&lt;p&gt;For safety, subfolders are excluded from processing. If you accidentally select something like the C drive, it could cause &lt;strong&gt;serious problems&lt;/strong&gt;—this is why the tool is limited to the selected folder only. Even with an internal blocklist, including subfolders still carries too much risk.&lt;/p&gt;

&lt;p&gt;The tool creates copies with the update date added. Note that the “last modified” date inside the copied files will be the date they were duplicated. &lt;strong&gt;Please understand this limitation.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🌐 &lt;a href="https://uni928.github.io/UpdateDatePusher/index2.html" rel="noopener noreferrer"&gt;Try it here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Open the tool&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’d like to verify its safety before using, you can also &lt;a href="https://github.com/uni928/UpdateDatePusher" rel="noopener noreferrer"&gt;download it from here&lt;/a&gt; &lt;strong&gt;and inspect the code yourself&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That’s all for the introduction of this &lt;strong&gt;web tool for batch adding update dates to filenames&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I hope this tool helps you &lt;strong&gt;streamline your workflow&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Thank you for reading until the end! 🙌&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;P.S.&lt;br&gt;&lt;br&gt;
This article was &lt;strong&gt;proofread using ChatGPT&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Apologies if you’re not a fan of &lt;strong&gt;AI-assisted editing&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>chatgpt</category>
      <category>ai</category>
      <category>javascript</category>
    </item>
    <item>
      <title>I Created a Website That Helps You Easily Generate ChatGPT Prompts for Blender Python API Code</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Wed, 16 Jul 2025 04:19:58 +0000</pubDate>
      <link>https://dev.to/uni928/i-created-a-website-that-helps-you-easily-generate-chatgpt-prompts-for-blender-python-api-code-1f3h</link>
      <guid>https://dev.to/uni928/i-created-a-website-that-helps-you-easily-generate-chatgpt-prompts-for-blender-python-api-code-1f3h</guid>
      <description>&lt;p&gt;Did you know you can use ChatGPT to generate Blender Python API code when creating models in Blender?&lt;/p&gt;

&lt;p&gt;These days, &lt;a href="https://chatgpt.com/" rel="noopener noreferrer"&gt;ChatGPT&lt;/a&gt; has become so accessible that you can start using it instantly—no account required.&lt;/p&gt;

&lt;p&gt;For example, if you want to “create a food stall”, you can ask ChatGPT to write code that automates the process of building the framework in Blender.&lt;/p&gt;

&lt;p&gt;And if you’re using the ChatGPT mobile app, you can even take a photo of a real-world object and say:&lt;br&gt;
“I want to create a 3D model like this image.”&lt;/p&gt;

&lt;p&gt;Surprisingly often, you’ll get a result close to what you envisioned.&lt;/p&gt;

&lt;p&gt;But… do you ever feel stuck?&lt;br&gt;
Many Blender users might think:&lt;br&gt;
“I don’t know how to ask ChatGPT the right way...”&lt;/p&gt;

&lt;p&gt;That’s why I created a simple website where you just type what you want to generate in a text box, and it automatically converts your input into what I believe is a well-structured, effective prompt.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://uni928.github.io/CreateChatGPTPromptAtBlenderPythonAPI/index2.html" rel="noopener noreferrer"&gt;Here’s the site&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✨ How It Works&lt;br&gt;
The usage is super simple.&lt;/p&gt;

&lt;p&gt;For example, enter something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Japanese Festival Set
  - Food stalls (takoyaki, goldfish scooping, shooting gallery)
  - Lanterns, curtains, and signboards
  - Mini-game props (goldfish buckets, balloon dolls)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The site will then generate the following prompt and copy it to your clipboard automatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Blender Python API Generated Code
# Please write this code with as much quality as possible to meet the requirements below

import bpy

# User instructions:
# Japanese Festival Set
  - Food stalls (takoyaki, goldfish scooping, shooting gallery)
  - Lanterns, curtains, and signboards
  - Mini-game props (goldfish buckets, balloon dolls)

# TODO: Implement high-quality processing here
# Example: create objects, apply settings, handle animations, etc.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you feed this prompt to ChatGPT, you’ll likely get a much more accurate and higher-quality response compared to a normal query.&lt;/p&gt;

&lt;p&gt;💡 In Summary&lt;br&gt;
If you want to boost your Blender workflow, definitely give this tool a try.&lt;br&gt;
You’ll quickly realize:&lt;br&gt;
“The way you ask questions can completely change the quality of AI’s answers!”&lt;/p&gt;

&lt;p&gt;🙏 Thank you for reading!&lt;/p&gt;

&lt;p&gt;Once again:&lt;br&gt;
👉 &lt;a href="https://uni928.github.io/CreateChatGPTPromptAtBlenderPythonAPI/index2.html" rel="noopener noreferrer"&gt;Here’s the site&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>chatgpt</category>
      <category>ai</category>
    </item>
    <item>
      <title>🎉 A Web App to Bulk Copy “Related Files” in a Folder with Drag &amp; Drop</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Mon, 14 Jul 2025 03:57:35 +0000</pubDate>
      <link>https://dev.to/uni928/a-web-app-to-bulk-copy-related-files-in-a-folder-with-drag-drop-5cnh</link>
      <guid>https://dev.to/uni928/a-web-app-to-bulk-copy-related-files-in-a-folder-with-drag-drop-5cnh</guid>
      <description>&lt;p&gt;Today, I’d like to introduce a &lt;strong&gt;web app that can instantly find and copy all files in a folder containing the name of a file you drag &amp;amp; drop&lt;/strong&gt;. (I’ll explain the details below.)&lt;/p&gt;

&lt;p&gt;With this web app, you can quickly list out which files reference a dreaded file like &lt;code&gt;CommonFunctionA.cs&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;By listing all related files, it also makes it much easier to ask questions to ChatGPT.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 What Can It Do?
&lt;/h2&gt;

&lt;p&gt;Imagine you have the following folder structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FolderA
├── FolderB
│   ├── aaa.txt
│   └── bbb.txt
├── ccc.txt  ← drag &amp;amp; drop
└── ddd.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you drag &lt;code&gt;ccc.txt&lt;/code&gt; into the browser, the app performs these actions:&lt;/p&gt;

&lt;p&gt;✅ Recursively searches within the folder&lt;br&gt;&lt;br&gt;
✅ Extracts all files that contain the string &lt;code&gt;ccc&lt;/code&gt; in their content&lt;br&gt;&lt;br&gt;
✅ Copies the &lt;strong&gt;file names and their contents&lt;/strong&gt; to the clipboard in bulk&lt;/p&gt;




&lt;h2&gt;
  
  
  📝 Technical Highlights
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🚀 File System Access API
&lt;/h3&gt;

&lt;p&gt;This app uses the File System Access API to explore the contents of your local folders directly from the browser.&lt;/p&gt;

&lt;p&gt;✅ Recursive folder search&lt;br&gt;&lt;br&gt;
✅ Bulk copy using the Clipboard API&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Summary
&lt;/h2&gt;

&lt;p&gt;With just drag &amp;amp; drop, you can bulk copy all “related files,”&lt;br&gt;&lt;br&gt;
making it perfect for large-scale local text searches or as a code review assistant.&lt;/p&gt;

&lt;p&gt;Note: It does &lt;strong&gt;not&lt;/strong&gt; copy “related files of related files.”&lt;br&gt;&lt;br&gt;
While it’s possible to implement this, doing so could result in copying the entire folder due to chain references.&lt;/p&gt;

&lt;p&gt;Also, I’ve been debating whether such a web app should include itself (the dragged file) in the output. (Currently, it doesn’t.)&lt;br&gt;&lt;br&gt;
Including it might make it more user-friendly, but from the perspective of “who is using &lt;code&gt;CommonFunctionA.cs&lt;/code&gt;?”, it seems more accurate to exclude it.&lt;/p&gt;




&lt;h2&gt;
  
  
  📌 Links
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Original Version:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://uni928.github.io/DirectoryInFileAllCopy/index5.html" rel="noopener noreferrer"&gt;https://uni928.github.io/DirectoryInFileAllCopy/index5.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Updated Version (Includes Self):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://uni928.github.io/DirectoryInFileAllCopy/index6.html" rel="noopener noreferrer"&gt;https://uni928.github.io/DirectoryInFileAllCopy/index6.html&lt;/a&gt;&lt;br&gt;
I decided to release this version too since it’s more convenient when asking ChatGPT questions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source Code (for local use and safety checks):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/uni928/DirectoryInFileAllCopy" rel="noopener noreferrer"&gt;https://github.com/uni928/DirectoryInFileAllCopy&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to download it and try it out locally!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>ai</category>
      <category>chatgpt</category>
    </item>
  </channel>
</rss>
