This document is the central guide for creating all new content on this website. It details how to use the unified scaffolding script to automatically generate new, pre-filled posts for projects, courses, blog posts, albums, and talks.
The script streamlines the entire content creation process. It provides interactive prompts, handles automatic contributor linking, and generates the correct files and templates for each content type.
1. How to Use the Scaffolding Script
The scaffold.py script is a single, interactive tool that replaces all the old, separate .sh files. It will ask you what you want to create and then prompt you for all the necessary information.
Step 1: Run the Script
From the root directory of the website, run the script (or the new.sh wrapper):
./scaffold.pyStep 2: Select a Post Type
You will see an interactive menu of all available post types.
Select a post type to create:
1. Album
2. Blog
3. Course
4. Project
5. Talk
Enter a number (1-5):
Type the number for the content you want to create (e.g., 1 for a new Album) and press Enter.
Step 3: Answer the Prompts
The script will guide you through a series of prompts to gather the necessary data. This includes:
- Titles & Excerpts: Basic post information.
- Contributors: For
projectandtalkposts, you will see a numbered list of all team members. You can select them in the correct order (e.g.,2, 1, 3). - Media Loop (New): For
albumposts, you will enter a loop to add multiple photos or videos interactively.
Step 4: Get Your New File
Once you finish, the script will create the new file in the correct directory (e.g., album/_posts/ or projects/_posts/) with the correct file extension (.html for talks, .md for everything else), ready for you to add your content.
2. How Contributor Linking Works
For project and talk posts, the script automatically generates links for the contributors you select. This system works by:
- Scanning
team/_posts/: It reads all your team member.mdfiles to get their names and filenames. - Using the
namefield: The link text is pulled from thename:field in the team member’s YAML (e.g.,name: Murat Kahveci). - Using the
file_slug: The link URL is built from the file’s slug to match your site’s/:title/permalink structure.murat-kahveci.mdbecomes[Murat Kahveci](/murat-kahveci/)2024-01-01-annemarie-kegler.mdbecomes[Annemarie Kegler](/annemarie-kegler/)
3. Guide: talk Posts (Slides)
talk posts are saved as .html files in talks/_posts/. The script will prompt you for all the metadata needed for the title slide and automatically append the full slide deck template.
3.1 Front Matter (Generated)
---
layout: reveal
title: "AI-Driven LT Tracker (5-SC)"
subtitle_desc: "Data-Driven Instructional Planning"
date: 2025-10-15
category: talks
event: "Professional Development Seminar"
location: "Chicago"
type: "invited"
presentation_theme: kahveci-dark
authors:
- name: Murat Kahveci, Ph.D.
affiliation: Chicago Public Schools
photo: "/images/team/murat-kahveci.jpg"
url: "/murat/"
funding:
- "National Science Foundation"
---(Refer to previous documentation for slide-specific includes like tables, figures, and math).
4. Guide: project Posts
project posts are saved as .md files in projects/_posts/.
You will be prompted for:
- Title & Year
- Project ID: A short slug (e.g.,
pec-leap). - Contributors: A numbered list from
team/_posts. - Duration: (e.g.,
2023 - 2024). - Hosted/Funded By.
- Excerpt: A one-sentence description.
5. Guide: course Posts
course posts are saved as .md files in courses/_posts/.
You will be prompted for:
- Title & Year
- Course Code: (e.g.,
FSCI). - Institution/URL.
- Levels/Semester.
6. Guide: blog & album Posts
Blog Posts
Saved in blog/_posts/. You will be prompted for Title, Tags (comma-separated), and Excerpt. Optionally, you can link a Related Project.
Album Posts (Updated)
Saved in album/_posts/. The new structure supports a mixed grid of Photos and YouTube videos.
1. Initial Prompts:
- Title: The name of the album/event.
- Place: Location (e.g., “Cancún, Mexico”).
2. Interactive Media Loop:
The script will ask: Select type: [1] Image, [2] YouTube, [Enter] Finish.
- Option 1 (Image):
- Enter the local URL:
/assets/img/my-photo.jpg - Enter a Caption.
- Enter the local URL:
- Option 2 (YouTube):
- Enter the ID only:
dQw4w9WgXcQ(The part afterv=). - Enter a Title.
- Enter the ID only:
- Finish: Press Enter on a blank line to generate the file.
📸 Image Optimization Guidelines
To ensure the unified grid (16:9 ratio) and the full-screen lightbox load quickly and look sharp, please adhere to these specs before uploading images to assets/img/.
| Feature | Target Spec | Reason |
|---|---|---|
| Dimensions | Longest Side: 1600px | Landscape: Set Width to 1600px. Portrait: Set Height to 1600px. This prevents vertical photos from becoming massive files. |
| Grid Crop | 16:9 Ratio | The site’s CSS automatically crops the top/bottom to force a clean, uniform grid. |
| File Size | 200KB – 400KB | Ensures fast loading, especially on mobile networks. |
| Format | .jpg or .webp | Best compression for photos. Avoid .png. |
YAML Structure Reference
The script will generate the following structure in your front matter:
media:
- type: image
url: /assets/img/cancun-beach.jpg
caption: "A beautiful day."
- type: youtube
id: "dQw4w9WgXcQ"
title: "Jetski Video"
7. Linking Content
To link a “Slides” button from a publication or project page to a presentation, add the presentation_url variable to the YAML front matter of that specific post.
presentation_url: /xyz