Skip to main content

Code

Tools I built to run the research — a literature pipeline, experiment automation, and lab utilities.

The tool ecosystem around paper-organizer Feed side: journal e-mail alerts reach get-ASAP (85+ journals), which logs every paper to a SQLite paper DB serving the public get-ASAP dashboard; paper-autodown triages by title and downloads; papers land in Zotero, the corpus, and are auto-indexed into a LightRAG knowledge graph that grows nightly. Center: paper-organizer, the argument graph — thin gray edges are citations, colored edges are ratified arguments (supports, disputes, extends), every one approved by hand and quote-verified; it picks what paper-autodown fetches next. Query side: AI sessions ask research-MCP, which joins both graphs plus the ai-memories archive it reads, returning grounded answers with citations attached. All agent activity is archived into ai-memories, the cross-cutting memory layer underneath. Experiment data: data acquisition feeds lat-pipeline, instruments feed gc-analysis, both write to Notion — which ai-memories reads as well. Journal e-mail alerts get-ASAP watches 85+ journals paper-autodown triage by title · download SQLite paper DB get-ASAP Dashboard public web app Zotero the corpus knowledge graph (LightRAG) auto-indexed · grows nightly picks what’s next paper-organizer the argument graph — claims, evidence, attacks every link approved by hand · quote-verified thin gray = citations · colored = ratified arguments (84% of citations turn out not to be arguments) AI sessions > any question agent activity archived research-MCP both graphs + memory grounded answer [Zhou 2019] [Kim 2024] ai-memories cross-cutting memory layer — archives every research conversation Data acquisition Instruments lat-pipeline gc-analysis Notion

Literature → Knowledge

One workflow, four tools: a topic starts from a few core papers. paper-organizer maps the citations they span, picks what to read next, and ratifies what each paper actually argues — every link checked by hand. paper-autodown triages the daily feed get-ASAP catches and downloads both; research-MCP answers from the result, citations attached. ai-memories archives every conversation underneath.

get-ASAP

Featured

Literature radar tracking 85+ journals across 7 publishers, from Gmail alert to public dashboard.

  • Python
  • Gmail API
  • SQLite
  • Notion API
get-ASAP — literature radar to public dashboard Left: a radar of concentric rings sweeps across 85+ tracked journals from 7 publishers; a teal arrow carries a detected signal to the alerts box. Right: the catch flows down a chain — Gmail new-issue alerts, parsed and filed by a cron job, into a SQLite paper database that is the system of record. From the database, a public dashboard renders keyword trends, journal breakdowns, and a searchable archive. A short branch off the database feeds a Notion view, set apart to the side, where relevance calls are reviewed by hand — a review UI, not the main store. LITERATURE RADAR COLLECT & PUBLISH 85+ journals · 7 publishers sweep = matched this cycle Journal e-mail alerts parse & file — cron SQLite paper DB main public dashboard keyword trends · journal breakdowns searchable archive relevance review — Notion view Notion = review UI, not the record

get-ASAP watches Gmail for new-issue alerts from 85+ journals across seven publishers, extracts each paper’s title and link, and files it into a SQLite paper DB so nothing gets lost in an inbox — with a Notion view on top where relevance calls are reviewed by hand. A companion analytics dashboard turns the collected metadata into keyword trends, journal breakdowns, and a searchable archive. It’s now a public platform with hundreds of cumulative users — at KIST and universities beyond — tracking literature in their field.

paper-autodown

LLM triage for new papers — the relevant ones auto-download, file into Zotero, and grow a knowledge graph.

  • Python
  • Codex CLI
  • Zotero
  • LightRAG
Private repository
paper-autodown — two intakes, one triage funnel Two streams enter a funnel: get-ASAP's daily catch and paper-organizer's citation-map requests. Inside the funnel, grey dots rain toward a triage box where an LLM judges each title, criteria refined over months of user corrections. What passes continues down as kept; what fails is filtered out to the side. The kept path downloads through institutional subscriptions and publisher APIs, verifies each PDF, and files into Zotero and a LightRAG knowledge graph that extracts entities and relations from every chunk — growing nightly. DAILY CATCH CITATION-MAP REQUESTS get-ASAP paper-organizer LLM triage — by title criteria refined by user corrections kept filtered out download subscriptions & publisher APIs verify PDF Zotero + knowledge graph (LightRAG) entities & relations from every chunk grows nightly

