Menu
Back to writing

Reflections

Why I stopped building Shopmatey as a separate product

Letting go of an early brand is hard when you have spent years building it. On April 2, 2025, I announced that Shopmatey was joining Omni. Here is why absorbing what worked into a new product was better than keeping two alive.

Why I stopped building Shopmatey as a separate product

One of the hardest decisions for an indie builder is deciding to stop developing a product that still works.

It is relatively easy to shut down a project that failed immediately. If you launch a prototype, nobody uses it, and the database has twelve rows after three months, walking away is straightforward. You shrug, archive the repository, and try something else.

It is much harder when the product had real momentum.

Shopmatey was that product for me.

I spent years building it. I took it through an early FlutterFlow prototype, rebuilt it with raw Flutter and a self-hosted Appwrite backend, launched it to a #2 Product of the Day finish on Product Hunt, registered trademarks, and incorporated companies around it. For a long time, my entire digital identity was tied to being the founder of Shopmatey.

Yet on April 2, 2025, I published a short post on the Shopmatey blog announcing that Shopmatey was joining Omni.

To an outside observer, it might have looked like a sudden shift or corporate maneuvering.

In reality, it was the resolution of a quiet, months-long struggle with sunk cost, divided attention, and the difference between maintaining a brand and building a real business.

The illusion of "maintenance mode"

When I first started building Omni, I told myself a familiar lie:

"I will keep Shopmatey running in maintenance mode while I explore this new social and communication app on the side."

Every founder who builds multiple things tells themselves this story.

You imagine that a software product can sit peacefully on a server like a piece of vintage furniture, requiring nothing more than an occasional dusting.

In practice, there is no such thing as passive maintenance for an active mobile application.

Even if you stop adding major features, a live app demands continuous operational energy:

  • Apple and Google roll out annual operating system updates that break dependencies.
  • Third-party SDKs deprecate APIs and require security patches.
  • Users send support emails asking questions about account linking or forgotten passwords.
  • Server certificates expire, database backups need monitoring, and cloud hosting bills continue arriving every month.
  • App store listings need compliance updates to avoid being unlisted.

When you are a solo founder, every hour spent updating a legacy Flutter plugin or renewing an SSL certificate for an older project is an hour stolen from the thing you are actually excited to build.

Shopmatey was not dying, but my attention was split. And divided focus is the quietest way for a small startup to fail.

Context switching is a hidden tax

Beyond the raw hours spent on bug fixes, the real killer was the cognitive switching cost.

When you manage two separate products, your brain never gets to settle into a single problem space.

In the morning, you might be thinking about e-commerce checkout funnels, WooCommerce database schemas, and product catalog synchronization for Shopmatey. In the afternoon, you switch to thinking about real-time messaging protocols, social graphs, and AI companion memory for Omni.

That kind of back-and-forth feels productive on the surface because you are always busy. But it prevents you from doing the deep, uninterrupted thinking required to solve difficult product problems.

You end up building two mediocre solutions instead of one exceptional one.

I reached a point where every new idea for Shopmatey felt constrained by its e-commerce framing, and every new idea for Omni felt like it was duplicating infrastructure I had already built for Shopmatey.

Something had to give.

Sunk cost is an emotional anchor

The real reason I hesitated to consolidate Shopmatey earlier had very little to do with code or infrastructure.

It was purely emotional.

When you invest years into a specific name, the brand starts feeling like a piece of your personality. I had spent countless evenings explaining Shopmatey to friends, pitching it in accelerator applications, and optimizing search results so people could find it.

Letting go of the standalone brand felt uncomfortably close to admitting that those years had been wasted.

The psychological trap of sunk cost whispers:

"If you stop developing Shopmatey now, all that prior effort disappears."

It took me a long time to realize how flawed that reasoning is.

The value of an early project is not trapped inside the domain name or the logo. The value lives in what you learned, the infrastructure patterns you designed, the code you wrote, and the clarity you gained about what users actually need.

Shopmatey did not need to stay an independent product for those lessons to remain valuable.

Shopmatey was a feature, not a universe

The deeper product realization came from looking honestly at what Shopmatey actually did.

Shopmatey was built as a social commerce platform: a mobile storefront builder, link-in-bio tool, and shoppable media feed designed for creators and small businesses.

The problem was that e-commerce does not exist in a vacuum.

Creators did not just want an isolated store link. They wanted an audience. They wanted direct messaging. They wanted interactive social discovery, rich profiles, and automated tools to engage with their followers.

Whenever I tried to make Shopmatey more useful, I found myself designing features that belonged to a broader social network:

  • chat systems;
  • follower graphs;
  • rich identity profiles;
  • conversational bots.

Meanwhile, Omni was being designed from the ground up as that broader social and communication canvas.

At a certain point, the redundancy became obvious:

Shopmatey was trying to build a social layer around e-commerce, while Omni was building a commerce layer into social interaction.

They were two sides of the exact same problem. Continuing to run them as separate applications with separate databases and separate user accounts made no sense.

Absorbing versus killing

When companies announce that a product is being "sunset," it often means the servers are being unplugged, the data is being deleted, and the users are being shown an error page.

I did not want to do that.

The product decision only worked because I could preserve user identity, content, and public links. I wrote about that implementation work in What happens to the users when you retire a product?.

There is a huge difference between killing a product and absorbing it:

Killing a Product:
  Product A ───► Servers offline ───► Dead links ───► Lost data
 
Absorbing a Product:
  Product A ───► Core features ───┐
                                  ├───► Unified Platform (Omni)
  Product B ───► Social graph ────┘

Absorbing Shopmatey meant honoring what worked while retiring the redundant operational scaffolding:

  1. User identity: Existing Shopmatey accounts were mapped into Omni's centralized identity layer rather than deleted.
  2. Storefronts and content: Creator store data and public profile links were migrated to resolve within Omni's user-content infrastructure.
  3. Infrastructure consolidation: Database hosting and backend services were streamlined into a single stack instead of paying for duplicate servers.
  4. Focused roadmap: The commerce capabilities became a first-class feature set inside Omni rather than a separate product fighting for attention.

On April 2, 2025, when I announced the transition on the Shopmatey blog, I framed it as a new path forward because that is genuinely what it was.

It was not a defeat. It was an integration.

The relief of single-minded focus

The moment the decision was made, the relief was immediate.

Removing the cognitive overhead of managing two separate products cleared a surprising amount of mental bandwidth. I no longer had to decide which project deserved my weekend, which brand to post from, or how to explain the relationship between two different apps to someone I had just met.

There was only one codebase to improve. One product roadmap to prioritize. One user experience to polish.

In software, simplicity on the outside usually requires disciplined decisions on the inside.

Sometimes the most productive thing you can do for your business is not writing more code, but deciding what you are going to stop doing.

What I learned

If you are an indie developer holding onto an older project while trying to launch a new one, here is the question worth asking:

Does this project need to exist as an independent brand, or is it scaffolding for what you are building next?

Your early projects are rarely your final destination. They are laboratories where you test ideas, build technical muscle, and discover what the market actually cares about.

When a newer product clearly supersedes an older one, holding onto the old brand out of sentimentality does not protect your past work. It just holds back your future work.

Take the best parts with you, give them a home in your new system, and let the old container go.

Back to work.