<?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: Sonny kk</title>
    <description>The latest articles on DEV Community by Sonny kk (@sonny_9cfaf8b35514f).</description>
    <link>https://dev.to/sonny_9cfaf8b35514f</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%2F4007765%2F9d1afeae-75b5-4b93-9d9b-abc77259c469.jpg</url>
      <title>DEV Community: Sonny kk</title>
      <link>https://dev.to/sonny_9cfaf8b35514f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sonny_9cfaf8b35514f"/>
    <language>en</language>
    <item>
      <title>I Love You 100 Times ❤️ — I Built a Silly Little Tool And People Actually Use It</title>
      <dc:creator>Sonny kk</dc:creator>
      <pubDate>Sat, 25 Jul 2026 11:51:05 +0000</pubDate>
      <link>https://dev.to/sonny_9cfaf8b35514f/i-love-you-100-times-i-built-a-silly-little-tool-and-people-actually-use-it-39m3</link>
      <guid>https://dev.to/sonny_9cfaf8b35514f/i-love-you-100-times-i-built-a-silly-little-tool-and-people-actually-use-it-39m3</guid>
      <description>&lt;p&gt;A few weeks ago I was messing around late at night, trying to think of something small to build that didn't need a database, an API key, or three days of setup. My girlfriend had joked earlier that day about wanting me to say &lt;a href="https://sorry100times.in/i-love-you-100-times-copy-and-paste/" rel="noopener noreferrer"&gt;I love you 100 times&lt;/a&gt; in a row, and instead of just typing it out in our chat like a normal person, I thought — why not turn this into a tiny web page?&lt;br&gt;
One example output of this tool - &lt;br&gt;
I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️ I love you ❤️&lt;/p&gt;

&lt;p&gt;So that's exactly what it is. You open the page, hit a button, and it prints "I love you" one hundred times on the screen. Sometimes it's animated so the words stack up one by one, sometimes it's styled with little hearts floating around, depending on which version you catch me tinkering with. There's no login, no ads, nothing to configure. You just load it, watch it fill the screen, and send the link to whoever you want to annoy or charm.&lt;/p&gt;

&lt;p&gt;What surprised me is how many people actually shared it after I posted the link in a small dev community. I expected maybe a couple of friends to laugh and move on. Instead people started sending screenshots of using it for anniversaries, for apology texts after an argument, even one person said they used it as a proposal gimmick by adding a "will you marry me" message at line 100. None of that was planned. I just wanted to make my girlfriend smile and accidentally built something other couples wanted to steal.&lt;/p&gt;

&lt;p&gt;From a dev perspective it's about as unglamorous as it gets — plain HTML, a sprinkle of CSS for the hearts, and a loop in JavaScript that pushes the phrase into the DOM with a short delay between each one so it feels alive instead of dumping all hundred lines at once. That small delay turned out to be the whole trick. Without it, the page just looks like spam. With it, people actually watch the counter climb and read along, which is kind of the whole emotional point of a repeated phrase in the first place.&lt;/p&gt;

&lt;p&gt;If you're the kind of developer who likes shipping something in an evening instead of overengineering a side project for six months, this is a fun one to clone and make your own. Change the phrase, change the colors, add a name at the end, whatever fits your situation. It doesn't need to be perfect. Mine still has a CSS bug I haven't fixed because honestly, nobody's ever complained about it — they're too busy reading the words.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>how to repeat texts up to 10,000 times quickly</title>
      <dc:creator>Sonny kk</dc:creator>
      <pubDate>Wed, 08 Jul 2026 05:54:48 +0000</pubDate>
      <link>https://dev.to/sonny_9cfaf8b35514f/how-to-repeat-texts-up-to-10000-times-quickly-h37</link>
      <guid>https://dev.to/sonny_9cfaf8b35514f/how-to-repeat-texts-up-to-10000-times-quickly-h37</guid>
      <description>&lt;h1&gt;
  
  
  I Found a Product Idea Hiding Inside a Google Autocomplete Suggestion. Here's the Full Case Study.
&lt;/h1&gt;

