This document provides guidelines for adding and managing content cards across the SEAT-Lab website. Cards are the primary HTML patterns used to display structured information.
For repository setup, local preview, and publishing, see Site_Development.md. For a quick overview, see the README.
- Card Types Overview
- Publications Page
- Projects Page
- Homepage
- CSS Classes Reference
- Adding New Content
- Best Practices
- Troubleshooting
| Card type | CSS class | Location | Notes |
|---|---|---|---|
| Publication (full) | publication-detailed-card |
publications.html |
Authors, venue, keywords, links; abstract optional |
| Publication (homepage) | publication-highlight-card |
index.html |
Compact preview with year badge and pub-tag labels |
| Project (full) | project-card |
projects.html |
Collapsible details, tech-tag labels |
| Project (homepage) | project-preview-card |
index.html |
Short summary; links to projects.html |
| Faculty / group | person-card |
index.html |
Team section; may contain a researcher-list |
| Team member row | researcher-item |
index.html |
Simple name/focus, or expandable bio |
| Collaborator | collaborator-item |
index.html |
Always visible; no expand/collapse |
| Research focus | skill-category |
index.html |
Tag groups under Research |
| About blurb | overview-card |
index.html |
Lab description text |
| Contact blocks | contact-*-card |
index.html |
Primary contact, links, location, hours |
There is no shared generic .card wrapper. Copy an existing card of the same type and edit its content.
Year sections are controlled by publications.js (click handlers, expand/collapse, and counts). Do not add onclick attributes to year headers.
- Find the correct
.year-contentblock (e.g.#year-2026). - Copy an existing
.publication-detailed-cardinside that block. - Update title, authors, venue, keywords, and action links.
Year section structure:
<div id="year-2026" class="year-section">
<div class="year-header">
<h3><i class="fas fa-calendar-alt"></i> 2026 <span class="publication-count">(1 publication)</span></h3>
<i class="fas fa-chevron-down toggle-icon"></i>
</div>
<div class="year-content">
<!-- publication-detailed-card entries here -->
</div>
</div>Publication card template:
<div class="publication-detailed-card">
<div class="publication-content">
<h4>Publication Title</h4>
<div class="publication-authors">
<span class="author">Author One</span>,
<span class="author">Author Two</span> et al.
</div>
<div class="publication-venue">
<i class="fas fa-journal-whills"></i>
Journal or Conference Name, year, pages
</div>
<!-- Optional: include for poster abstracts or when a summary helps -->
<div class="publication-abstract">
<h5><i class="fas fa-file-text"></i> Abstract</h5>
<p>Short abstract text...</p>
</div>
<div class="publication-keywords">
<span class="keyword ml">Machine Learning</span>
<span class="keyword acoustics">Acoustics</span>
<span class="keyword sensors">Sensors</span>
</div>
<div class="publication-actions">
<a href="https://doi.org/..." target="_blank" class="publication-action-btn primary">
<i class="fas fa-external-link-alt"></i> View Paper
</a>
</div>
</div>
</div>Use <i class="fas fa-university"></i> in .publication-venue for symposium or institutional entries instead of the journal icon.
- Add a new
.year-sectionwithid="year-YYYY"at the top of.publications-by-year(newest year first). - Add a matching entry to the floating TOC in the same file:
<li class="toc-item"><a href="#year-2027" class="toc-link"><span>2027</span> <span class="count">(0)</span></a></li>- Place one or more
.publication-detailed-cardentries inside.year-content.
Counts: publications.js recalculates .publication-count in each year header and .count in the TOC on page load. Placeholder counts in HTML are fine; they update automatically. You still need to add a TOC row manually for a brand-new year.
Default expand behavior: Only the current calendar year opens on load. If that year section does not exist, the first year section opens instead.
Keywords use two classes: keyword plus a category slug. The visible label is the tag text, not the slug.
| Slug class | Typical use |
|---|---|
microfluidics |
Lab-on-chip, acoustofluidics |
ml |
Machine learning, neural networks |
healthcare |
Medical, hearing health |
acoustics |
Acoustic analysis, electroacoustics |
sensors |
Sensing, MEMS, transducers |
robotics |
Robotics, automation |
Example: <span class="keyword ml">Deep Neural Networks</span>
Project cards collapse via script.js. Copy an existing .project-card and edit content.
<div class="project-card featured">
<div class="project-collapsible-header">
<div class="project-header">
<h3>Project Title</h3>
</div>
<button class="project-collapse-btn" aria-label="Toggle project details">
<i class="fas fa-chevron-down"></i>
</button>
</div>
<p>Short summary visible when collapsed...</p>
<div class="project-details">
<h4><i class="fas fa-microscope"></i> Research Objectives</h4>
<ul>
<li>Objective 1</li>
</ul>
<h4><i class="fas fa-tools"></i> Methodology</h4>
<ul>
<li>Method 1</li>
</ul>
<!-- Other h4 blocks are fine (e.g. System Features, Publications) -->
</div>
<div class="project-tech">
<span class="tech-tag primary">Main Technology</span>
<span class="tech-tag">Supporting Tag</span>
</div>
</div>- Use
featuredon cards you want highlighted. - Use
primaryon one or two maintech-tagentries. .project-detailsmay include custom<h4>sections and.project-linkswith.project-link-btnwhere needed.
Faculty entries use a full .person-card with name, title, description, and links:
<div class="person-card">
<div class="person-info">
<h3>Faculty Professor</h3>
<p class="person-name">Dr. Name</p>
<p class="person-title">Title, School</p>
<p class="person-description">Bio paragraph...</p>
<div class="person-links">
<a href="mailto:email@purdue.edu" class="person-link">
<i class="fas fa-envelope"></i> Contact
</a>
</div>
</div>
</div>Grouped inside a .person-card → .researcher-list. Use one of two patterns:
Simple entry (name and role only):
<div class="researcher-item">
<p class="person-name">Student Name</p>
<p class="person-focus">MS Student in Engineering Technology</p>
</div>Expandable entry (bio and links):
<div class="researcher-item">
<div class="researcher-header">
<div class="researcher-basic-info">
<p class="person-name">Student Name</p>
<p class="person-focus">MS Student in Engineering Technology</p>
</div>
<button class="researcher-toggle" aria-label="Toggle details" aria-expanded="false">
<i class="fas fa-chevron-down"></i>
</button>
</div>
<div class="researcher-details">
<p class="person-description">Bio paragraph...</p>
<div class="person-links">
<a href="mailto:email@purdue.edu" class="person-link">
<i class="fas fa-envelope"></i> Contact
</a>
</div>
</div>
</div>Toggle behavior is handled by script.js. Only add a .researcher-toggle when there is extra detail worth hiding.
Collaborators are always visible. Do not add a toggle button.
Place entries under the correct .collaborator-category (Purdue vs External):
<div class="collaborator-item">
<div class="collaborator-header">
<div class="collaborator-basic-info">
<h4>Dr. Collaborator Name</h4>
<p class="collaborator-department">Title and Institution</p>
</div>
</div>
<div class="collaborator-details">
<p class="collaborator-focus">Project: Short project description</p>
<div class="collaborator-links">
<a href="https://example.com" target="_blank" class="collaborator-link">
<i class="fas fa-globe"></i> Website
</a>
</div>
</div>
</div><div class="skill-category">
<h3><i class="fas fa-ear-listen"></i> Area Title</h3>
<div class="skill-tags">
<span class="skill-tag primary">Primary Topic</span>
<span class="skill-tag">Related Topic</span>
</div>
</div><div class="project-preview-card">
<div class="project-preview-header">
<h3>Project Title</h3>
</div>
<p class="project-preview-description">One or two sentences...</p>
<div class="project-preview-tech">
<span class="tech-tag">Tag One</span>
<span class="tech-tag">Tag Two</span>
</div>
</div>Add full project write-ups on projects.html; keep previews brief here.
Uses pub-tag (not keyword) for labels:
<div class="publication-highlight-card">
<div class="publication-year-badge">2025</div>
<div class="publication-content">
<h4>Publication Title</h4>
<p class="publication-authors">Author One, Author Two</p>
<p class="publication-venue">Venue or journal</p>
<div class="publication-tags">
<span class="pub-tag">Topic One</span>
<span class="pub-tag">Topic Two</span>
</div>
<div class="publication-links">
<a href="https://doi.org/..." target="_blank" class="publication-link">
<i class="fas fa-external-link-alt"></i> View Paper
</a>
</div>
</div>
</div>When adding a major publication, update both publications.html and, if it should be featured, this homepage section.
Contact uses dedicated card classes (contact-main-card, contact-links-card, contact-location-card, contact-hours-card, contact-collaboration-card). Edit text and links in place rather than copying from other card types.
.year-section,.year-header,.year-content,.toggle-icon,.publication-count.publication-detailed-card,.publication-content,.publication-authors,.author.publication-venue,.publication-abstract,.publication-keywords,.keyword.publication-actions,.publication-action-btn
.project-card,.project-collapsible-header,.project-collapse-btn,.project-details,.project-tech,.tech-tag
.person-card,.person-info,.researcher-list,.researcher-item,.researcher-toggle,.researcher-details.collaborator-category,.collaborator-item,.collaborator-details.skill-category,.skill-tag,.overview-card.project-preview-card,.publication-highlight-card,.pub-tag.contact-main-card,.contact-links-card, and related contact classes
.researcher-item.expanded— open bio on homepage.project-card.expanded/.project-card.collapsed— project detail visibility onprojects.html
- Identify the page and section (see table above).
- Copy an existing card of the same type from that section.
- Replace text, links, and tags.
- For a new publication year, add the year section and a TOC link.
- Preview locally (
python local-support/local_server.py), then commit tomain. - Publish to the live site when ready (
git push origin main:publish— see Site_Development.md).
- Keep titles concise; use standard academic formatting for publications.
- Use
target="_blank"on external links. - Include
aria-labelon toggle buttons. - Bump the
?v=query onstyles.cssin HTML files after CSS changes so browsers load the new styles.
- Copy from live cards instead of using generic templates.
- Match tag conventions:
keyword+ slug on the publications page,pub-tagon homepage highlights,tech-tagon projects. - After editing publications, reload
publications.htmland confirm year counts and expand/collapse behavior.
| Issue | What to check |
|---|---|
| Card layout looks wrong | HTML structure matches a working card of the same type; classes spelled correctly |
| Styles not updating | Hard refresh; bump styles.css?v=... in HTML |
| Live site unchanged | Changes may be on main only — push to publish |
| Year section won't open | publications.js loaded on publications.html; .year-header has no inline onclick |
| Researcher bio won't expand | .researcher-toggle inside .researcher-item; script.js loaded |
| Project won't collapse | .project-collapse-btn present; test on projects.html |
If something still fails, compare against a similar working card in the same file and check the browser console for JavaScript errors.
Last Updated: July 2026
Maintained by: Max Chen