Skip to content

MPSLab-ASU/MPSLab-ASU.github.io

Repository files navigation

MPS Lab @ ASU β€” Website

The official website for the Make Programming Simple (MPS) Lab at Arizona State University. Built with Astro, React, and Tailwind CSS.

Live Website: https://mpslab-asu.github.io


Tech Stack

Layer Technology
Framework Astro 5 (static output)
UI Components Astro (.astro) + React Islands
Styling Tailwind CSS + SCSS (light/dark themes)
Icons Lucide React
Search Fuse.js (fuzzy search for publications)
Publications BibTeX β†’ bibtex-parse-js
Markdown marked (for FAQ) + Custom rehype-figure-caption plugin

Project Structure

src/
β”œβ”€β”€ components/
β”‚   β”œβ”€β”€ astro/           # Navbar, Footer, MemberGrid
β”‚   └── react/           # PublicationSearch, GalleryGrid, ImageLightbox, ThemeToggle
β”œβ”€β”€ content/             # Astro Content Collections
β”‚   β”œβ”€β”€ members/         # Lab member profiles
β”‚   β”œβ”€β”€ news/            # News & announcements
β”‚   β”œβ”€β”€ research/        # Research area pages
β”‚   β”œβ”€β”€ resources/       # Reading lists per research area
β”‚   β”œβ”€β”€ faq/             # Categorized FAQs (Markdown files)
β”‚   └── gallery/         # Lab event galleries
β”œβ”€β”€ data/
β”‚   β”œβ”€β”€ publications.bib # BibTeX publication database
β”‚   β”œβ”€β”€ software.json    # Scraped software projects
β”‚   └── sponsors.json    # Scraped sponsor data
β”œβ”€β”€ layouts/
β”‚   └── Layout.astro     # Base HTML layout
β”œβ”€β”€ pages/
β”‚   β”œβ”€β”€ index.astro              # Home page (includes Sponsors)
β”‚   β”œβ”€β”€ people.astro             # People directory (tabbed by role)
β”‚   β”œβ”€β”€ publications.astro       # Searchable publications & Software tabs
β”‚   β”œβ”€β”€ gallery/index.astro      # Lab Gallery archive
β”‚   β”œβ”€β”€ gallery/[...slug].astro  # Event-specific photo grids (React Lightbox)
β”‚   β”œβ”€β”€ faq.astro                # Categorized accordion FAQ
β”‚   β”œβ”€β”€ contact.astro            # Contact page
β”‚   β”œβ”€β”€ members/[...slug].astro  # Individual member profiles
β”‚   β”œβ”€β”€ research/index.astro     # Research overview
β”‚   β”œβ”€β”€ research/[...slug].astro # Individual research pages
β”‚   β”œβ”€β”€ teaching.astro           # Teaching homepage (list of courses)
β”‚   └── teaching/                # Individual course pages (e.g. mla.astro)
└── plugins/
    └── rehype-figure-caption.mjs  # Image caption plugin
public/
β”œβ”€β”€ images/              # Member photos, research, gallery assets, sponsor logos
β”œβ”€β”€ assets/              # PDFs, manuals, and syllabi for teaching/software
└── docs/                # Resumes, documents

Prerequisites

  • Node.js v20+ (or Docker)

Local Development

Node.js

npm install
npm run dev

Open http://localhost:4321.

Docker

docker compose up

Open http://localhost:4321. Stop with docker compose down.


Build & Deploy

npm run build    # Type-check + static build β†’ dist/
npm run preview  # Preview the built site locally

The site deploys as a static site to GitHub Pages.


Content Management

Members (src/content/members/)

Each .md file represents a lab member.

---
name: "Jane Doe"
role: "Ph.D."           # Faculty | Ph.D. | Masters | Undergraduate | Postdoc | Alumni | Visiting Student | Visiting Faculty
joinDate: "2023"
image: "/images/members/jane-doe.jpg"
email: "jdoe@asu.edu"          # optional
website: "https://..."         # optional
github: "https://github.com/..." # optional
linkedin: "https://..."        # optional
resume: "/docs/resumes/..."    # optional
researchInterests: ["Topic A", "Topic B"] # optional
isAlumni: false                # optional
currentPosition: "..."        # optional (for alumni)
---

