Skip to content

Recap: 2026 internship recruitment, people sections, and automatic year rollover #1

@ds4cabs

Description

@ds4cabs

This issue logs the round of site updates shipped in three commits (now live on main / GitHub Pages). Filing this so the rationale, file layout, and operating instructions are searchable later.

Commits

SHA Title
cb22d18 Add 2026 internship recruitment section
526eedb Scaffold Mentors, Interns, and Leadership people sections
ba1d9a0 Auto-roll program year from year-keyed cohorts data

1. Recruitment section (#join)

New section added between #interns and #projects consolidating the LinkedIn post + Google-Form recruitment material:

  • Three role cards: Mentee → https://lnkd.in/gTCmQJiV, Mentor → https://lnkd.in/gB5psM_r, Leadership → mailto:internship@cabsweb.org.
  • Key-facts strip: program window, application deadline, target cohort size, non-paid / 501(c)(3) / no-CPT.
  • Timeline with four dated milestones (Jan 1 open → May 15 deadline → Jun 15 start → Aug 15 end).
  • Contact strip: internship@cabsweb.org, fundraising@cabsweb.org, shicheng.guo@cabsweb.org.

Nav got an Apply link; footer Explore list got the same. The existing "Summer & Winter Internships" learn-card was repointed at #join (was pointing at the GitHub repo).

Normalizations applied at write time:

  • Source material was inconsistent on 10-week vs 12-week — went with ~10 weeks to match the public program description (Jun 15 – Aug 15 is ~9 weeks).
  • Source had shihcheng.guo@gmail.com (personal) and shicheng.guo@cabsweb.org (org, different spelling) — used the org address on the public page.

2. People sections (Mentors / Interns / Leadership)

Switched the 2026 cohort from project-centric to person-centric cards.

  • New top sections in order: #mentors#interns#leadership (before #join).
  • Cards show: avatar, name, affiliation/major/role, interest/expertise tags, project link (interns only), LinkedIn + GitHub icon links.
  • Headshots load from assets/img/people/<firstname-lastname>.jpg. Convention documented in assets/img/people/README.md.
  • Initials-avatar fallback drawn in CSS using the brand gradient — page stays presentable even with zero headshots uploaded, and survives 404s via an <img onerror> handler.
  • Empty-state CTAs for each people grid double as recruitment buttons ("Become a mentor →", "Apply as mentee →", "Express interest →") so the page is meaningful before any mentor / leadership data is populated.
  • Nav: replaced 2026 Cohort with Mentors + Interns; footer Explore picked up Leadership too.
  • 8 existing intern project entries were expanded to 11 person entries (multi-author projects OpenRepurpose and CausalSentinel were split into individual people). Hero "intern projects" stat now counts distinct projects, not person rows — number is unchanged.

How to populate

Edit assets/js/projects.jscohorts[<year>].mentors / .interns / .leadership. All fields except name are optional; missing fields are skipped in the rendered card.

{
  name: "Jane Doe",
  affiliation: "Stanford University",
  role: "Postdoc, Computational Biology",     // mentors / leadership
  major: "MS, Statistics",                    // interns
  interests: ["single-cell genomics", "RWE"],
  headshot: "assets/img/people/jane-doe.jpg", // optional
  linkedin: "https://www.linkedin.com/in/janedoe",
  github: "https://github.com/janedoe",
  project: { name: "OpenTrial",               // interns only
             url:  "https://github.com/ds4cabs/OpenTrial",
             desc: "Open infrastructure for clinical trial intelligence." },
  org_role: "Operations Co-Lead"              // leadership only
}

3. Automatic year rollover

The "2026" / dates in titles, key facts, timeline, hero stat label, mailto subjects, and recruitment copy used to be hand-edited. Now they are driven by a single year-keyed config in assets/js/projects.js:

cohorts: {
  2026: {
    year: 2026,
    dates: { open, deadline, start, end, window },
    target_size: "20+",
    mentors: [...], interns: [...], leadership: [...]
  }
}

main.js picks the highest year key in cohorts and substitutes three template attributes throughout the static HTML:

Attribute Resolves to
<span data-year>2026</span> cohort.year
<span data-cohort="dates.window">Jun 15 – Aug 15, 2026</span> Dotted-path lookup against the cohort
<a data-tpl-href="mailto:...?subject={year}%20..."> {year} substituted into the href

To roll the site to 2027

Add a 2027: { ... } block in cohorts and ship. All of these flip automatically: section titles, chips, hero CTA, intern-projects stat label, key-facts strip, timeline (Jan 1 / May 15 / Jun 15 / Aug 15 of the new year), mailto subjects, and the three people grids.

Intentional non-features

  • No calendar-based auto-flip on Jan 1. Rolling over requires populating cohorts[year] first — avoids the page advertising a year for which there is no data.
  • No archive of prior years on the live site yet. When 2027 ships, 2026 will disappear from the page (still in git history). A "past cohorts" archive page is a follow-up if wanted.
  • Project descriptions in the all list are not templated. Strings like "(2026 cohort)" describe specific repos and are permanent provenance markers.

SEO / no-JS behavior

Every templated element keeps its literal 2026 (or full date) as fallback text inside the tag. Crawlers and no-JS visitors see a coherent page that reads as 2026; JS upgrades the text in place when it loads.

Files touched

  • index.html — three new sections (#mentors, #interns rebuilt, #leadership, #join), nav + footer links, template attributes.
  • assets/js/projects.js — new cohorts[year] structure with full schema in comments.
  • assets/js/main.jspickCohort(), applyTemplates(), personCard() / avatar() / initials(), inline LinkedIn + GitHub SVGs.
  • assets/css/style.css.person-card, .avatar*, .person-tags, .person-project, .person-link, .empty-cta, plus the recruitment-section pieces (.facts, .cards-join, .role-list, .timeline, .contact-strip).
  • assets/img/people/README.md — headshot naming convention + ImageMagick crop snippet.

Open follow-ups

  • Populate cohorts[2026].mentors once mentor list is collected.
  • Populate cohorts[2026].leadership once the org team is finalized.
  • Fill in affiliation / major / interests / linkedin / github for each of the 11 existing intern entries.
  • Drop headshot JPGs into assets/img/people/ and add the headshot: field for each person.
  • Decide whether the application deadline (May 15, 2026 — already past) should be flagged as "Applications closed" or stay as-published.
  • Optional: add an archive page that surfaces past cohorts[year] blocks once 2027 ships.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions