Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
2cd720e
feat: establish initial MPS Lab website infrastructure including Astr…
kaustubhharapanahalli Feb 21, 2026
9abd9c0
feat: Integrate related publications display on research pages with a…
kaustubhharapanahalli Feb 21, 2026
361a8d3
refactor: Rename publication metadata fields from `keywords` to `rese…
kaustubhharapanahalli Feb 21, 2026
7549bdc
docs: Update Hwisoo So's member status to Alumni and revise lab conta…
kaustubhharapanahalli Feb 21, 2026
d312c21
feat: Introduce dynamic member profile pages and add multiple new mem…
kaustubhharapanahalli Feb 21, 2026
fcf6733
feat: Display associated researchers on research pages by enhancing M…
kaustubhharapanahalli Feb 21, 2026
fa59c9a
feat: Add member resumes and a Python script to automate member data …
kaustubhharapanahalli Feb 21, 2026
fb9b3dc
feat: implement tabbed navigation for the people page, add new member…
kaustubhharapanahalli Feb 21, 2026
7ef3d4c
feat: Categorize alumni by type on the people page.
kaustubhharapanahalli Feb 21, 2026
ceec68a
feat: Implement automatic figure captioning via a rehype plugin, enha…
kaustubhharapanahalli Feb 21, 2026
d34eb2a
feat: Add research interests for Vinayak Sharma.
kaustubhharapanahalli Feb 21, 2026
f835596
feat: Add curated reading lists for research areas with dedicated pag…
kaustubhharapanahalli Feb 21, 2026
7d6db0c
docs: Expand README with detailed project structure, tech stack, cont…
kaustubhharapanahalli Feb 22, 2026
13d9db9
feat: Add extensive news content, a dedicated news awards page, and s…
kaustubhharapanahalli Feb 22, 2026
615db47
feat: Refactor the news page to group updates by year.
kaustubhharapanahalli Feb 22, 2026
e55508f
style: Add dark mode compatibility and refine borders for member imag…
kaustubhharapanahalli Feb 22, 2026
61cab72
feat: Introduce a website field for publications, displayed on cards …
kaustubhharapanahalli Feb 22, 2026
711c62e
docs: Update publications section in README to include new BibTeX fie…
kaustubhharapanahalli Feb 22, 2026
7a857c0
docs: Update news and awards documentation with manual and automated …
kaustubhharapanahalli Feb 22, 2026
eb2f847
feat: add 'code' field and button to publication cards with updated d…
kaustubhharapanahalli Feb 22, 2026
fbb761c
feat: Introduce a software projects section with dedicated data, disp…
kaustubhharapanahalli Feb 22, 2026
8ea0231
feat: Add multiple new research project pages and their associated im…
kaustubhharapanahalli Feb 22, 2026
25a8ba8
docs: Update available Lucide icons, document the new "Software" tab …
kaustubhharapanahalli Feb 22, 2026
c629cfd
feat: Add a new sponsors section to the homepage, including sponsor d…
kaustubhharapanahalli Feb 22, 2026
c1c623e
feat: Add a new FAQ section with categorized content and a navigation…
kaustubhharapanahalli Feb 22, 2026
5880ddb
feat: Implement a new image gallery with dynamic pages, content colle…
kaustubhharapanahalli Feb 22, 2026
cef5cf8
feat: Add new quick links and update the layout of the quick links se…
kaustubhharapanahalli Feb 22, 2026
1c12b7d
feat: Update gallery with DAC 2025 content, remove outdated galleries…
kaustubhharapanahalli Feb 22, 2026
6935467
feat: update member profiles, introduce new members, and refine alumn…
kaustubhharapanahalli Feb 22, 2026
9166608
feat: Add new alumni member profiles and images.
kaustubhharapanahalli Feb 22, 2026
4d30678
refactor: Update news elements
kaustubhharapanahalli Feb 22, 2026
b801a4e
refactor: Update news elements
kaustubhharapanahalli Feb 22, 2026
c51c04e
refactor: Update news elements.
kaustubhharapanahalli Feb 22, 2026
eb97083
feat: Expand AI Compilers and Quantum ML research pages with detailed…
kaustubhharapanahalli Feb 22, 2026
0ac8555
feat: Introduce new teaching pages and software manuals, refactor int…
kaustubhharapanahalli Feb 22, 2026
e79ae8c
feat: add teaching page and reorder navigation links in footer and na…
kaustubhharapanahalli Feb 22, 2026
f610fe6
feat: Introduce and document the teaching courses section, updating t…
kaustubhharapanahalli Feb 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
56 changes: 56 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Local node_modules
node_modules/
.npm/

# Build outputs
dist/
.output/
.vercel/
.netlify/
.worker/
public/build/

# Astro dev/build outputs
.astro/
server.log
server_new.pid

# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

# OS/Editor
.DS_Store
.AppleDouble
.LSOverride
Icon
._*
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent

# IDEs
.idea/
.vscode/

# Environment variables
.env
.env.*
!.env.example

# Temporary files
tmp/
temp/

*scrape*

venv/
156 changes: 156 additions & 0 deletions MPS Lab Astro Pipeline Design.md

Large diffs are not rendered by default.

267 changes: 264 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,265 @@
Making Programming Simple Lab:
https://labs.engineering.asu.edu/mps-lab/
# MPS Lab @ ASU — Website

MPS Lab Publications: https://labs.engineering.asu.edu/mps-lab/publications/
The official website for the **Make Programming Simple (MPS) Lab** at Arizona State University. Built with [Astro](https://astro.build/), [React](https://react.dev/), and [Tailwind CSS](https://tailwindcss.com/).

**Live Website:** [https://mpslab-asu.github.io](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

```bash
npm install
npm run dev
```

Open [http://localhost:4321](http://localhost:4321).

### Docker

```bash
docker compose up
```

Open [http://localhost:4321](http://localhost:4321). Stop with `docker compose down`.

---

## Build & Deploy

```bash
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.

```yaml
---
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/`.

```yaml
---
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:
```bash
python scrape_news.py
```

### Research Areas (`src/content/research/`)

```yaml
---
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/`)

```yaml
---
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.

```yaml
---
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.

```yaml
---
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`:
```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`.
```json
{
"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.
27 changes: 27 additions & 0 deletions astro.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import react from '@astrojs/react';
import tailwind from '@astrojs/tailwind';
import { defineConfig } from 'astro/config';
import rehypeFigureCaption from './src/plugins/rehype-figure-caption.mjs';

export default defineConfig({
output: 'static',
site: 'https://MPSLab-ASU.github.io',
markdown: {
rehypePlugins: [rehypeFigureCaption],
},
integrations: [
react(),
tailwind({
applyBaseStyles: false,
}),
],
vite: {
css: {
preprocessorOptions: {
scss: {
api: 'modern-compiler',
},
},
},
},
});
10 changes: 10 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
services:
astro:
image: node:20-alpine
working_dir: /app
volumes:
- .:/app
- /app/node_modules
ports:
- "4321:4321"
command: sh -c "npm install && npm run dev -- --host 0.0.0.0"
Loading