Skip to main content

ISNA

International Student News Alliance — AI-curated policy updates

LangGraphNext.jsSupabaseReAct
shipped

Portfolio Project

ISNA

International Student News Alliance

An AI-powered news aggregation platform built for F-1 visa holders. A fully automated agentic pipeline crawls, evaluates, and curates immigration, education, and policy news — surfacing only what matters.

Next.js 14LangChainLangGraphPythonSupabaseTailwind CSSReAct
ISNA homepage

Overview

Architecture

Agentic Pipeline

The backend is a LangGraph state machine — a directed graph of agent nodes where data flows from raw RSS feeds through AI reasoning to a curated database.

1

RSS Ingestion

LangChain document loaders pull articles from curated RSS feeds on a scheduled interval. Raw text and metadata are extracted and normalized.

2

ReAct Agent — Reasoning Loop

A LangGraph ReAct agent iterates over each article, reasoning about F-1 relevance and calling scoring/tagging tools.

3

Relevancy Gate

The agent assigns a relevancy score (0–100). Articles below the threshold are pruned via a LangGraph conditional edge.

4

Enrichment — Tagging & Summarization

Passing articles are enriched: summaries, topic tags (visa, OPT, CPT, housing, finance), and representative images.

5

Supabase Storage

Enriched articles are written to a Supabase Postgres table. The Next.js frontend reads from this table via server actions.

6

Next.js Frontend

A React/Next.js 14 app renders the curated news feed with animated cards, tag filtering, and a detail modal.

LangGraph state machine diagram

Tech Stack at a Glance

Agent OrchestrationLangGraph + LangChain
Agent PatternReAct (Reason + Act)
Gate MechanismRelevancy Score State Condition
Data StoreSupabase (PostgreSQL)
FrontendNext.js 14, Tailwind CSS
AnimationFramer Motion

Features

ISNA combines agentic AI engineering with a polished consumer interface. The heavy lifting happens in the Python backend — the Next.js frontend simply displays what the agent decided was worth reading.

🤖

Automated RSS Crawling

LangChain document loaders fetch and parse multiple RSS news feeds on a schedule. No manual curation — the pipeline runs autonomously.

LangChainRSS
🧠

ReAct Agent Reasoning

Each article passes through a ReAct loop. The agent thinks step-by-step about relevance before calling tools to score, tag, or discard.

ReActLangGraph
🚦

Relevancy Score Gate

The agent scores each article 0–100 for F-1 relevance. Low-scoring articles are routed to a discard branch, never reaching storage.

LangGraphGate State
🏷️

Auto-Tagging

Articles that pass the gate are tagged: Visa, OPT, CPT, Immigration, Finance, Education, Housing. Tags drive filtering on the frontend.

LangChainClassification
📰

Curated News Feed

A responsive card grid with animated hover states, article summaries, source links, and an expandable detail modal.

Next.jsFramer Motion
📅

Immigration Timeline

A chronological timeline of key events — H-1B registration windows, OPT deadlines, policy changes.

Next.jsSupabase

Demo

Screenshots of the live application and agentic pipeline traces.

isna-app.vercel.app
News Feed

Curated articles displayed in a responsive card grid. Each card shows a summary, auto-generated tags, and links to the original source.

Under the Hood

LangGraph State Machine — Relevancy Gate

RSS Feeds
   │
   ▼
┌──────────────────────┐
│  Fetch & Parse Node  │  ← LangChain RSS loader
└──────────┬───────────┘
           │
           ▼
┌──────────────────────┐
│   ReAct Agent Node   │  ← Reason: "Is this F-1 relevant?"
│   (LangGraph node)   │    Act:    call scoring tool
└──────────┬───────────┘
           │
           ▼  score ∈ [0, 100]
   ┌───────┴────────┐
   │  GATE STATE    │  ← LangGraph conditional edge
   └──┬──────────┬──┘
      │ ≥ 70     │ < 70
      ▼          ▼
  Enrich      Discard
  & Tag       (pruned)
      │
      ▼
  Supabase → Next.js Frontend

Conclusion

ISNA demonstrates how agentic engineering can replace brittle rule-based pipelines. Instead of hand-crafting filters, the system delegates curation decisions to a reasoning agent — making the pipeline more adaptable to changing news landscapes without code changes.

The relevancy gate pattern — scoring content and branching on that score as a LangGraph state condition — is a reusable pattern for any content-filtering pipeline.

LangGraph

Orchestrated the agentic pipeline as a typed state machine. Conditional edges implement gate logic.

LangChain

Provided document loaders for RSS ingestion, LLM chain wrappers, and tool definitions for the ReAct loop.

ReAct Pattern

The agent alternates between Reasoning (chain-of-thought) and Acting (tool calls) — producing transparent, auditable decisions.

Agentic Engineering

Designed around autonomous agent decisions rather than deterministic rules. The agent adapts based on article content.

Next.js 14

App Router with React Server Components. Server actions fetch from Supabase with no additional API layer.

Supabase

Postgres database as the integration layer between Python backend and Next.js frontend.