Inspiration## Inspiration
News today is noisy — fast, unverified, and scattered across a dozen platforms. I wanted to build something that treats verification as a first-class feature, not an afterthought: a news app where every article is traceable back to a real source, and where you can actually talk to the news instead of just scrolling past it.
404 News started as a broader idea — a multi-agent news aggregator — before I narrowed the scope to AI & Tech news specifically, since it let me prove out the verification and agent pipeline concept with sources I could actually check (arXiv, official blogs, GitHub) rather than fighting licensing walls in a category like sports.
What it does
404 News is an AI-powered news aggregator with two core pieces:
- A real, live-scraped feed. Articles are pulled from real RSS sources (MIT Technology Review, arXiv, and others), stored in Supabase, and shown in a mobile-first feed with status tags (verified / verifying / holding) inspired by a multi-agent verification pipeline: a Scraper agent collects, a Verifier agent checks, and a Presenter agent formats the final story.
- 404 AI — a contextual chat layer. There's a general chat that answers questions grounded in the day's actual scraped articles, and a per-article chat that lets you ask questions about one specific story, with the AI's context locked to just that article's content.
All inference runs through Qwen Cloud (Alibaba Cloud), using the
qwen3.6-flash model via the OpenAI-compatible endpoint, orchestrated through
the qwen-agent framework.
How I built it
- Backend: Python + Flask, using
qwen-agent'sAssistantclass to talk to Qwen Cloud, with a streaming/chatendpoint (Server-Sent Events) so responses type out in real time on the frontend. - Scraping: A small
feedparser-based scraper pulls real articles from RSS feeds on a schedule, and a separate script maps and inserts them into Supabase. - Frontend: React + TypeScript + Vite + Tailwind, with a mobile-first feed,
an article detail modal with its own contextual chat, and
react-markdownso AI responses render as real formatted text instead of raw**/##symbols. - Data: Supabase for articles, chat history, and bookmarks, with Row Level Security policies so the frontend can read safely with a public key while inserts happen server-side with a service key.
Challenges I ran into
Honestly — almost everything that could go wrong at the integration layer did:
- A missing
Responseandjsonimport silently crashed the streaming endpoint with an unhelpful traceback. - Getting DashScope/Qwen Cloud auth right took several rounds: a region
mismatch (Mainland vs. International endpoint), a capitalized
Sin an API key that broke auth silently, and finally a model-name mismatch after upgrading to a paid plan, since the compatible-mode endpoint didn't expose the same model names as the console UI. - The
articlestable didn't actually exist in Supabase for most of the build — every "real" article on the homepage had quietly been fallback placeholder data the whole time, which took real digging through the data layer to catch. - Git tripped me up too — cloning the full
qwen-agentGitHub repo as my backend meant it came with its own nested.gitfolder, which Git treated as an embedded submodule until I stripped it out so the real source files would push properly.
Each of these was a small thing individually, but they stacked — this project is as much a debugging story as a build story.
What I learned
- How a real multi-agent LLM framework (
qwen-agent) is structured under the hood, and how to wire streaming responses from it into a web frontend. - How much of "AI app development" is actually plumbing — auth, regions, CORS, environment variables — rather than prompting.
- The value of verifying assumptions directly (checking Supabase's table editor, testing scripts in isolation) instead of guessing at the next fix.
What's next
- Expand the verification pipeline so it does real cross-source confirmation instead of static tags.
- Add scheduled scraping so the feed refreshes automatically instead of manual runs.
- Bring back the originally planned categories (Sports, Fashion, Finance, Education) now that the core architecture is proven.
Built With
- dashscope
- feedparser
- flask
- python
- qwen-agent
- qwen-cloud
- react
- supabase
- tailwindcss
- typescript
- vite
Log in or sign up for Devpost to join the conversation.