Back to Blog

I Built an AI Email App for 6 Months and Nobody Cared — Here's What I Learned

9 min read
By AnhDan
Startup
Developer
Side Project
Startup
Coding
Vibe Code
I Built an AI Email App for 6 Months and Nobody Cared — Here's What I Learned

Last week, I made one of the hardest decisions in my side-hustle journey: I'm shelving ZENLYM, the AI-powered email management app I've been building for the past eight months. The app actually works—users can connect multiple Gmail accounts, see AI-classified emails in a Slack-like chat interface, and get real-time synchronization through webhooks. I even built a polished landing page with proper analytics. But when I tried to launch through LinkedIn and Facebook posts, I got a handful of clicks and zero email signups. Not a single person interested enough to leave their email address.

This isn't about feeling sorry for myself. It's the honest retrospective I wish someone had written for me before I started. If you're a developer with a full-time job trying to build something on the side, I hope these lessons save you from making the same expensive mistakes.

Building a Product While Working Full-Time as a CTO

Let me give you some context, because it probably sounds familiar. I work as a CTO at a software company, my days are filled with meetings, architecture decisions, and people management. By the time I get home, I'm mentally drained. The dream of building a side product that generates passive income is appealing precisely because my day job doesn't leave room for the creative, hands-on coding I fell in love with years ago.

I chose to build an email management tool because the problem felt obvious and personal. Like most professionals, I'm drowning in email, hundreds of messages daily across multiple accounts, with important stuff buried under newsletters and promotional noise. The idea was simple: use AI to classify emails and surface only what matters, presented in a clean chat interface. I validated that other people complained about this problem too. What I failed to validate was whether anyone would actually pay for my particular solution.


