You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
First, let's handle the news feed like we do the people, publications, and software pages (via spreadsheets).
Second, I'd like to add a bluesky feed (to the news page) for @contextlab.bsky.social that automatically pulls from bluesky to show a themed, scrollable list of the latest posts from the lab account.
August 1, 2025:
Title: Claudia Gonciulea joins the lab! Content: We've managed to recruit superstar-scientist Claudia Gonciulea to our incoming PhD student cohort at Dartmouth!
Link below: [READ CLAUDIA'S BIO]
Thumbnail:
July 1, 2024:
Title: Jeremy gets tenure! Content: Jeremy managed to sneak past the tenure review committee-- they never even noticed he was actually three kittens in a lab coat! He even picked up some awards along the way.
Thumbnail:
January 25, 2022:
Title: We CAREER'd! Content: The CDL was awarded an NSF CAREER Award to map and enhance how students learn, using natural language processing models. We're excited to do some awesome science with our new-found riches!
Activity
jeremymanning commentedon Dec 18, 2025
also add new (brief) news articles (sort so most recent appears at the top):
January 10, 2025:
Title: Why are we so preoccupied by the past? Content: Check out our reflection on our recent paper on prediction and retrodiction in Scientific American; thumbnail:
August 1, 2025:
Title: Claudia Gonciulea joins the lab! Content: We've managed to recruit superstar-scientist Claudia Gonciulea to our incoming PhD student cohort at Dartmouth!
Link below: [READ CLAUDIA'S BIO]
Thumbnail:
July 1, 2024:
Title: Jeremy gets tenure! Content: Jeremy managed to sneak past the tenure review committee-- they never even noticed he was actually three kittens in a lab coat! He even picked up some awards along the way.
Thumbnail:
January 25, 2022:
Title: We CAREER'd! Content: The CDL was awarded an NSF CAREER Award to map and enhance how students learn, using natural language processing models. We're excited to do some awesome science with our new-found riches!
Thumbnail:

jeremymanning commentedon Dec 18, 2025
Implementation Plan for Issue #9: News Feed Updates
Overview
This issue has three main components:
Phase 1: Spreadsheet-Based News Feed
1.1 Create Data Structure
Files to create:
data/news.xlsx- Single sheet with columns:date(YYYY-MM-DD format for sorting)title- News headlinetitle_url- Optional link for the headlinecontent- HTML-safe content (can include links)links_html- Additional links (e.g., "[READ BIO]")image- Thumbnail filenameMigrate existing news items from news.html to spreadsheet
1.2 Create Build Script
File:
scripts/build_news.pybuild_people.pyandbuild_publications.pydata/news.xlsxFunctions:
load_news(xlsx_path)- Load and sort news itemsgenerate_news_item(item)- Generate HTML for single itemgenerate_news_content(items)- Generate full news list HTMLbuild_news(data_path, template_path, output_path)- Main build function1.3 Create Template
File:
templates/news.htmlnews.htmlstructure<!-- NEWS_CONTENT -->marker1.4 Update Build Infrastructure
Files to modify:
scripts/build.py- Add news build to master scriptscripts/validate_data.py- Add news validation.github/workflows/build-content.yml- Add news.html to commit listPhase 2: Bluesky Feed Integration
2.1 Architecture Decision
Client-side approach (recommended for static site):
API Endpoint:
2.2 Implementation
Files to create/modify:
js/bluesky-feed.js- New module for Bluesky integrationfetchBlueskyPosts(handle, limit)- Fetch posts from APIrenderBlueskyPost(post)- Generate HTML for single postinitBlueskyFeed()- Initialize feed on page loadCSS additions to
css/style.css:.bluesky-feed- Container styling.bluesky-post- Individual post styling.bluesky-post-header- Avatar + handle + timestamp.bluesky-post-content- Post text.bluesky-post-embed- Images/links2.3 Template Integration
Modify:
templates/news.htmljs/bluesky-feed.jsscriptPhase 3: Add New News Articles
3.1 Download and Process Thumbnails
The comment provides 4 articles with GitHub-hosted images that need to be:
images/news/New articles:
3.2 Add to Spreadsheet
Add all 4 new articles to
data/news.xlsxwith proper dates for sorting.Execution Plan (Parallel Agent Assignment)
Batch 1 (Can run in parallel):
data/news.xlsxspreadsheet with all existing + new news itemsscripts/build_news.pyfollowing existing patternstemplates/news.htmltemplate fileBatch 2 (After Batch 1):
js/bluesky-feed.js)css/style.cssBatch 3 (After Batch 2):
scripts/build.py,scripts/validate_data.py, and GitHub Actions workflowBatch 4 (Final integration):
Testing Plan
Unit Tests (NO MOCKS - Real Files)
File:
tests/test_build_news.pytest_loads_news_from_real_xlsx()- Load actual news.xlsxtest_news_sorted_by_date()- Verify reverse chronological ordertest_generates_valid_html()- Check HTML structuretest_handles_empty_fields()- Graceful empty handlingtest_handles_special_characters()- HTML entities preservedIntegration Tests (Real Build)
test_build_produces_valid_news_html()- Full build creates valid filetest_news_count_matches_spreadsheet()- All items renderedBluesky Integration Tests (Real API)
File:
tests/test_bluesky_feed.pyVisual Verification
news.htmlin browserFiles to Create/Modify Summary
New Files:
data/news.xlsxscripts/build_news.pytemplates/news.htmljs/bluesky-feed.jstests/test_build_news.pytests/test_bluesky_feed.pyModified Files:
scripts/build.py- Add news buildscripts/validate_data.py- Add news validationcss/style.css- Add Bluesky styles.github/workflows/build-content.yml- Add news.html to commitnews.html- Will be auto-generatedNotes Folder:
notes/issue_9_news_feed.md- Implementation notes and progress trackingCleanup Plan
Before signing off:
.pycor__pycache__artifactsPre-Push Checklist
python scripts/validate_data.py- All validations passpython scripts/build.py- All builds succeedpython -m pytest tests/ -v- All tests passnews.htmllocally - Visual verificationSkills/Tools to Leverage
Existing:
utils.pyfunctions for spreadsheet loadingcitation_utils.pyfor link resolutionbuild_*.pypatterns for template injectionPotentially Create:
Ready for review. Please approve or suggest modifications before implementation begins.
Add spreadsheet-based news feed with Bluesky integration (Issue #9)
jeremymanning commentedon Dec 19, 2025
Completed in PR #11
News Feed Implementation
data/news.xlsxspreadsheet for managing news entries with columns: date, type (news/bluesky), title, description, image, link, bluesky_urlscripts/build_news.pyto generate news.html from the spreadsheettemplates/news.htmltemplate with proper structureBluesky Integration
js/bluesky-feed.jsfor embedding Bluesky posts from @contextlab.bsky.socialcss/style.cssto match the site's green themeHow to Use
data/news.xlsxwith type="news"python scripts/build_news.pyto regenerate news.htmlThe Bluesky feed automatically pulls the latest posts and displays them alongside manual news entries.