&lt;p&gt;Most indie hacker case studies start with "I had a problem, so I built a solution." Mine didn't start that way. Mine started with a autocomplete dropdown that made zero sense to me at first glance — and turned into one of the more satisfying small builds I've shipped.&lt;/p&gt;

&lt;p&gt;I'm sharing the full process here: the research, the validation, the build, and what happened after launch. No inflated numbers, no "I made $10k in a weekend" nonsense. Just an honest walkthrough for other devs who like turning small, weird ideas into working products.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Noticing the Signal
&lt;/h2&gt;

&lt;p&gt;I was doing routine keyword research for a text utility site when I typed "sorry" into a search tool out of curiosity. The autocomplete and related-searches data showed something odd: &lt;a href="https://sorry100times.in/" rel="noopener noreferrer"&gt;write sorry 100 times&lt;/a&gt; as a real, recurring, high-frequency query. Not a fluke — consistent month over month.&lt;br&gt;
Before you go further here is output example of tool - &lt;br&gt;
I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺&lt;/p&gt;

&lt;p&gt;That's usually the point where most people scroll past and move on. I didn't, because a repeating pattern like that is a signal, not noise. Real people were typing that exact phrase into Google with real intent behind it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Figuring Out the Actual Intent
&lt;/h2&gt;

&lt;p&gt;Search volume alone doesn't tell you what to build. I had to figure out what someone typing "sorry 100 times" actually wanted as an end result. A few possibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They wanted to read about the phrase (informational intent)&lt;/li&gt;
&lt;li&gt;They wanted a pre-written block of "sorry" repeated, ready to copy (transactional intent)&lt;/li&gt;
&lt;li&gt;They wanted a meme or joke image&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I checked what was already ranking. Almost everything was either a bare-bones repeater tool with poor UX, or low-effort content pages with no actual usable output. That told me the intent was clearly transactional — people wanted the text itself, generated instantly, not an article about apologies. And nobody had built a genuinely good tool for it.&lt;/p&gt;

&lt;p&gt;That's validation. Not survey data, not a landing page test — just a clear, unmet, repeating demand with weak existing competition.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Scoping the MVP Ruthlessly
&lt;/h2&gt;

&lt;p&gt;It would've been easy to over-scope this. Add accounts, add a "save your history" feature, add social sharing, add a dozen preset categories. I didn't. The entire point of someone searching "sorry 1000 times" is urgency — they want output fast, not a feature tour.&lt;/p&gt;

&lt;p&gt;So the MVP became intentionally minimal:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A text input, plus a few ready-made presets for common cases&lt;/li&gt;
&lt;li&gt;A count selector — 100, 1,000, 10,000&lt;/li&gt;
&lt;li&gt;A generate button&lt;/li&gt;
&lt;li&gt;Copy button&lt;/li&gt;
&lt;li&gt;Download as .txt button&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it. No sign-up wall, no unnecessary steps between the search query and the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Building and Shipping Fast
&lt;/h2&gt;

&lt;p&gt;Because the scope was so tight, the build itself only took a few focused sessions. Plain HTML, CSS, and JavaScript — no framework overhead needed for something this contained. I kept performance in mind from the start, since generating up to 10,000 repetitions needed to feel instant, not sluggish, or the entire value proposition falls apart.&lt;/p&gt;

&lt;p&gt;I didn't wait for a "perfect" version. I shipped the minimal version, watched how real users interacted with it, and iterated afterward based on actual usage rather than my own assumptions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: What I Learned Post-Launch
&lt;/h2&gt;

&lt;p&gt;A few things surprised me once real traffic started coming in:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;People use presets more than I expected.&lt;/strong&gt; I assumed most users would type their own text, but a large chunk of users click straight into a preset and generate immediately. Reducing typing effort mattered more than I predicted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The download button gets used more on mobile.&lt;/strong&gt; Copy-paste on mobile keyboards is clunky when the block of text is huge, so a lot of mobile users prefer downloading the .txt file over trying to copy 10,000 lines by hand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Sorry 100 times copy and paste" style intent dominates.&lt;/strong&gt; Almost everyone wants the output ready to paste somewhere immediately — a group chat, a text message, a caption — not a file to keep. Copy usage outpaces downloads by a wide margin.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bigger Lesson for Other Indie Dev's
&lt;/h2&gt;

