2.3 KiB
2.3 KiB
Publications Implementation Plan
Goal: build /research/publications from generated, normalized data that Astro
can import at build time, then add client-side filtering by text, person, area,
year, and venue.
Data Shape
The ingestion script writes src/data/publications/publications.json:
{
"generatedAt": "2026-06-01T00:00:00.000Z",
"items": [
{
"id": "semantic-scholar-paper-id",
"title": "Paper title",
"year": 2026,
"venue": "Conference or journal",
"type": "conference",
"authors": [{ "name": "Author", "facultyId": "faculty-id" }],
"facultyIds": ["faculty-id"],
"areaSlugs": ["ai", "systems"],
"abstract": "Optional abstract",
"keywords": ["optional"],
"links": {
"doi": "10.xxxx/yyyy",
"pdf": "https://...",
"semanticScholar": "https://...",
"dblp": "https://..."
},
"source": {
"provider": "semantic-scholar",
"externalId": "author-or-paper-id",
"updatedAt": "2026-06-01T00:00:00.000Z"
},
"searchText": "lowercased denormalized text for filtering"
}
]
}
Source Registry
src/data/publications/sources.json holds one row per faculty member with:
- stable
facultyId - display
name aliasesfor author matchingareaSlugs- optional
semanticScholarAuthorId - optional
dblpPid - optional profile URLs
The current registry is intentionally empty of external IDs because the repo did not contain any local source URLs. Once IDs are filled, the script can pull data.
Ingestion Script
scripts/ingest-publications.mjs currently supports Semantic Scholar author
pulls using built-in Node fetch, normalizes the papers, deduplicates by DOI or
title, and writes Astro-importable JSON.
Immediate next steps:
- Add faculty source IDs: Semantic Scholar author IDs first, DBLP PIDs second.
- Decide canonical research area slugs and map each faculty member to them.
- Add manual override support for missing/high-priority publications.
- Build
/research/publicationsas a React island with filters:- text search over title, authors, venue, abstract, keywords
- person filter
- research area filter
- year range
- venue/type filter
- Add a CI/build check that fails if generated publication JSON is malformed.