paper-autodown does the fetching. An LLM judges relevance from titles as get-ASAP’s daily catch comes in — criteria refined over months of user corrections — and what passes downloads automatically through the institution’s journal subscriptions and publisher APIs; it also fetches what paper-organizer’s citation map calls for. Everything registers in Zotero and is ingested into a graph-structured RAG (LightRAG), where an LLM extracts entities and relations from every chunk: a knowledge graph of 72,445 nodes, growing nightly.

paper-organizer

Featured

Distills the literature into a human-ratified argument graph — claims, evidence, attacks.

  • Python
  • Codex CLI
  • Zotero
  • OpenAlex
Private repositoryLive site
paper-organizer — collect along citations, ratify the arguments Left half: a topic starts from a few core papers seeding a citation network that expands ring by ring; solid nodes are collected, dashed are up next; the citation map is built from OpenAlex and Crossref and grows daily. paper-autodown does the fetching, get-ASAP the alerts. Right half: the argument graph — claims linked across papers as supports (green), disputes (terracotta), extends (dashed); every link approved by hand and verified against the quoted source text. On top: conflict maps and a research-gap report. COLLECT ALONG CITATIONS RATIFY THE ARGUMENTS a topic — a few core papers every link approved by hand · quote-verified solid = collected · dashed = up next supports disputes extends citation map — who cites whom OpenAlex · Crossref · grows daily argument graph — ratified claims linked across papers fetching by paper-autodown · alerts by get-ASAP on top: conflict maps · research-gap report

paper-organizer exists because of an uncomfortable measurement: in this corpus, 84% of citations turn out not to be arguments at all — background, courtesy, context. An argument layer can’t be auto-extracted; it has to be ratified. An LLM extracts each paper’s claims and links them across papers — support, dispute, method reuse — but every extraction and every link passes a user approval gate, verified against the quoted source text: 1,278 citation-verified links across 311 papers so far. It also owns the collecting: a ~41,000-node citation map (OpenAlex, Crossref) spans the corpus, and a daily front-watch flags where arguments clash and the corpus is thin — those papers become paper-autodown’s next downloads. On top sit conflict maps of attacked and defended claims and a top-10 report of untouched research gaps. The live site is the public face of the output: an interactive argument map from the ongoing plasmonics study — a lite build showing the ratified claim network and its support/attack structure, with claim text held back while the work is unpublished.

research-MCP

One local MCP server over both graphs — every answer traced back to real citations.

  • Python
  • MCP
  • LightRAG
  • Zotero
Private repository
research-MCP — dual-resolution graphs to a cited answer Left: two graph layers plus a notes archive feed one server, each along its own path into a distinct point on the server's left edge. The upper, sparser layer is the human-ratified argument graph — precision. The lower, denser layer is the auto-extracted LightRAG knowledge graph — recall. A research-notes box sits below both. All three flow into the research-MCP server, which MCP clients like Claude and Codex call into from above. A fourth source, full Zotero records, feeds the server from the lower right. The server cross-checks verdicts with citations and returns an answer whose citations carry the full record — author, year, journal, DOI. DUAL-RESOLUTION SOURCES ANSWER + VERIFY human-ratified argument graph — precision auto-extracted knowledge graph — recall research notes Claude / Codex — MCP clients research-MCP server cross-check: verdicts with citations answer + citations Zotero records author · year · journal · DOI recall = LightRAG KG · precision = ratified argument graph

research-MCP is where the two layers meet — in effect, a dual-resolution GraphRAG. Underneath, the auto-extracted LightRAG knowledge graph (recall-oriented, 72k+ nodes); on top, paper-organizer’s human-ratified argument graph (precision-oriented); alongside, a personal research-notes archive — all behind one MCP server and a local web chat. A cross-check tool evaluates a claim against the literature and the notes together, returning a structured verdict with citations traced back to full Zotero records — author, year, journal, DOI. Argument-graph tools answer where the literature disagrees and which gaps nobody has touched. Built so every answer can be verified rather than taken on faith.

ai-memories

Archives every AI research conversation — across tools — into a searchable, deduplicated, MCP-queryable memory store.

  • Python
  • SQLite (FTS5)
  • MCP
  • Cloudflare Pages