&lt;p&gt;You don't need a groundbreaking idea to build something worth shipping. You need a real, repeating signal of demand, a clear-eyed read on what people actually want when they search that phrase, and the discipline to build only what solves that specific need — nothing more.&lt;/p&gt;

&lt;p&gt;This entire project started because I refused to scroll past a weird, oddly specific search query. If you're doing keyword or market research for your own side project, don't dismiss the strange, hyper-specific queries. Sometimes those are exactly the ones nobody has bothered to build a good solution for yet.&lt;/p&gt;

&lt;p&gt;If you want to see the finished result of this whole process, it's a live tool now — simple enough that you can generate something like &lt;a href="https://sorry100times.in/" rel="noopener noreferrer"&gt;sorry 10,000 times&lt;/a&gt; output in under ten seconds without writing a single line of code yourself.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>reviews</category>
    </item>
    <item>
      <title>Sorry 100 times generator</title>
      <dc:creator>Sonny kk</dc:creator>
      <pubDate>Wed, 08 Jul 2026 05:48:03 +0000</pubDate>
      <link>https://dev.to/sonny_9cfaf8b35514f/sorry-100-times-generator-id0</link>
      <guid>https://dev.to/sonny_9cfaf8b35514f/sorry-100-times-generator-id0</guid>
      <description>&lt;p&gt;How I Built a Text Repeater That Doesn't Freeze the Browser at 10,000 Repetitions&lt;/p&gt;

&lt;p&gt;A few months back I shipped a small utility that does one thing: repeat a block of text however many times you want. Sounds trivial, right? String repetition is a one-liner in most languages. But the moment I put a "10,000" option in the UI, I ran into a handful of problems that taught me more about browser performance than I expected from something this small.&lt;/p&gt;

&lt;p&gt;This is a build log, not a highlight reel. I want to walk through the actual technical decisions, including the ones that didn't work the first time.&lt;br&gt;
Before going further see some example output of the tool- &lt;br&gt;
I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺 I am really sorry 🥺&lt;/p&gt;

&lt;p&gt;The Trigger: A Weird Keyword&lt;/p&gt;

&lt;p&gt;Before any code, there was a keyword. I was doing search research for a side project and noticed a strange pattern: thousands of people searching &lt;a href="https://sorry100times.in/" rel="noopener noreferrer"&gt;sorry 1000 times&lt;/a&gt; every month. Not a typo, not a one-off — a consistent, recurring search. People wanted a fast way to generate a huge block of repeated text, usually the word "sorry," and copy or download it immediately.&lt;/p&gt;

&lt;p&gt;That's a product decision hiding inside a search query. So I decided to build it properly, as a developer, not just slap together a script.&lt;/p&gt;

&lt;p&gt;Problem 1: Naive String Repetition Doesn't Scale the Way You Think&lt;/p&gt;

