Design Philosophy and Practical Solutions of "Puoppo," an Automated AI Trend Analysis System Built with RSS × Gemini 2.5 Flash

GitHub Repository: tosane932 / puoppo_app


1. Introduction

An active truck driver in Japan self-studying Python, leveraging logistics domain knowledge to transition into a Web Engineer.

In this article, I share the design philosophy and technical choices behind "Puoppo," an automated AI trend analysis system I built during my 42nd hour of studying Python (with no IT background or prior development experience).

Rather than a gimmick chasing short-lived trends, the system is built on a timeless design philosophy—like a reliable pair of jeans that never wears out—focused on "reliably controlling domain data from the field."


2. Problem Definition and System Overview

Background & Problem

In daily technical trend and news gathering, visiting multiple sources and digesting noisy, long articles became a major bottleneck. I needed a mechanism to consume high-density primary information within a limited timeframe each morning (e.g., the few minutes it takes to cook a Japanese omelet).

The Solution

Simply enter topics you want to know about (e.g., politics, inflation, latest music news) into a text box, and the AI actively collects and structures up to 100 related articles. You can digest everything in a single screen pane just by scrolling.

Key Specifications

  • Performance: Executes the entire pipeline from keyword input to collection and summarization in approximately 10–15 seconds.
  • UI/UX: A simple 1-column UI connecting search to results in a straight line, eliminating user confusion.

Tech Stack

  • Language / Framework: Python 3 / Flask
  • Core Logic: RSS Feed Parsing (Dynamic Endpoint Control)
  • LLM Integration: Gemini API (gemini-2.5-flash)
  • Frontend: HTML / Jinja2 / JavaScript (No FW)
  • Environment: Ubuntu (Lubuntu) / VS Code / .venv

3. Demo

The actual running environment and UI design are available in the demo video below (YouTube: 7m 49s).

Puoppo Demo Video
(Click the image to watch on YouTube)


4. Technical Choices & Trade-offs from a Field Perspective

① The Limits of Scraping & Adopting RSS as "Safe Endpoints"

Initial designs tested direct web scraping from major news sites, but IP blocking and maintenance costs due to layout changes presented major hurdles.

Instead of trying to technically "bypass" blocks, I pivoted to leveraging official RSS feeds provided by publisher media.
This decision stems from practical logistics experience: "Taking a well-maintained, reliable road yields better overall efficiency (speed) than forcing a shortcut." This allowed the immediate setup of a safe and dependable data pipeline.

② Choosing Flask for a 10-Hour Build

The core value of this system is instantaneous data flow: aggregating data from dynamic keywords, passing it to an LLM, and returning results.
Since authentication and ORM were unnecessary for this phase, I chose Flask, a micro-framework that enables rapid routing setup. By stripping away over-engineering, I rolled out the prototype in just one day (~10 hours).

③ Cost & Speed Optimization via Gemini 2.5 Flash

Injecting context from up to 100 article texts in a single request required an LLM model with a vast token capacity, making Gemini an obvious choice.
Furthermore, balancing rapid response times (10–15 seconds) with excellent cost-effectiveness for personal projects led to selecting gemini-2.5-flash, a lightweight model selected as of May 2026.

④ Stripping Away Design & Focusing on a 1-Column UI

Rather than building component architectures using modern JavaScript frameworks (React/Vue), I implemented it with plain HTML/CSS.
By eliminating resource expenditure on complex UI layouts, I prioritized pure utility: "allowing users to absorb accurate information smoothly into their minds without stopping their scroll."


5. 🚀 Setup Instructions (Mac / Linux)

Steps to run locally in a virtual environment (Linux / macOS):

# 1. Clone the repository
git clone [https://github.com/tosane932/puoppo_app.git](https://github.com/tosane932/puoppo_app.git)
cd puoppo_app

# 2. Create and activate virtual environment
python3 -m venv .venv
source .venv/bin/activate

# 3. Install required packages
pip install -r requirements.txt

# 4. Set API Key
export GEMINI_API_KEY="YOUR_API_KEY"

# 5. Run the app
python app.py

Enter fullscreen mode Exit fullscreen mode


6. 🚀 Setup Instructions (Windows)

Steps to run locally on Windows:

# 1. Clone the repository
git clone [https://github.com/tosane932/puoppo_app.git](https://github.com/tosane932/puoppo_app.git)
cd puoppo_app

# 2. Create and activate virtual environment
python -m venv .venv
# [For PowerShell]
.venv\Scripts\Activate.ps1
# [For Command Prompt]
.venv\Scripts\activate.bat

# 3. Install required packages
pip install -r requirements.txt

# 4. Set API Key
# [For PowerShell]
$env:GEMINI_API_KEY="YOUR_API_KEY"
# [For Command Prompt]
set GEMINI_API_KEY=YOUR_API_KEY

# 5. Run the app
python app.py

Enter fullscreen mode Exit fullscreen mode


7. Future Roadmap (Deepening Skills & Proving Capabilities)

While current capabilities satisfy initial requirements and deliver reliable results, I plan a two-stage refactoring process by the end of 2026 to elevate the system into production-ready quality:

① Decoupling Tightly Coupled Architecture

I will organize and decouple the logic currently centralized in Flask (RSS parsing, LLM control, view control), transitioning toward a decoupled layered architecture inspired by Clean Architecture.

② Building Automated Testing Infrastructure

To adapt to changes in external APIs (Gemini) or RSS feed formats, I will introduce unit tests and mock tests using Pytest, creating a robust codebase oriented around Continuous Integration (CI).


8. Conclusion

Through the development of "Puoppo," I reconfirmed the power of minimalism: "simply combining only the necessary components to solve the specific problem in front of you," without getting swayed by over-engineering or trending tech stacks.

Reducing wasted time spent searching for news, and using created resources to decide what to build next—this system reminds me of the true joy of engineering.


GitHub Repository: tosane932 / puoppo_app

Related Articles

https://qiita.com/tosane932/items/974e12e369eda378549b