This repository contains the source code for the personal academic and professional portfolio of B. L. Alterman, a research astrophysicist. The website is built as a static site using Next.js and is hosted on GitHub Pages. It is designed to be a clean, professional, and easily maintainable platform to showcase research, publications, and professional experience.
A key feature of this project is its set of automated data workflows, which use GitHub Actions to periodically fetch and process data, ensuring the content remains up-to-date with minimal manual intervention.
The website relies on a series of GitHub Actions to automate content updates. Here is a breakdown of the key workflows found in the .github/workflows/ directory:
update-ads-publications.yml: Runs on a weekly schedule to fetch the latest publication list from the NASA ADS API using a personal ORCID. It saves the formatted data topublic/data/ads_publications.json.update-ads-metrics.yml: Runs on a weekly schedule to fetch up-to-date citation metrics (like h-index and total citations) from the NASA ADS API. It saves the data topublic/data/ads_metrics.json.update_annual_citations.yml: Runs weekly to fetch year-by-year citation data from NASA ADS. It generates both a data file (public/data/citations_by_year.json) and a plot (public/plots/citations_by_year.svg).convert-pdfs.yml: Triggers on any push to thepublic/paper-figures/pdfs/directory. It automatically converts any new or modified PDF files into SVG format and saves them inpublic/paper-figures/svg/, making them web-ready.update_plots.yml: Triggers automatically after the three ADS data workflows complete. It generates publication, h-index, and citation timeline visualizations using Python scripts and saves both JSON data and SVG/PNG plots to thepublic/directories.
Deployment: The site deploys automatically to GitHub Pages via the Next.js static export configuration (output: 'export' in next.config.ts). GitHub Pages builds and publishes changes whenever commits are pushed to the main branch.
The site is built with Next.js using the App Router, which allows for a statically generated website (output: 'export') that is fast, secure, and ideal for hosting on GitHub Pages. All data used to build the site is consolidated in the /public/data directory, which serves as the single source of truth.
Below is a breakdown of the key data files and their role in the content pipeline.
ads_publications.json:- Origin: Auto-generated weekly by the
update-ads-publications.ymlworkflow. - Purpose: Contains the comprehensive list of all publications from NASA ADS.
- Usage: Consumed by the Publications Page (
src/app/publications/page.tsx) to build the various publication tables. It is also a key input for thegenerate_figure_data.pyscript.
- Origin: Auto-generated weekly by the
ads_metrics.json:- Origin: Auto-generated weekly by the
update-ads-metrics.ymlworkflow. - Purpose: Contains key citation statistics (h-index, total citations, etc.).
- Usage: Consumed by the Publications Page to display the summary metric cards.
- Origin: Auto-generated weekly by the
citations_by_year.json:- Origin: Auto-generated weekly by the
update_annual_citations.ymlworkflow. - Purpose: Contains yearly citation counts.
- Usage: Used by its corresponding script to generate the plot at
public/plots/citations_by_year.svg.
- Origin: Auto-generated weekly by the
research-topics/*.json(per-topic files):- Origin: Manually curated.
- Purpose: Each file defines a research topic with title, description, primary figure reference, related figure references, related topics, and paper citation metadata.
- Usage: Consumed by the Research Pages (
src/app/research/[slug]/page.tsx) to generate topic subpages. Figure references are resolved against the figure registry at build time.
figure-registry.json:- Origin: Generated by
scripts/generate_figure_registry_from_corpus.pyfrom research-corpus metadata. - Purpose: Central registry of all figures with rich metadata (summaries, keywords, usage tracking across topics).
- Usage: Consumed by research topic pages and figure detail pages (
src/app/research/figure/[paper_id]/[figure_id]/page.tsx).
- Origin: Generated by
education.json&positions.json:- Origin: Manually curated.
- Purpose: Contain structured data about academic degrees and professional history.
- Usage: Consumed by the Experience Page (
src/app/experience/page.tsx) to populate the education and professional position cards.
To run the website locally, follow these steps:
-
Install Dependencies:
npm install
-
Run the Development Server:
npm run dev
This will start the Next.js development server, typically on http://localhost:9002.