Wisconsin Privacy and Security Group website built with Astro.
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build
# Preview production build
npm run previewThe dev server runs at http://localhost:4321/
src/
βββ components/ # Reusable Astro components
β βββ Navbar.astro
β βββ Footer.astro
βββ content/ # Content collections (Markdown files)
β βββ config.ts # Schema definitions
β βββ publications/ # Publication entries
β βββ news/ # News entries
β βββ projects/ # Project/artifact entries
βββ layouts/
β βββ BaseLayout.astro # Main page layout
βββ pages/ # Route pages
β βββ index.astro # Home page
β βββ students.astro # People page
β βββ news.astro # News page
β βββ publications.astro
β βββ slides.astro # Artifacts page
βββ styles/
βββ global.css # All styles
public/
βββ images/ # All site images
β βββ hero-1.svg # Hero slideshow images
β βββ hero-2.svg
β βββ research-*.svg # Research area images
β βββ person-placeholder.svg
β βββ people/ # Person photos (add here)
βββ pdfs/ # Publication PDFs
βββ slides/ # Presentation slides
- Create a new
.mdfile insrc/content/publications/ - Use this template:
---
title: 'Your Publication Title'
authors: 'Author One, Author Two'
type: 'Conference' # Options: Conference, Journal, Dissertation, Patent, arXiv
year: 2024
venue: 'Conference/Journal Name'
pdfUrl: '/pdfs/your-paper.pdf' # Optional - put PDF in public/pdfs/
link: 'https://example.com/paper' # Optional - makes title clickable
bibtex: | # Optional - custom BibTeX entry (use | for multiline)
@inproceedings{author2024title,
author = {Author One and Author Two},
title = {Your Publication Title},
booktitle = {Conference/Journal Name},
year = {2024}
}
focus: ['systems', 'ai'] # Options: systems, people, math, ai
---
Abstract text goes here. This will be displayed as the publication description.Notes:
- Publications are automatically sorted by year in descending order (latest first)
- If
linkis provided, the title becomes a clickable link that opens in a new tab - If
bibtexis provided, it will be used when clicking the "BibTeX" button. Otherwise, a BibTeX entry will be auto-generated from the publication metadata - Use
|(YAML literal block scalar) for multiline bibtex entries to preserve line breaks
Focus options explained:
systems- "In Systems" - OS, platforms, large-scale systemspeople- "For People" - Human-centered security/privacymath- "Using Math" - Formal methods, cryptography, statisticsai- "For/Using AI" - AI privacy implications or AI-powered tools
- Create a new
.mdfile insrc/content/news/ - Use this template:
---
date: 'Jan 2025' # Format: Mon YYYY
title: 'News Headline Here'
source: 'Source Name' # Optional
link: 'https://example.com/article' # Optional
---
Brief summary or description of the news item.News items are automatically grouped by year on the News page.
- Create a new
.mdfile insrc/content/projects/ - Use this template:
---
title: 'Project Title'
authors: 'Author One, Author Two'
year: 2024
venue: 'Conference/Journal'
slidesUrl: '/slides/project-slides.pdf' # Optional - put in public/slides/
githubUrl: 'https://github.com/org/repo' # Optional
huggingFaceUrl: 'https://huggingface.co/org/model' # Optional
link: 'https://example.com/project' # Optional - makes title clickable
focus: ['ai', 'people'] # Same options as publications
---
Project description goes here.Notes:
- Artifacts are automatically sorted by year in descending order (latest first)
- If
linkis provided, the title becomes a clickable link that opens in a new tab
People are defined directly in src/pages/students.astro.
Edit the peopleData object:
const peopleData = {
faculty: [
{
name: 'Person Name',
link: 'https://personal-website.com/',
img: 'https://example.com/photo.jpg'
},
// Add more faculty/students...
],
alumni: [
{
name: 'Alumni Name',
link: 'https://linkedin.com/in/alumni',
img: 'https://example.com/photo.jpg'
},
// Add more alumni...
]
};Image tips:
- Use square images (1:1 ratio) for best results
- Recommended size: 200x200px or larger
- Place images in
public/images/people/and reference as/images/people/name.jpg - Currently using
person-placeholder.svg- replace with actual photos
Home page content is in src/pages/index.astro. Edit the homeData object:
const homeData = {
heroTitle: "Your Title Here",
heroSubtitle: "Your description...",
heroImages: [
'https://example.com/image1.jpg',
'https://example.com/image2.jpg',
// Add more slideshow images
],
researchItems: [
{
img: 'https://example.com/research-image.jpg',
title: 'Research Area',
text: 'Description of this research focus.'
},
// Add more research areas (max 4 recommended)
]
};Footer content is in src/components/Footer.astro. Edit the footerContent object:
const footerContent = {
labName: 'WI-PI Lab',
email: 'contact@wiscprivacy.com',
address: '1210 W Dayton St, Madison, WI 53706',
copyrightOwner: 'Wisconsin Privacy and Security Group'
};All styles are in src/styles/global.css.
Key CSS variables (in :root):
--accent: #900; /* Primary red color */
--accent-light: #ff6666; /* Lighter red */
--font-heading: 'Outfit' /* Headings font */
--font-body: 'Outfit' /* Body font */
--font-serif: 'Source Serif 4' /* Serif font for descriptions */The site automatically deploys to GitHub Pages when you push to main.
Manual deployment:
npm run build
# Output is in ./dist/GitHub Pages setup:
- Go to repository Settings β Pages
- Set Source to "GitHub Actions"
- Push to
mainbranch to trigger deployment
Site URL: https://wi-pi.github.io/new_wipi_website/
| Task | File(s) to Edit |
|---|---|
| Add publication | Create src/content/publications/new-paper.md |
| Add news | Create src/content/news/news-item.md |
| Add project/artifact | Create src/content/projects/new-project.md |
| Add/edit people | Edit src/pages/students.astro |
| Edit home page | Edit src/pages/index.astro |
| Edit footer | Edit src/components/Footer.astro |
| Change colors/fonts | Edit src/styles/global.css |
| Add static files (PDFs, images) | Add to public/ folder |
| Update hero/research images | Replace SVGs in public/images/ |
| Add person photos | Add to public/images/people/ |
- Astro - Static site generator
- Vanilla CSS with CSS variables
- Vanilla JavaScript for interactivity
- GitHub Actions for CI/CD