<?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>Forem: RequiemCat</title>
    <description>The latest articles on Forem by RequiemCat (@requiemcat_dcdaf6522ca6b9).</description>
    <link>https://forem.com/requiemcat_dcdaf6522ca6b9</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3841346%2F58379214-9e41-4657-b04a-831135f7d44a.png</url>
      <title>Forem: RequiemCat</title>
      <link>https://forem.com/requiemcat_dcdaf6522ca6b9</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/requiemcat_dcdaf6522ca6b9"/>
    <language>en</language>
    <item>
      <title>I built an online background remover and learned a lot from launching it</title>
      <dc:creator>RequiemCat</dc:creator>
      <pubDate>Tue, 24 Mar 2026 09:05:07 +0000</pubDate>
      <link>https://forem.com/requiemcat_dcdaf6522ca6b9/i-built-an-online-background-remover-and-learned-a-lot-from-launching-it-28p6</link>
      <guid>https://forem.com/requiemcat_dcdaf6522ca6b9/i-built-an-online-background-remover-and-learned-a-lot-from-launching-it-28p6</guid>
      <description>&lt;h2&gt;
  
  
  I built an online background remover and learned a lot from launching it
&lt;/h2&gt;

&lt;p&gt;I recently launched a small web app called &lt;strong&gt;ImageBackgroundRemover&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://imagebackgroundremover.xyz" rel="noopener noreferrer"&gt;https://imagebackgroundremover.xyz&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It removes image backgrounds online and returns a transparent PNG. The main use cases I had in mind were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;product photos&lt;/li&gt;
&lt;li&gt;portraits&lt;/li&gt;
&lt;li&gt;logos&lt;/li&gt;
&lt;li&gt;simple content creation workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This wasn’t a "huge startup idea." It was more of a practical product: build something useful, keep the scope small, ship it, and learn from real users instead of polishing forever.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;There are already a lot of background removal tools out there, so I wasn’t trying to invent a brand-new category.&lt;/p&gt;

&lt;p&gt;What I wanted was something that felt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;simple&lt;/li&gt;
&lt;li&gt;lightweight&lt;/li&gt;
&lt;li&gt;easier to price for smaller users&lt;/li&gt;
&lt;li&gt;useful for solo sellers, creators, and people who only need this workflow occasionally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A lot of tools in this space are either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;very polished but expensive for light usage&lt;/li&gt;
&lt;li&gt;aimed at teams and larger workflows&lt;/li&gt;
&lt;li&gt;or a bit too bloated for "I just want a transparent PNG quickly"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I decided to make a small version focused on doing one thing well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech stack
&lt;/h2&gt;

&lt;p&gt;The project is built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Next.js&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare Pages&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare D1&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PayPal&lt;/strong&gt; for payments and subscriptions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Analytics 4&lt;/strong&gt; for basic tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The product currently supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JPG / PNG / WEBP uploads&lt;/li&gt;
&lt;li&gt;transparent PNG output&lt;/li&gt;
&lt;li&gt;free credits after sign-in&lt;/li&gt;
&lt;li&gt;one-time credit packs&lt;/li&gt;
&lt;li&gt;monthly subscriptions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The fun part: launching is where the real bugs show up
&lt;/h2&gt;

&lt;p&gt;Like a lot of small projects, building the core product wasn’t the hardest part.&lt;/p&gt;

&lt;p&gt;Launching it was.&lt;/p&gt;

&lt;p&gt;A few of the issues that showed up only after going live:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. A subscription plan broke because of a stale PayPal plan ID
&lt;/h3&gt;

&lt;p&gt;One pricing option worked, another one didn’t.&lt;/p&gt;

&lt;p&gt;That turned out to be a classic integration problem: the stored PayPal plan ID for one monthly subscription had become invalid, so checkout failed with a resource error.&lt;/p&gt;

&lt;p&gt;The fix wasn’t just replacing the bad ID. I changed the logic so the app can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;validate existing billing plan records&lt;/li&gt;
&lt;li&gt;detect invalid PayPal plan IDs&lt;/li&gt;
&lt;li&gt;automatically recreate plans when needed&lt;/li&gt;
&lt;li&gt;retry subscription creation instead of failing immediately&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That kind of thing is easy to miss if you only test the happy path.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. GA4 silently stopped receiving data
&lt;/h3&gt;