Bio text goes here (markdown supported).

News and Awards (src/content/news/)

Manual Addition

Create a new .md file in src/content/news/.

---
date: "2024"             # Can be a full date (YYYY-MM-DD) or just the year
type: "Publication"      # Award | Publication | Event | Announcement | General
description: "A concise description of the news. Supports **Markdown**."
---

Automated Scraping

Run the scraper to fetch updates from the legacy site:

python scrape_news.py

Research Areas (src/content/research/)

---
title: "Research Area Name"
status: "Active"       # Active | Extended
description: "One-line summary."
image: "/images/research/hero.jpg"  # optional banner
icon: "Cpu"            # Lucide icon name
order: 1               # display order
---

Markdown content. Supports images with captions:

![Alt Text](/images/research/figure.png)
This text becomes a styled caption under the image (no blank line above).

Resources / Reading Lists (src/content/resources/)

---
researchArea: "Intelligent Transportation Systems"  # must match research title exactly
resources:
  - title: "Paper Title"
    type: "Paper"       # Paper | Book | Video | Tutorial | Tool | Publication
    url: "https://..."
    authors: "Authors"
    description: "..."
---

FAQ (src/content/faq/)

FAQs are managed via markdown files in the faq collection.

---
category: "General"      # Group name
icon: "πŸ’‘"               # Category emoji
order: 1                 # Display order
items:
  - question: "How do I X?"
    answer: "Full answer supporting **markdown**."
    externalLink: ""     # Optional direct link
  - question: "Link to service"
    answer: ""
    externalLink: "https://..."
---

Lab Gallery (src/content/gallery/)

Showcases photos from lab events.

---
title: "Lab Social 2024"
description: "Brief summary of the event."
date: 2024-03-20
coverImage: "/images/gallery/lab-social-2024/social_1.png"
images:
  - "/images/gallery/lab-social-2024/social_1.png"
  - "/images/gallery/lab-social-2024/social_2.png"
location: "Tempe, AZ"
---

Optional detailed description of the event.

Teaching Courses (src/pages/teaching/)

Teaching courses are maintained as distinct Astro pages rather than a content collection, to allow completely custom layouts and styling per course syllabus.

To add a new course:

  1. Create a new .astro file inside src/pages/teaching/ (e.g. cse101.astro).
  2. Use the standard layout component: <Layout title="Course Title"> ... </Layout>.
  3. Add the course link to the master list inside src/pages/teaching.astro.
  4. Any course documents (e.g., syllabi PDF files) should be uploaded to public/assets/teaching/ and linked via /assets/teaching/filename.pdf.

Publications (src/data/publications.bib)

Managed in a BibTeX file. Key fields:

  • research β€” Comma-separated tags matching research titles.
  • category β€” Conference, Article, Patent, etc.
  • website / code β€” Optional deep links.
  • url β€” Paper/Slides links. Format: http://link.com/p.pdf, pdf http://link.com/s.ppt, slides.

Software Tab

Powered by src/data/software.json:

{
  "name": "Project Name",
  "url": "https://github.com/...",
  "description": "...",
  "researchGroup": "AI Compilers",
  "image": "/images/software/logo.png"
}

Sponsors (src/data/sponsors.json)

Displayed on the homepage. Scraped using scrape_sponsors.py.

{
  "name": "Agency Name",
  "logo": "/images/sponsors/logo.png",
  "url": "https://..."
}

Theming & UI

  • Light/Dark Mode: Persisted theme switch via ThemeToggle.
  • Interactive Gallery: Immersive lightbox experience powered by ImageLightbox.tsx (React).
  • Markdown Rendering: Answers in FAQ use marked. Research pages use Astro dynamic rendering.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors