cse-website/docs/publications-implementation-plan.md

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
  • aliases for author matching
  • areaSlugs
  • 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:

  1. Add faculty source IDs: Semantic Scholar author IDs first, DBLP PIDs second.
  2. Decide canonical research area slugs and map each faculty member to them.
  3. Add manual override support for missing/high-priority publications.
  4. Build /research/publications as a React island with filters:
    • text search over title, authors, venue, abstract, keywords
    • person filter
    • research area filter
    • year range
    • venue/type filter
  5. Add a CI/build check that fails if generated publication JSON is malformed.