&lt;p&gt;This one was annoying because everything looked configured.&lt;/p&gt;

&lt;p&gt;The real issue was that the production environment variable for the GA measurement ID was effectively empty at runtime, so the analytics script never got injected.&lt;/p&gt;

&lt;p&gt;The lesson:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don’t trust configuration UIs just because a key exists.&lt;/strong&gt; Always verify that the value is actually present in the deployed runtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Cloudflare/Git-based deploys can get weird if local fixes aren’t pushed
&lt;/h3&gt;

&lt;p&gt;At one point I had a production deployment working from a direct deploy, but the Git-linked rebuild failed because the commit only existed locally and not on GitHub yet.&lt;/p&gt;

&lt;p&gt;That caused a ref-not-found style deployment error.&lt;/p&gt;

&lt;p&gt;Another reminder that launch problems are often not coding problems — they’re deployment, runtime, and configuration problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;A few things stood out during this launch.&lt;/p&gt;

&lt;h3&gt;
  
  
  Shipping small is still worth it
&lt;/h3&gt;

&lt;p&gt;Even in crowded spaces, building a focused version of a familiar tool teaches a lot.&lt;/p&gt;

&lt;p&gt;You don’t need a completely original category to learn useful lessons about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UX&lt;/li&gt;
&lt;li&gt;pricing&lt;/li&gt;
&lt;li&gt;infra&lt;/li&gt;
&lt;li&gt;analytics&lt;/li&gt;
&lt;li&gt;payments&lt;/li&gt;
&lt;li&gt;landing pages&lt;/li&gt;
&lt;li&gt;distribution&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Integrations fail in very non-obvious ways
&lt;/h3&gt;

&lt;p&gt;Payment systems, analytics, deployment platforms, and runtime config can all fail correctly while still breaking your product.&lt;/p&gt;

&lt;p&gt;The bug is often not in your main feature.&lt;/p&gt;

&lt;p&gt;It’s in the glue.&lt;/p&gt;

&lt;h3&gt;
  
  
  Runtime verification matters more than config screenshots
&lt;/h3&gt;

&lt;p&gt;I’m trying to get better at verifying things by actual behavior:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;does checkout really work?&lt;/li&gt;
&lt;li&gt;does GA really fire?&lt;/li&gt;
&lt;li&gt;does the page really include the script?&lt;/li&gt;
&lt;li&gt;does the deployed environment really have the variable?&lt;/li&gt;
&lt;li&gt;does the production path behave like expected?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That sounds obvious, but it’s easy to skip when you’re moving fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next
&lt;/h2&gt;

&lt;p&gt;Right now I’m focusing on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;improving positioning and landing page clarity&lt;/li&gt;
&lt;li&gt;building better use-case pages&lt;/li&gt;
&lt;li&gt;understanding which users actually care&lt;/li&gt;
&lt;li&gt;finding distribution channels that fit a small utility product&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m also interested in the broader question of how to launch small developer-built tools in crowded markets without overcomplicating them.&lt;/p&gt;

&lt;h2&gt;
  
  
  I’d love to hear from other builders
&lt;/h2&gt;

&lt;p&gt;If you’ve launched something small, what caused more problems for you after launch?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;product issues&lt;/li&gt;
&lt;li&gt;infra and deployment issues&lt;/li&gt;
&lt;li&gt;payment issues&lt;/li&gt;
&lt;li&gt;analytics issues&lt;/li&gt;
&lt;li&gt;or figuring out distribution?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m finding that the product itself is often only half the work.&lt;/p&gt;

&lt;p&gt;If you want to check it out, here it is again:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://imagebackgroundremover.xyz" rel="noopener noreferrer"&gt;https://imagebackgroundremover.xyz&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuhqvhutww5p3whxnn5xr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuhqvhutww5p3whxnn5xr.png" alt=" " width="800" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