What I Shipped (And Why It Wasn't Enough)

Eight months of nights and weekends produced something technically solid: OAuth integration for multiple Gmail accounts, a FastAPI backend on EC2, PostgreSQL for storage, real-time sync via Google's push notifications, and AI classification to categorize emails and generate summaries. The frontend was a responsive chat-based interface where email summaries appeared as messages. The landing page looked professional with all the conversion elements you'd expect.

But here's the uncomfortable truth: the AI classification wasn't good enough to change behavior. It worked maybe 70-80% of the time, which sounds decent until you realize what that means in practice. When I used my own app, I still found myself opening Gmail directly "just to make sure." If I couldn't trust my own product enough to rely on it completely, why would anyone else? "Pretty good" isn't good enough when you're asking someone to change a deeply ingrained habit.


The 5 Mistakes That Killed My Product

1. I Built Three Products When I Should Have Built One

My "MVP" had multi-account email integration, agentic AI classification, real-time webhook sync, and a polished Slack-inspired UI. That's not an MVP, that's an entire product roadmap shipped at once.

As a side-hustle builder working evenings and weekends, time is your scarcest resource. Every hour I spent fine-tuning real-time sync was an hour I didn't spend making AI classification actually good. Every day polishing button shadows was a day I didn't spend talking to potential users.

What I should have done: pick the single most important feature and build the minimum version that tests whether people want it. A Chrome extension that adds priority labels to Gmail. A daily email digest. A Slack bot that pings you when something important arrives. Any of these could have shipped in four weeks instead of eight months.

2. I Confused Productivity with Progress

Here's my embarrassing timeline: Months 1-2 were genuinely productive. Months 3-4 were sporadic, I'd go weeks without touching code, then have a burst on a random Saturday. Months 5 I was preparing for my wedding, with maybe two commits over eight weeks. Month 6, I panic-shipped features to get something launchable.

The lesson: consistency dramatically outperforms intensity. One hour of focused work every day beats ten hours on a random Saturday once a month. Daily work keeps context fresh, helps you notice patterns faster, and maintains momentum instead of constantly restarting cold. I'm now committed to coding every single day, even if just for thirty minutes. The habit matters more than any individual session.

3. I Didn't Set Up CI/CD Until It Was Too Late

For six months, every release required manual steps: SSH into the server, pull code, restart services, hope nothing broke. Because releases were risky, I released less often. Because I released less often, changes accumulated. Each release became bigger and scarier - a vicious cycle that slowed my feedback loop to a crawl.

When I finally set up proper CI/CD with GitHub Actions and Docker, everything changed. I could push a commit and see it live within minutes. I made smaller, more frequent changes and caught bugs faster. The psychological shift was significant: shipping became a habit rather than an event.

My rule for future projects: CI/CD gets set up in week one, before any real features. Even if the "product" is just a landing page.

4. I Built for Launch Day Instead of Learning

I spent an embarrassing amount of time on visual polish before anyone used the product. Tweaking spacing, experimenting with colors, adding subtle animations, agonizing over landing page copy. All of this felt productive, but none of it moved me closer to understanding whether anyone wanted what I was building.

The fundamental mistake was treating launch as the goal rather than learning as the goal. I was building toward some imaginary moment when the product would be "ready." But readiness is an illusion, there's always another feature to add, another bug to fix. Meanwhile, every day building in isolation was a day without real user feedback.

What I should have done: launch something within the first month and start learning immediately. A simple landing page collecting emails. A basic prototype in front of ten people. Instead, I built in secret for eight months and was surprised when nobody cared about my big reveal.

5. I Validated the Problem Without Validating the Solution

I knew email overload was real because I experienced it myself and saw countless others complaining online. That felt like sufficient validation. What I didn't validate was whether my particular approach - an AI chat interface surfacing important emails, was something people would pay for.

The gap between "I have this problem" and "I would pay for this solution" is enormous. People complain about email constantly, but they have existing coping mechanisms: filters, labels, aggressive unsubscribing, or just accepting they'll miss things. For someone to adopt a new tool, it needs to be dramatically better, not incrementally better, but life-changingly better. My 70-80% accurate AI classification wasn't life-changing.

If I could go back, I would have real conversations with potential users before writing code. Not surveys or Reddit threads, actual conversations about how they manage email, what they've tried, and what would make them switch. I would try to pre-sell: "If I built X, would you pay $10/month?" Those answers would have told me whether I was onto something real.


What I Actually Did Right

It wasn't all mistakes. I kept a project diary throughout, documenting progress, decisions, dead ends, and learnings. This retrospective exists because I had those notes. The diary also becomes raw material for content marketing, which will be transformed to build-in-public posts and articles like this one.

I maintained a clear roadmap in Todoist, so I always knew what to work on next. The problem wasn't planning, it was execution. And I kept my stack deliberately simple: single EC2 instance, FastAPI, PostgreSQL. No Kubernetes, no microservices. Total infrastructure cost: about $50/month. When you have zero users, you don't need to scale, you need to ship.


The Rules for My Next Project

I'm already working on something new with a completely different mindset:

Ship within four weeks. If I can't get something usable in front of real users in a month, the scope is too big.

One core feature only. No "and it also does this." One thing, done exceptionally well.

Ten users before ten features. I need ten real people giving feedback before building feature number two.

Daily work, weekly releases. Code every day, even for thirty minutes. Ship every week, even if changes are small.

Conversations before code. Talk to potential users before building. Understand their problems deeply enough to know if my solution is worth building.

CI/CD on day one. Shipping needs to be effortless from the beginning.


Final Thoughts

ZENLYM works. It's a real product with solid architecture and polished UI. But none of that matters because I never found people who would pay for it. I spent eight months proving I could build a product when I should have spent eight weeks proving anyone wanted it.

The hardest part of building a side project isn't the coding, it's finding the right problem, reaching the right people, and being honest about whether you're making real progress or just staying busy. I spent 80% of my time building and 20% validating. Next time, I'm inverting that ratio.

If you're a developer with a side project, ask yourself: When did someone who isn't a friend last give you feedback? Could you ship what you have today? What's the one feature that would make someone switch from their current solution? Answer honestly, then do something about it.

The solo founder journey is lonely, but it doesn't have to be solitary. I'll be sharing my next project as I build it, including the mistakes I'll inevitably make along the way.