Content Updates
This site now has a single content sync pipeline so the timeline, stream, personal page, and related generated data stay aligned.
Source of truth
- Posts: add/edit files in
_posts/ - Career, education, projects: edit
_data/career.yml - Publications: edit
publications/index.markdown - Manual social items: edit
_data/stream_manual.yml - Manual photos/media: edit
_data/photos_manual.yml - YouTube videos: fetched into
_data/videos.yml
Do not manually edit these generated files unless you have a very specific reason:
_data/stream.json_data/photos.json_data/timeline.json_data/videos.ymlfor normal YouTube refreshes
Update locally
Fetch external sources and rebuild everything:
python3 scripts/sync_site_data.py
Rebuild only derived files from the current local data:
python3 scripts/sync_site_data.py --skip-fetch
What gets rebuilt
scripts/fetch_stream.pybuilds_data/stream.jsonfrom Medium, local posts, publications metadata, and manual social entries.scripts/fetch_photos.pybuilds_data/photos.jsonfrom Flickr and manual media entries.scripts/fetch_videos.pysyncs YouTube metadata into_data/videos.yml.scripts/build_timeline.pybuilds_data/timeline.jsonfrom career, publications, photos, videos, and stream data.
GitHub Actions
.github/workflows/sync_site_data.ymlruns on a schedule and can be triggered manually. It syncs generated data, validates a Jekyll build, and commits generated files if they changed..github/workflows/build_site.ymlruns on pushes and pull requests. It rebuilds derived data from local sources and checks that the site still builds.
Typical update flow
- Edit the source files you actually own, such as
_posts/,_data/career.yml,publications/index.markdown, or the manual data YAML files. - Run
python3 scripts/sync_site_data.py --skip-fetchif you only changed local source files. - Run
python3 scripts/sync_site_data.pyif you want fresh external data too. - Review the generated diffs, especially
_data/timeline.json. - Commit the source changes and the regenerated data together.