How I vibe-coded my AI news aggregator "News Butler"

π― The WHY
The main goal was to practice vibe-coding using a real example instead of watching a never-ending stream of YouTube videos. Learn by making, so to speak.
The second goal was to create something I would like to use myself. So, in the scenario, if nobody else found it useful, I'd be getting value from it every day.
The third goal was to build a partial foundation for the next project with a real business model. So, I spent some time brainstorming different business ideas that could be close enough to this experimental project to allow for some reusability of the systems/code.
βοΈ The What
I used GenAI tools quite a lot. Chat GPT and Claude were my business consultants. We were bouncing ideas off each other, asking and answering questions, doing research, and pondering.
Eventually, I decided to tackle the problem of negative news.

It seemed like a relatively small and feasible idea. It resonated with me on a personal level. Just the idea to build it made me feel more positive about my contribution to this world π« I have this thing, which often limits the choices I make in life - I want to help people π
This time, I wanted to help people feel better by showing the world is not as bad as they were made to believe by all mainstream sources of information. There were a lot of great things happening around us. My vision for the solution - a daily digest of positive news from science, health, space, and other fields that have a clear benefit for humanity.
πΊοΈ The process

Maaan... where do I start...
These were a few weeks of intense learning. I tried to log my daily progress. A sample of the note.

When I was studying at the university, I used to write HTML & CSS code in a simple notepad. At that time, there were no web standards, and browser support was very inconsistent. It was a constant struggle of fixing bugs in one browser while creating new bugs in other browsers π€¦ββοΈ
I hated it.
My recent learning experience with ChatGPT and Claude reminded me of that time. At times, this was painfully frustrating. Seeing how ChatGPT struggled to fix bugs, attempt after attempt. I kept repeating the same "still broken" message, only to see how it was creating new bugs while failing to fix the previous one.

Eventually, I managed to resolve most issues and hack the system together to run on autopilot.
π The result
A fully hands-off system of a daily AI-assisted news digest on the web and newsletter.
Website (https://newsbutlerapp.com):

Newsletter:

βοΈ What exactly does my News Butler system do?
Once a day at 6 am CET:
- Read the list of RSS feeds from an Airtable table (through the Airtable API)
- Parse each feed's posts
- Send the content of each post to OpenAI (through the OpenAI API)
- Prompt OpenAI to analyze the content to return:
- News title (to make scanning through the list easier)
- Why it's important summary (that's obvious =)
- News summary (to get more details quickly)
- Sentiment (positive vs neutral)
- Source URL (to make
- Filter out only positive sentiment news, limited to 30 posts per day (not to overwhelm with long lists, save cost on API calls, and website loading time)
- Filter out previously shown links (to avoid duplicates)
- Publish on the website
- Generate an RSS feed on the website
- Send out a daily newsletter campaign (using MailerLite)
Of course, there are many more tech features and iterations (eg caching, sentiment analysis, multi-thread parsing, scheduled auto-ping, debugging and various admin-related scripts, etc.)
If you have specific questions about my implementation, feel free to reach out π€
π§° Tech Stack
βοΈ For operation
- Airtable: store the list of source RSS feeds with categories
- OpenAI: process sources, analyze, return summaries, sentiment, etc.
- MailChimp: embedded newsletter sign-up form
- MailerLite: send the daily newsletter
- Render: deploy and host the app
- GitHub: code repository
π§± For creation
- Chat GPT: 1st business & coding consultant
- Claude: 2nd business & coding consultant
- VS Code: coding
- Cline: AI-coding plugin for VS Code
- Sublime Text: coding
- GitHub: version control
- Terminal: local server commands
π° Cost
Total
136.7β¬ (April 25 - 26 June, 2025)
Breakdown
- OpenAI API: $2.7
- Airtable API: 0
- Render: $1.7
- MailerLite: 10.53β¬ / month
- MailChimp: 0
- ChatGPT: 23β¬ / month (ongoing, not project-specific)
- Claude: 21.06β¬ / month (ongoing, not project-specific)
- Domain name: 14.11β¬ / year
- Cline: $5
- Coffee/workspace: ~60β¬
Monthly running cost
~ 17.5β¬ / month
- OpenAI API: ~1β¬
- Render: ~5β¬
- MailerLite: 10.53β¬
- Domain name: ~1β¬
π Learnings
πΎ Version control
An absolute must-have! I started with just copying and pasting code between the code editor and Chat GPT, just in the chat window.
Result: At some point, the code broke and was getting worse and worse with every edit. I lost about 5 days of work (1 work day = ~2 hours of work) because Chat GPT messed up my code, and I had to restart.
It took me a few hours to figure out my workflow to use 2 different computers and not mess up the code.
Tip: Set up GitHub as the very first step. Save every working feature right away. Start a new branch for every small concrete task.
π€ Don't delegate too much
At some point, close to the beginning, I decided to fully embrace vibe-coding and tried using the Cline plugin for VS Code. This plugin is close to a fully autonomous coder.
Result: It quadrupled the number of project files, fragmented many functions (might be the right long-term thing to do), and made me lose track of what was happening in my code.
I decided to slow down the code evolution, but to make sure I still understand what changes are being made in the code. More manual intervention and code iterations, but the feeling of learning was more satisfying than the feeling of "this is magic, but I don't know what it is doing".
Tip: Prioritize learning how it works over faster moving, breaking more things, and staying in the dark. It is more important to understand this.
βΈοΈ If you are stuck, take a break
Quite often, my coding assistant would get stuck, saying it fixed the issue, but the issue would still not be fixed.
Result: growing frustration with every next failed attempt, saying "still broken". This was very irritating.
Tip: If you feel you got stuck in this loop, take a break, go for a walk, or even sleep on it, and come back the next day.
π If Chat GPT gets stuck, try Claude (and vice versa)
I was using Chat GPT most of the time, and occasionally switched to Claude to compare results. I like Chat GPT's UX a bit better, and it is faster (or is it just my perception?).
Result: A few times, I got stuck in the "still broken" loop trying to get Chat GPT to resolve the issues. I think I lost more time than I could. Some issues that Chat GPT struggled with got resolved by Claude with just 2-3 prompts. Weird.
Tip: If you notice one tool gets stuck in the loop, try the other one.
βοΈβπ₯ Break it down into smaller, clear tasks
I was talking with the coding assistants via chat, as if they were a human developer. Like I was having a conversation with them.
Result: It seems like they got lost in multiple sentences and lists with my tasks/requests. Sometimes, I would combine tasks for different files, pages, and functions, hoping they could use that as a backlog of sorts.
Tip: Give them 1 task at a time, the smaller the better.
βοΈ What's next
News Butler is fully functioning on its own. There is a pretty long backlog of things to improve, but I decided to invest my effort into the next project with a real business potential - Pulse Butler π
For the last few weeks, I've been following the same process of using gen AI tools to do market research, brainstorm business and product strategy, and vibe-code the MVP product.
It's already live, btw π I'll share more details soon.
PS I noticed that I am struggling to prioritize time to document the process in more detail, like I intended to π«€ I wanted to record a bunch of walk-through videos for every step and explain what I was doing. However, choosing between launching a startup and recording videos, I have to choose carefully. Trying to figure out how I can make this work...
Till next time, my friends!
No spam, no sharing to third party. Only you and me.
Member discussion