← projects
PolitiLens
A political news intelligence dashboard for comparing how outlets across the spectrum frame the same story.

What it is
Problem
Political news is abundant but comparison is expensive. Readers have to find parallel coverage manually, infer editorial positioning, and separate factual overlap from framing differences.
Solution
PolitiLens aggregates coverage from dozens of international outlets, clusters articles about the same event, and presents divergence, sentiment, source health, political-compass placement, and AI-assisted framing analysis with its methodology and limitations kept visible.
What it looks like
Story explorerClustered stories expose source breadth, political lean coverage, sentiment, and divergence before the reader opens a comparison.
Built with
Product
- Next.js 16
- React 19
- TypeScript
- Tailwind CSS
Data
- TanStack Query
- Zustand
- RSS
- GDELT
- Congress.gov
Analysis
- Vercel AI SDK
- OpenRouter
- AFINN
- compromise
Visualization
- Recharts
- react-simple-maps
Highlights
- Story clustering across politically diverse outlets
- Two-axis political compass with regional filtering
- Divergence and sentiment signals with confidence context
- AI-assisted framing comparison and consensus extraction
- Congress, fact-check, source-health, and world-coverage views
- Complete English and Simplified Chinese interface
Engineering
- Process 01
Measure divergence without calling it truth
- Context
- Political framing is multidimensional, and a single bias score can imply certainty the system does not possess.
- Approach
- Compute a documented heuristic from source breadth, spectrum coverage, and region, then show its method and confidence context.
- Outcome
- The signal supports comparison without judging factual correctness, but readers must still inspect the underlying coverage.
- Process 02
Cluster deterministically before invoking AI
- Context
- Letting a model decide which articles belong together would make the core research unit difficult to reproduce or challenge.
- Approach
- Normalize, deduplicate, and similarity-cluster articles first; use AI only to describe framing and consensus inside an established cluster.
- Outcome
- The pipeline stays inspectable and cheaper, while deterministic clustering errors remain visible instead of being hidden by fluent summaries.
Under the hood
Architecture notes
- RSS and API articles normalize into one model before URL deduplication and similarity clustering.
- Divergence is a transparent heuristic based on source breadth, spectrum coverage, and region rather than a claim about truth.
- Expensive news aggregation routes use bounded concurrency, caching, and stale-while-revalidate behavior.
- AI analysis is downstream of deterministic clustering and presents framing differences without assigning factual authority.
Challenges
- Keeping politically sensitive scores explainable enough that users can challenge the method.
- Handling unreliable feeds and uneven source coverage without hiding degraded data.
- Making a dense research interface scan quickly on both desktop and mobile.
Outcome
A deployed v1.1 research product that turns a noisy news stream into a transparent comparison workflow without presenting its heuristics as objective truth.
Roadmap & lessons
Lessons learned
- 01Trust comes from showing how a score was produced, not polishing away its uncertainty.
- 02Dense dashboards need progressive disclosure so methodology remains available without blocking the first scan.
- 03AI is more credible when it describes differences after deterministic grouping instead of deciding the groups itself.
Next steps
- 01Ground framing summaries in cited article excerpts
- 02Improve entity-aware story clustering
- 03Add timeline views for how coverage changes across a news cycle