|
| 1 | +# Interactive Computing Lab — Website Maintainer Guide |
| 2 | + |
| 3 | +This is the source of the Interactive Computing Lab website (Stevens Institute of Technology, Dr. Jonggi Hong). |
| 4 | +It is a **single static web page**: plain HTML, CSS, and JavaScript. There is nothing to install, compile, or build. |
| 5 | +If you can edit a text file and upload it to GitHub, you can maintain this site. |
| 6 | + |
| 7 | +**Live site:** https://interactivecomputinglab.github.io/ |
| 8 | +**Repository:** https://github.com/InteractiveComputingLab/interactivecomputinglab.github.io (the site files are at the top level of the repository) |
| 9 | + |
| 10 | +The repository name is special: GitHub publishes a repository called `<organization>.github.io` at that address automatically, from the `main` branch. Do not rename it. |
| 11 | + |
| 12 | +A mirror of the same files is kept at https://github.com/meazizul/ICLAB (live at https://azizulhaque.me/ICLAB/). |
| 13 | + |
| 14 | +--- |
| 15 | + |
| 16 | +## 1. How the site is organised |
| 17 | + |
| 18 | +``` |
| 19 | +(repository root) |
| 20 | +├── index.html ← THE ENTIRE SITE. 95% of edits happen in this one file. |
| 21 | +├── style.css Template stylesheet. Do not edit. Override in css/custom.css instead. |
| 22 | +├── css/custom.css Our small set of style overrides (hero, publication cards). |
| 23 | +├── js/main.js Menu, publication filters, and the two hero animations. |
| 24 | +├── css/, fonts/, js/ Template libraries (Bootstrap 3, Ionicons, Isotope). Leave as they are. |
| 25 | +├── img/team/ One portrait per person, 600×820 px JPG, named firstname-lastname.jpg |
| 26 | +├── img/portfolio/ One square thumbnail per paper, 600×600 px JPG, named project-<id>.jpg |
| 27 | +├── img/class/ Course card images, 1500×460 px |
| 28 | +├── img/favicon.png Browser tab icon |
| 29 | +└── .nojekyll Tells GitHub Pages to publish the files exactly as they are. Keep it. |
| 30 | +``` |
| 31 | + |
| 32 | +The page has these sections, in order. Each starts with an HTML comment you can search for in `index.html`: |
| 33 | + |
| 34 | +| Section | Search for | What is in it | |
| 35 | +|---|---|---| |
| 36 | +| Hero | `<!-- basic-slider start -->` | Lab name, tagline, animated background, optional video | |
| 37 | +| About us + Recent News | `<!-- about-us area start -->` | Lab description (left) and dated news items (right) | |
| 38 | +| Our Team + Alumni | `<!-- team area start -->` | Photo cards, four per row | |
| 39 | +| Publications | `<!-- basic-portfolio-area start -->` | Filter buttons and one card per paper | |
| 40 | +| Classes | `<a name="classes">` | Courses taught by Dr. Hong | |
| 41 | +| Videos | `<!-- videos area start -->` | Embedded YouTube talks | |
| 42 | +| Lab Openings | `<!-- apply area start -->` | Recruiting text and contact details | |
| 43 | + |
| 44 | +--- |
| 45 | + |
| 46 | +## 2. Two ways to make a change |
| 47 | + |
| 48 | +### Option A — edit in the browser (no software needed) |
| 49 | + |
| 50 | +1. Open the repository on GitHub. |
| 51 | +2. Click the file you want to change (usually `index.html`), then click the **pencil icon** (Edit). |
| 52 | +3. Make your change. Use Ctrl+F / Cmd+F to find the section. |
| 53 | +4. Click **Commit changes**, write a one-line note such as "Add ASSETS 2027 paper", and commit to `main`. |
| 54 | +5. Wait one to two minutes. Reload the live site. If you still see the old version, hard-refresh (Cmd+Shift+R or Ctrl+F5). |
| 55 | + |
| 56 | +To add an image in the browser: open the right folder (for example `img/team`), click **Add file → Upload files**, drop the image in, and commit. |
| 57 | + |
| 58 | +### Option B — edit on your computer (recommended for bigger changes) |
| 59 | + |
| 60 | +```bash |
| 61 | +git clone https://github.com/InteractiveComputingLab/interactivecomputinglab.github.io.git |
| 62 | +cd interactivecomputinglab.github.io |
| 63 | +python3 -m http.server 8080 # preview at http://localhost:8080 |
| 64 | +# ... edit index.html and images, refresh the browser to check ... |
| 65 | +git add -A |
| 66 | +git commit -m "Describe your change" |
| 67 | +git push |
| 68 | +``` |
| 69 | + |
| 70 | +The live site updates automatically one to two minutes after `git push`. |
| 71 | + |
| 72 | +--- |
| 73 | + |
| 74 | +## 3. Recipes for common updates |
| 75 | + |
| 76 | +Every recipe is "copy an existing block, then change the words". Never delete the surrounding `<div>` tags. |
| 77 | + |
| 78 | +### 3.1 Post a news item |
| 79 | + |
| 80 | +Find `<h2>Recent News</h2>`. The items are lines inside one `<p>`. Add the newest at the top: |
| 81 | + |
| 82 | +```html |
| 83 | +<strong>Oct 2026:</strong> Our paper <em>Paper Title</em> is accepted to <strong>CHI 2027</strong>!<br> |
| 84 | +``` |
| 85 | + |
| 86 | +Keep the list to roughly the last two years; delete old lines from the bottom. |
| 87 | + |
| 88 | +### 3.2 Add or change a team member |
| 89 | + |
| 90 | +1. Save a portrait photo as `img/team/firstname-lastname.jpg`. Crop it to a **portrait ratio of about 3:4** (600 × 820 px). Square or landscape photos will look wrong next to the others. |
| 91 | +2. Find `<h2>Our Team</h2>`. Members are in rows of four (`<div class="row">` ... four `col-sm-6 col-md-3` columns). Copy one member block and edit it: |
| 92 | + |
| 93 | +```html |
| 94 | +<div class="col-sm-6 col-md-3"> |
| 95 | + <div class="team-item"> |
| 96 | + <div class="team-item-image"> |
| 97 | + <img src="img/team/firstname-lastname.jpg" alt="Headshot of Full Name"> |
| 98 | + <div class="team-item-detail"> |
| 99 | + <h5 class="team-item-title">Full Name</h5> |
| 100 | + <div class="team-social-icon"> |
| 101 | + <a href="https://personal-site.example" aria-label="Full Name website"><i class="ion-link"></i></a> |
| 102 | + <a href="mailto:name@stevens.edu" aria-label="Full Name email"><i class="ion-email"></i></a> |
| 103 | + <a href="https://www.linkedin.com/in/..." aria-label="Full Name linkedin"><i class="ion-social-linkedin"></i></a> |
| 104 | + </div> |
| 105 | + </div> |
| 106 | + </div> |
| 107 | + <h4 class="team-item-name">Full Name</h4> |
| 108 | + <span class="team-item-role">Ph.D. Student, Computer Science</span> |
| 109 | + </div> |
| 110 | +</div> |
| 111 | +``` |
| 112 | + |
| 113 | +Delete any `<a>` link lines you do not need. Available icons: `ion-link` (website), `ion-email`, `ion-social-linkedin`, `ion-social-github`, `ion-social-twitter`, `ion-university` (Google Scholar). |
| 114 | + |
| 115 | +If a row already has four people, start a new `<div class="row">` ... `</div>` after it. |
| 116 | + |
| 117 | +**No photo yet?** Use the grey placeholder: copy `img/team/dawei-xu.jpg` (a silhouette) to the new file name. Replace it when a photo arrives. |
| 118 | + |
| 119 | +**Someone graduates:** cut their whole `col-sm-6 col-md-3` block, paste it into the rows under `<h2>Alumni</h2>`, and change the role to something like `M.S. Computer Science, 2026`. |
| 120 | + |
| 121 | +### 3.3 Add a publication |
| 122 | + |
| 123 | +1. Make a **square thumbnail** (600 × 600 px JPG) and save it as `img/portfolio/project-<short-id>.jpg`. A teaser figure from the paper, a photo from the study, or a simple illustration all work. Keep the style consistent with the existing ones. |
| 124 | +2. Find `<div id="portfolio-grid"`. The first card after it is the newest paper. Copy one card and paste it **above** the first one: |
| 125 | + |
| 126 | +```html |
| 127 | +<div class="portfolio-item access paper"> |
| 128 | + <div class="portfolio-wrapper"> |
| 129 | + <div class="portfolio-thumb"> |
| 130 | + <img src="img/portfolio/project-<short-id>.jpg" alt="Thumbnail for Short Name" /> |
| 131 | + <div class="view-icon"> |
| 132 | + <a href="https://doi.org/10.1145/XXXXXXX" target="_blank" rel="noopener"><span class="icon-attachment"></span></a> |
| 133 | + </div> |
| 134 | + </div> |
| 135 | + <div class="portfolio-caption caption-border text-center"> |
| 136 | + <h4><a href="https://doi.org/10.1145/XXXXXXX" target="_blank" rel="noopener">Short Name</a></h4> |
| 137 | + <div class="work-tag"> |
| 138 | + <a href="https://doi.org/10.1145/XXXXXXX" target="_blank" rel="noopener">Full Paper Title</a> |
| 139 | + <span class="pub-authors">First Author, Second Author, Jonggi Hong</span> |
| 140 | + </div> |
| 141 | + <div class="paper-menu"> |
| 142 | + CHI 2027: <a href="https://doi.org/10.1145/XXXXXXX" target="_blank" rel="noopener">PAPER</a> |
| 143 | + </div> |
| 144 | + </div> |
| 145 | + </div> |
| 146 | +</div> |
| 147 | +``` |
| 148 | + |
| 149 | +3. Set the **filter classes** on the first line. Pick every tag that applies: |
| 150 | + - `access` – accessibility work |
| 151 | + - `wearable` – wearables, smart glasses, haptics |
| 152 | + - `humanai` – human-AI interaction, conversational agents, tools |
| 153 | + - `paper` (full paper or journal article) **or** `poster` (poster, demo, extended abstract, workshop paper) |
| 154 | + |
| 155 | +4. Update the counts in the filter buttons just above the grid, for example `All (28)` → `All (29)`. The buttons are labelled `data-filter=".access"` and so on. |
| 156 | + |
| 157 | +5. Optional extra links in `paper-menu`, separated by ` | `: `<a href="...">VIDEO</a>`, `<a href="...">CODE</a>`, `<a href="...">PDF</a>`. |
| 158 | + |
| 159 | +**Not published yet (no DOI)?** Use the conference program page, or the lab news item, as the link. Do not upload paper PDFs before the publisher releases them. |
| 160 | + |
| 161 | +### 3.4 Mark an award |
| 162 | + |
| 163 | +Inside the card's `portfolio-thumb`, right after the `<img ...>` line, add: |
| 164 | + |
| 165 | +```html |
| 166 | +<div class="ribbon ribbon-holder">AWARD</div> |
| 167 | +``` |
| 168 | + |
| 169 | +and in `paper-menu` write the award after the venue: |
| 170 | + |
| 171 | +```html |
| 172 | +CHI 2027 <award>(Best Paper Honorable Mention)</award>: <a href="...">PAPER</a> |
| 173 | +``` |
| 174 | + |
| 175 | +Then update the sentence under the Publications heading that says how many articles have been honored. |
| 176 | + |
| 177 | +### 3.5 Add a class |
| 178 | + |
| 179 | +Find `<h2>Classes Taught by Dr. Hong</h2>`. Copy one `<div class="col-sm-6 col-md-6 blog-item">` block, change the semester, title, description, and link. Make a matching card image (1500 × 460 px) in `img/class/`, or reuse an existing one. |
| 180 | + |
| 181 | +### 3.6 Add a video |
| 182 | + |
| 183 | +Find `<!-- videos area start -->`. Copy the `blog-item` block and change the YouTube ID in the `data-src` URL (`https://www.youtube.com/embed/VIDEO_ID`), the author, title, description, and link. Two videos fit per row; the single existing block is centred with `col-sm-offset-2`, so remove the two `offset` classes when you add a second one. |
| 184 | + |
| 185 | +### 3.7 Edit the About text, Lab Openings, or contact details |
| 186 | + |
| 187 | +These are ordinary paragraphs. Find the heading (`<h2>About us</h2>` or `<h2>Lab Openings</h2>`) and edit the text inside the `<p>` tags. Office, phone, and email are in the last paragraph of Lab Openings. |
| 188 | + |
| 189 | +### 3.8 Change the hero (top of page) |
| 190 | + |
| 191 | +The hero element is `<div id="home-area" ...>`. Its attributes control everything: |
| 192 | + |
| 193 | +| Attribute | Meaning | |
| 194 | +|---|---| |
| 195 | +| `data-video` | YouTube video ID shown between the animations. Set to `""` for animations only. | |
| 196 | +| `data-video-start` / `data-video-stop` | Seconds into the video to loop between. | |
| 197 | +| `data-video-seconds` | How long the video shows each cycle (default 5). | |
| 198 | +| `data-animation-seconds` | How long each animation shows (default 10). | |
| 199 | + |
| 200 | +The rotation is: network animation → video → wave animation → video → repeat. Both animations react to the mouse. The video only appears once YouTube has actually started playing, so a slow connection just shows the animations. |
| 201 | + |
| 202 | +The title and tagline are the `<h1>` and `<p class="lead">` right below. |
| 203 | + |
| 204 | +--- |
| 205 | + |
| 206 | +## 4. Image guidelines |
| 207 | + |
| 208 | +| Use | Size | Format | Folder | |
| 209 | +|---|---|---|---| |
| 210 | +| Team portrait | 600 × 820 px (3:4 portrait) | JPG, under 200 KB | `img/team/` | |
| 211 | +| Paper thumbnail | 600 × 600 px (square) | JPG, under 200 KB | `img/portfolio/` | |
| 212 | +| Class card | 1500 × 460 px | JPG | `img/class/` | |
| 213 | + |
| 214 | +Free tools for cropping and resizing: Preview on macOS (Tools → Adjust Size), Photos on Windows, or https://squoosh.app in the browser. Use only lowercase letters, numbers, and hyphens in file names. |
| 215 | + |
| 216 | +--- |
| 217 | + |
| 218 | +## 5. Before you publish: a 60-second checklist |
| 219 | + |
| 220 | +- [ ] Open the page locally (`python3 -m http.server 8080`) or check the live site after the commit. |
| 221 | +- [ ] Every new image shows up (a broken image icon means the file name or folder does not match). |
| 222 | +- [ ] Click each new link. |
| 223 | +- [ ] Publication filter counts match the number of cards. |
| 224 | +- [ ] Nothing is duplicated or half-deleted: the page should have no stray text at the bottom. |
| 225 | +- [ ] On a phone (or a narrow browser window) the menu collapses into a ☰ button and everything stacks. |
| 226 | + |
| 227 | +--- |
| 228 | + |
| 229 | +## 6. Troubleshooting |
| 230 | + |
| 231 | +**I changed something but the live site looks the same.** GitHub Pages takes one to two minutes to publish. Then hard-refresh: Cmd+Shift+R on Mac, Ctrl+F5 on Windows. If you edited `css/custom.css` or `js/main.js`, also bump the version number in `index.html` where they are loaded (`custom.css?v=6` → `?v=7`) so browsers fetch the new file. |
| 232 | + |
| 233 | +**The page is completely blank or unstyled.** Usually a broken `<div>` in `index.html`. Check the last edit: every opening tag needs its closing tag. GitHub's file view will show a diff of exactly what changed; revert it if needed (History → the commit → "Revert"). |
| 234 | + |
| 235 | +**A publication card is much taller than the others.** The title is very long. Use a shorter display name in the `<h4>`; the full title stays in `work-tag`. |
| 236 | + |
| 237 | +**The filter buttons stop working.** A card is missing its `portfolio-item` class or `#portfolio-grid` got an extra tag inside it. |
| 238 | + |
| 239 | +**The hero video does not play.** It only plays over HTTPS on the live site, not from a file opened by double-clicking. It also never plays on phones (browsers block autoplay), which is expected; the animations show instead. |
| 240 | + |
| 241 | +**GitHub says the site is not publishing.** Repository Settings → Pages must show Source: *Deploy from a branch*, Branch: `main`, Folder: `/ (root)`. The `.nojekyll` file must be present at the top level. The old address https://interactivecomputinglab.github.io/lab_website/ redirects here and can be left alone. |
| 242 | + |
| 243 | +--- |
| 244 | + |
| 245 | +## 7. Handing the site to the next maintainer |
| 246 | + |
| 247 | +1. Ask Dr. Hong to add the new person as a collaborator on the repository (Settings → Collaborators). |
| 248 | +2. Point them to this README. |
| 249 | +3. Walk them through one real change together, for example adding a news item, and watch it go live. |
| 250 | + |
| 251 | +That is the whole process. Everything else is copy, paste, and edit. |
| 252 | + |
| 253 | +--- |
| 254 | + |
| 255 | +## 8. Credits |
| 256 | + |
| 257 | +The page layout follows the University of Michigan Soundability Lab site and is built on the free "White – Minimal Portfolio" Bootstrap template. Icons: Ionicons and et-line. Publication thumbnails were drawn for the lab. First version built September 2026 by Azizul Haque. |
0 commit comments