Private repository
ai-memories — overlapping exports to one deduped archive Three staggered conversation exports — ChatGPT, Claude, Notion — flow into a hash-chain ingest step, drawn as three linked squares, that dedupes them into a single stream and preserves edit history rather than overwriting it; captions describing the ingest sit beside the motif, clear of the arrow below. The result lands in a SQLite FTS5 archive, which branches into two equal-width flows: an MCP server for recall in any session, and a daily off-site backup. AI CONVERSATIONS, DEDUPED ChatGPT Claude Notion ingest — hash-chain dedup edit history preserved, not overwritten SQLite FTS5 archive MCP server — recall in any session daily off-site backup

ai-memories automatically collects research conversations from multiple AI tools, de-duplicates overlapping exports, and preserves edit history rather than overwriting it. Everything is indexed for full-text search and exposed through an MCP server, so any AI session can recall past discussions instead of starting from scratch. A topic dashboard and daily off-site backup round out the system.

Experiment Data

The automation that keeps the data side of the photothermal ammonia decomposition reactor work moving — raw files in, condition tables and rate plots out, no manual spreadsheet work.

lat-pipeline

Automated collection, classification, and analysis of lab experiment data, from data acquisition to Notion.

  • Python
  • pandas
  • matplotlib
  • Notion API
Private repository
lat-pipeline — from raw experiment files to Notion, automatically Left: a data-acquisition folder of experiment CSVs is watched every 15 minutes; grey squares are raw files, terracotta squares are non-experimental noise that gets filtered out. Middle: kept files are grouped into runs, then cross-referenced against the lab notebook in Notion by title match. Right: a stability plot — grey raw trace, teal kept signal, stability window bracketed in teal — feeds condition tables and time-series plots, which are written back to Notion. COLLECT & GROUP STABILITY & PUBLISH raw CSVs · grouped into runs kept signal · stable windows data-acquisition folder experiment CSVs watched every 15 min group runs cross-ref lab notebook Notion · title match condition tables stability-window averages time-series plots write back to Notion file · kept filtered out · noise no manual spreadsheet work

lat-pipeline watches a synced data-acquisition folder for new photothermal-catalysis experiment files, automatically groups files that belong to the same run, and filters out non-experimental noise. It cross-references each run against the lab’s Notion notebook, then generates condition tables, stability-window averages, and time-series plots without manual spreadsheet work, writing results straight back to Notion.

gc-analysis

Converts raw gas chromatography output into conversion and reaction rates automatically.

  • Python
  • pandas
  • openpyxl
gc-analysis — from raw chromatogram trace to rate plots Left: a raw GC chromatogram trace read from xlsx output, grey and jagged. Middle: each point is converted, stable segments where coefficient of variation stays under 3% are bracketed in teal, and conversion and hydrogen production rate are computed per condition. Right: a formatted spreadsheet with per-condition summaries and rate plots, ready for lab reports. CONVERSION & STABILITY SUMMARY OUTPUT raw GC output xlsx conversion per point stable segments CV < 3% conversion & H₂ rate per condition formatted spreadsheet + rate plots per-condition summaries ready for lab reports raw signal stable · CV < 3%

gc-analysis reads the raw spreadsheet output from GC instruments, groups measurements into stable experimental conditions, and calculates conversion rate and hydrogen production rate for each one — work that used to be done by hand for every run. It outputs a formatted spreadsheet with per-condition summaries and rate plots, ready to drop into a lab report.

Lab Utilities

A small utility that solves one problem well — deployed as a public PWA and used by around 30 researchers at KIST.

sec-timer

A second-precision lab timer PWA with cross-platform calendar reminders.

  • JavaScript
  • Service Worker
  • Cloudflare Pages
Private repository
sec-timer — a second-precision lab timer with cross-platform calendar reminders Left: a countdown ring, teal arc for elapsed progress against a grey remaining arc, ticking every second as a PWA. On expiry it forks two ways: up, an alert of sound, vibration, and notification; down, a calendar reminder that runs through platform detection and routes to iOS calendar-app launch, Android Google Calendar, or a desktop ICS download. Used by around 30 researchers at KIST. COUNTDOWN ON EXPIRY second-precision timer PWA · 1s tick alert sound · vibrate · notify calendar reminder platform detect iOS calendar app launch Android Google Calendar desktop ICS download used by ~30 researchers at KIST

sec-timer is a web-based countdown timer built for lab work where experiments need to be timed to the second. Its main engineering challenge was calendar integration: iOS, Android, and desktop each handle calendar events differently, so the app detects the platform and routes to whichever approach actually works there — direct calendar-app launch, Google Calendar, or an ICS download. Deployed as a PWA, it’s used by around 30 researchers at KIST.