&lt;p&gt;My first pass looked roughly like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;function repeatText(text, count) {&lt;br&gt;
  let result = "";&lt;br&gt;
  for (let i = 0; i &amp;lt; count; i++) {&lt;br&gt;
    result += text + "\n";&lt;br&gt;
  }&lt;br&gt;
  return result;&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
At 100 repetitions, fine. At 1,000, still fine. At 10,000, this starts to hurt — repeated string concatenation in a loop creates a lot of intermediate string allocations, and depending on the engine, that can get expensive fast. The fix was obvious once I looked at it properly: build an array and join it once.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;function repeatText(text, count) {&lt;br&gt;
  return Array(count).fill(text).join("\n");&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Massive improvement. Lesson: don't concatenate strings in a hot loop, ever, even for something as "simple" as a repeater tool.&lt;/p&gt;

&lt;p&gt;Problem 2: Rendering 10,000 Lines to the DOM Is the Real Bottleneck&lt;/p&gt;

&lt;p&gt;Generating the string was fast. Displaying it wasn't. Dumping 10,000 lines into a &lt;code&gt;&amp;lt;textarea&amp;gt;&lt;/code&gt; or a rendered &lt;/p&gt; caused visible jank on lower-end devices, especially mobile. The DOM doesn't care how efficient your string logic is if you're forcing a massive reflow.

&lt;p&gt;The fix here was to keep the raw text in a &lt;code&gt;&amp;lt;textarea&amp;gt;&lt;/code&gt;, which browsers handle far better than rendering thousands of individual DOM nodes (which is what would happen if I'd foolishly rendered each repetition as its own element, something I actually tried first and immediately regretted). A &lt;code&gt;&amp;lt;textarea&amp;gt;&lt;/code&gt; treats it as plain text content, not a DOM tree, so it stays lightweight even at 10,000 lines.&lt;/p&gt;

&lt;p&gt;Problem 3: Copy and Download Needed to Feel Instant&lt;/p&gt;

&lt;p&gt;Since the whole point of this tool is speed — someone searching "sorry 100 times" wants their text now, not after five seconds of spinner — I had to be careful with the copy and download flows too.&lt;/p&gt;

&lt;p&gt;For copying, I used the Clipboard API directly instead of the older &lt;code&gt;document.execCommand("copy")&lt;/code&gt; fallback, since it's cleaner and doesn't require selecting text manually:&lt;br&gt;
&lt;code&gt;&lt;br&gt;
async function copyToClipboard(text) {&lt;br&gt;
  try {&lt;br&gt;
    await navigator.clipboard.writeText(text);&lt;br&gt;
  } catch (err) {&lt;br&gt;
    console.error("Copy failed", err);&lt;br&gt;
  }&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For downloading, I generate a Blob client-side and trigger a download without ever touching a server:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;function downloadAsTxt(text, filename = "repeated-text.txt") {&lt;br&gt;
  const blob = new Blob([text], { type: "text/plain" });&lt;br&gt;
  const url = URL.createObjectURL(blob);&lt;br&gt;
  const a = document.createElement("a");&lt;br&gt;
  a.href = url;&lt;br&gt;
  a.download = filename;&lt;br&gt;
  a.click();&lt;br&gt;
  URL.revokeObjectURL(url);&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
No backend call, no waiting, no server round-trip. Everything happens in-browser, which matters a lot when your entire value proposition is speed.&lt;/p&gt;

&lt;p&gt;Problem 4: Debouncing the Generate Action&lt;/p&gt;

&lt;p&gt;Early testers (mostly friends I roped into clicking buttons for me) kept mashing the generate button impatiently, especially at the 10,000 setting, thinking it hadn't registered. I added a short debounce and a lightweight "generating..." state so the UI gives immediate feedback even though the actual generation takes milliseconds. Perceived performance matters as much as real performance.&lt;/p&gt;

&lt;p&gt;What I'd Tell Another Developer Building Something Similar&lt;/p&gt;

&lt;p&gt;If you're building anything that takes a "how many times" input from a user, don't assume they'll stick to reasonable numbers. Someone will always test the upper limit immediately — in my case, that's literally the point, since people specifically search for the highest counts like "sorry 1000 times" or more. Build for the ceiling, not the average case.&lt;/p&gt;

&lt;p&gt;Also, resist the urge to over-engineer a tool this small. I didn't need a framework, a state management library, or a backend. Vanilla JS, a textarea, the Clipboard API, and the Blob API covered everything. Sometimes the right architecture is just... less architecture.&lt;/p&gt;

&lt;p&gt;If you want to see how the copy and download flow feels in practice, the tool supports presets too, so you can test type &lt;a href="https://sorry100times.in/" rel="noopener noreferrer"&gt;sorry 100 times copy and paste&lt;/a&gt; style output in a couple of clicks without typing anything yourself. I'd genuinely appreciate feedback from other devs on what would break this at scale — I'm always looking for the next edge case I haven't hit yet.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
