All work

Fig. 01 · Selected work

IDCTE Policy Dashboard

An automated policy-monitoring platform providing 24/7 news surveillance on human rights conditions in north and east Sri Lanka, Indo-Pacific geopolitics, and Tamil electoral politics. Aggregates and classifies articles from GDELT, NewsAPI, and eight regional English- and Tamil-language outlets, then generates structured policy briefing notes on demand. Includes an interactive event map, filterable feed, bookmarking with analyst notes, and machine translation of Tamil-language sources.

  • Next.js
  • TypeScript
  • Supabase

AI-assisted build

The IDCTE Policy Dashboard.

This one runs on its own. A cron job pulls from RSS and GDELT every morning at 9 AM, and everything downstream - geocoding, classifying, translating - happens before anyone opens the dashboard.

What it does

IDCTE tracks policy and human-rights developments across a set of sources. The dashboard polls RSS feeds and GDELT — a global database of news events — pulls out individual reports, geocodes each one to a location, and plots them on an interactive map. A filter panel narrows by event type or region, and reports can be bookmarked for later.

The event map, filtered to a region.
Fig. 1.1 The event map, filtered to a region.

Tamil -> English translation step

A lot of the source material isn't in English. Before a report is stored, it's run through Claude for translation, so the feed reads consistently regardless of where it originated — no separate "translate" button, no half-English half-Tamil event list.

The event feed, with the filter panel open.
Fig. 1.2 The event feed, with the filter panel open.

Briefing notes on demand

The monitoring only matters if someone can act on it, so the dashboard generates policy briefing notes from whatever's in the database. Three modes: everything in a date range, filtered to categories like arrests or land seizures, or a set of events hand-picked from the feed. The generated note is written in formal policy prose, cites each source by name and URL, and can be downloaded as a text file.

Hand-picked mode gets an extra instruction to look for connections between the selected events — geographic clustering, repeated actors, escalating severity — which is the part a chronological feed can't show you on its own. Analyst notes attached to bookmarked events get passed through as context too.

The briefing generator, with the three modes and a date range.
Fig. 1.3 The briefing generator, with the three modes and a date range.

Running itself

A Vercel cron job hits an authenticated polling endpoint daily. The poller is rate-limited, so a burst of new sources can't hammer the geocoder in one pass, and a small admin surface exists to review what came in. Once it's deployed, nobody has to remember to update it.

An event's detail view, with its translated briefing.
Fig. 1.4 An event's detail view, with its translated briefing.