|
| 1 | +# HAAG Website |
| 2 | + |
| 3 | +Static site for the Human-Augmented Analytics Group (HAAG), Georgia Tech. |
| 4 | +No build step, no framework, no server-side code — every page is a |
| 5 | +self-contained HTML file with its own embedded CSS, deployed as static |
| 6 | +HTML via Cloudflare Pages. This replaces the previous WordPress-based |
| 7 | +site — there is no WordPress, no PHP, and no CMS admin in this setup. |
| 8 | + |
| 9 | +--- |
| 10 | + |
| 11 | +## 1. Why this redesign |
| 12 | + |
| 13 | +The previous HAAG site (WordPress, `sites.gatech.edu`) had grown |
| 14 | +organically over several semesters into a large set of loosely |
| 15 | +connected pages. Two problems stood out: |
| 16 | + |
| 17 | +- **No way to find people.** There was no researcher directory at all — |
| 18 | + faculty, PhD researchers, postdocs, and students were mentioned |
| 19 | + incidentally across program pages, blog posts, and project write-ups, |
| 20 | + with no single place to browse who was working on what. |
| 21 | +- **Inconsistent design across pages.** Program pages, the homepage, and |
| 22 | + ad-hoc posts (semester reports, buddy program announcements, project |
| 23 | + pages hosted on entirely separate `sites.gatech.edu` subsites) didn't |
| 24 | + share a visual system, making the group look fragmented rather than |
| 25 | + like one coherent lab. |
| 26 | + |
| 27 | +This redesign addresses both directly: |
| 28 | + |
| 29 | +- **`people.html`** is a new page that didn't exist before — a |
| 30 | + searchable, filterable directory of researchers by name, role, and |
| 31 | + research area, plus a "Recently Featured" section surfacing blog |
| 32 | + posts and publications by name. This is the direct fix for "no way to |
| 33 | + find faculty and their work." |
| 34 | +- **`project-explorer.html`** consolidates project information that was |
| 35 | + previously scattered across a dozen separate `sites.gatech.edu` |
| 36 | + subsites (one per project) into a single browsable gallery, grouped |
| 37 | + by research area, with researchers and faculty collaborators listed |
| 38 | + up front instead of buried in project-specific pages. |
| 39 | +- **One shared design system** (Section 4) ties every page — homepage, |
| 40 | + program pages, directory, project gallery — to the same navy/gold GT |
| 41 | + branding, type system, and card patterns, so the site reads as one |
| 42 | + product instead of a collection of separate WordPress posts. |
| 43 | + |
| 44 | +--- |
| 45 | + |
| 46 | +## 2. Contributors |
| 47 | + |
| 48 | +| Contributor | Contribution | |
| 49 | +|---|---| |
| 50 | +| **Armando** | Designed all pages except the Recruitment Status page — homepage, faculty directory, project explorer, and the four program pages (Faculty Affiliates, PhD/Post-Doc, Data Science Research, Project Management), including the shared navy/gold design system all of them run on. | |
| 51 | +| **Mohammad** | Built the pipeline to get the codebase onto GitHub and deployed correctly on Cloudflare Pages. | |
| 52 | +| **Ash** | Designed the Recruitment Status page, contributed to the Faculty Affiliates page, and contributed to the overall site design. | |
| 53 | + |
| 54 | +--- |
| 55 | + |
| 56 | +## 3. Site map |
| 57 | + |
| 58 | +| File | Page | Owner / status | |
| 59 | +|---|---|---| |
| 60 | +| `index.html` | Homepage | New | |
| 61 | +| `faculty-affiliates.html` | Faculty Affiliates (FATE program) | New | |
| 62 | +| `phd-postdoc.html` | PhD / Post-Doc (CLEAR program) | New | |
| 63 | +| `data-science-research.html` | Data Science Research (FAIR-CS / CS 8903 & CS 6999) | New | |
| 64 | +| `project-management.html` | Project Management (MGT 8803 & CS 8803 Practicum) | New | |
| 65 | +| `project-explorer.html` | HAAG Project Explorer (project gallery) | New | |
| 66 | +| `people.html` | Researcher directory | New | |
| 67 | +| `people.yml` | Data file behind `people.html` | New | |
| 68 | +| `recruitment.html` | Recruitment status | Existing (teammate) | |
| 69 | +| `team-matching.html` | Team matching results | Existing (teammate) | |
| 70 | +| `recruitment.yml` | Data file behind `recruitment.html` | Existing (teammate) | |
| 71 | + |
| 72 | +The naming conflict that used to exist here (the recruitment page and |
| 73 | +the homepage both pointing to `index.html`) has been resolved — |
| 74 | +`index.html` is now exclusively the homepage, and the recruitment page |
| 75 | +lives at `recruitment.html` with its nav links updated to match. |
| 76 | + |
| 77 | +Every page's nav bar and footer link to all of the above by filename, so |
| 78 | +once everything is dropped into the same folder, the site is fully |
| 79 | +cross-linked. |
| 80 | + |
| 81 | +### What each redesigned page solves |
| 82 | + |
| 83 | +| Page | Problem before | How it's solved now | |
| 84 | +|---|---|---| |
| 85 | +| `index.html` | Homepage mixed a photo-blog layout with dense text, no visual hierarchy | Clear hero → stats → mission → programs → milestone timeline, in one consistent visual system | |
| 86 | +| `people.html` | No researcher directory existed anywhere on the old site | Searchable, filterable (role + keyword) grid of every researcher, with tags for research area | |
| 87 | +| `project-explorer.html` | Projects were scattered across ~10 separate `sites.gatech.edu` subsites, each with its own layout | Single gallery page, grouped by research area, with researchers/collaborators visible at a glance | |
| 88 | +| `faculty-affiliates.html`, `phd-postdoc.html`, `data-science-research.html`, `project-management.html` | Long, syllabus-style walls of text with no visual structure | Same content, restructured into scannable cards, numbered steps, and a sidebar for related programs/contacts | |
| 89 | + |
| 90 | +--- |
| 91 | + |
| 92 | +## 4. How to update content |
| 93 | + |
| 94 | +### Adding or editing a researcher (most common update) |
| 95 | +Open **`people.yml`**. Each researcher is a block under `researchers:`: |
| 96 | + |
| 97 | +```yaml |
| 98 | +- name: Dr. Sarah Chen |
| 99 | + role: Faculty # must be exactly: Faculty | PhD | Postdoc | Undergraduate |
| 100 | + role_label: Faculty Advisor · Computer Science |
| 101 | + tags: [NLP, Human-AI Trust] |
| 102 | + profile_url: "#" |
| 103 | +``` |
| 104 | +
|
| 105 | +Add a new block, edit an existing one, or delete one — then commit and |
| 106 | +push. `people.html` fetches this file at page load and renders the grid, |
| 107 | +so **no HTML or JS needs to change.** The `role` field must match one of |
| 108 | +the four filter chip values exactly (case-sensitive) or that person |
| 109 | +won't show up when someone filters by role. |
| 110 | + |
| 111 | +The "Recently Featured" strip at the bottom of the page works the same |
| 112 | +way — edit the `features:` block in the same file. |
| 113 | + |
| 114 | +### Editing any other page's text |
| 115 | +There's no CMS — open the `.html` file and edit the text directly. Each |
| 116 | +page is one file with markup and copy interleaved; search for the |
| 117 | +sentence you want to change. There is no templating, so a fact repeated |
| 118 | +across pages (e.g. HAAG's founding date) has to be updated in each file |
| 119 | +individually. |
| 120 | + |
| 121 | +### Editing shared chrome (nav bar, footer, utility bar) |
| 122 | +This is the one real maintenance cost of the current approach: the nav |
| 123 | +bar, utility bar, and footer markup are **duplicated in every file** |
| 124 | +rather than pulled from one shared include. If you add a new page or |
| 125 | +rename one, you need to update the nav `<a>` list in every other HTML |
| 126 | +file to match. See [Section 7](#7-known-limitations--future-work) for |
| 127 | +the fix if this becomes painful. |
| 128 | + |
| 129 | +--- |
| 130 | + |
| 131 | +## 5. Design system reference |
| 132 | + |
| 133 | +All pages share the same tokens, defined at the top of each file's |
| 134 | +`<style>` block: |
| 135 | + |
| 136 | +```css |
| 137 | +--navy: #003057; /* GT brand navy — primary color */ |
| 138 | +--navy-light: #0C4A7A; /* gradient accent */ |
| 139 | +--gold: #B3A369; /* GT Tech Gold — accents, borders, buttons */ |
| 140 | +--gold-mid: #A4925A; /* button hover state */ |
| 141 | +--gold-dark: #857437; /* text on light gold backgrounds */ |
| 142 | +--paper: #FAFAF8; /* page background */ |
| 143 | +--ink: #1B1F23; /* body text */ |
| 144 | +--mute: #5B6670; /* secondary/caption text */ |
| 145 | +--line: #E2E5E8; /* borders */ |
| 146 | +``` |
| 147 | + |
| 148 | +Typography: **Archivo** (headings, loaded from Google Fonts) and |
| 149 | +**IBM Plex Mono** (eyebrows, labels, badges, tags). Body copy uses system |
| 150 | +sans (Helvetica Neue / Arial). |
| 151 | + |
| 152 | +If you want to change a color or font sitewide today, you'd do a |
| 153 | +find-and-replace across every file — see Section 7 for why, and how to |
| 154 | +fix it going forward. |
| 155 | + |
| 156 | +--- |
| 157 | + |
| 158 | +## 6. Deployment |
| 159 | + |
| 160 | +This site deploys as **static HTML on Cloudflare Pages** — not |
| 161 | +WordPress, not GitHub Pages, and not embedded into `sites.gatech.edu`. |
| 162 | +There is no PHP, no WordPress admin, no plugin layer, and no build step |
| 163 | +to configure. |
| 164 | + |
| 165 | +1. Push all files (the HTML pages, `people.yml`, `recruitment.yml`) to |
| 166 | + the Git repo connected to the Cloudflare Pages project. |
| 167 | +2. In the Cloudflare Pages project settings: **no build command**, and |
| 168 | + set the build output directory to the repo root (or wherever these |
| 169 | + files live in the repo) since there's nothing to compile — Cloudflare |
| 170 | + just serves the files as-is. |
| 171 | +3. Cloudflare Pages auto-deploys on every push to the connected branch. |
| 172 | + Set up a preview branch/environment if you want to review changes |
| 173 | + before they go live on the production domain. |
| 174 | +4. Point HAAG's domain (or a `sites.gatech.edu` redirect, if that's |
| 175 | + being retired in favor of the new domain) at the Cloudflare Pages |
| 176 | + project once it's verified. |
| 177 | + |
| 178 | +**Two things this depends on that a local double-click won't give you:** |
| 179 | +- `people.html` (and `recruitment.html`) **fetch a `.yml` file over |
| 180 | + HTTP.** Opening the file directly from your filesystem (`file://`) |
| 181 | + will fail with a CORS/fetch error — it must be served over HTTP, which |
| 182 | + Cloudflare Pages does automatically once deployed. If you want to test |
| 183 | + locally first, run `python3 -m http.server` in the folder and visit |
| 184 | + `http://localhost:8000/people.html`. |
| 185 | +- Google Fonts (Archivo, IBM Plex Mono) and the `js-yaml` library both |
| 186 | + load from CDNs at runtime. If GT's network ever blocks |
| 187 | + `fonts.googleapis.com` or `cdnjs.cloudflare.com`, fonts will silently |
| 188 | + fall back to system fonts and the YAML-driven pages will show a "could |
| 189 | + not load" error instead of a grid. Worth a one-time check from a |
| 190 | + campus network before launch. |
| 191 | +- **If deploying via Cloudflare's Direct Upload (drag-and-drop), drag |
| 192 | + the *contents* of the project folder, not the folder itself.** |
| 193 | + Zip downloads (e.g. GitHub's "Download ZIP") extract into a wrapper |
| 194 | + folder like `haag-project-explorer-main/`. If you drag that whole |
| 195 | + wrapper folder into Cloudflare's upload box, every file ends up |
| 196 | + nested one level too deep (`haag-project-explorer-main/index.html` |
| 197 | + instead of `index.html` at the root), and every page except whichever |
| 198 | + one Cloudflare's SPA fallback happens to serve will 404. Open the |
| 199 | + folder first, select everything *inside* it, and drag that selection |
| 200 | + instead. This is also the reason a fresh deployment or a rollback |
| 201 | + won't fix the problem if the upload itself has this nesting — check |
| 202 | + a deployment's **Assets uploaded** list under its Details page to |
| 203 | + confirm `index.html` (and the rest) show up at the top level, not |
| 204 | + inside a subfolder. |
| 205 | + |
| 206 | +--- |
| 207 | + |
| 208 | +## 7. Known limitations & future work |
| 209 | + |
| 210 | +These aren't blockers to shipping, but worth knowing about: |
| 211 | + |
| 212 | +- **Duplicated chrome.** As noted above, the nav/footer/utility bar HTML |
| 213 | + is copy-pasted into all 9 files. Fine at this size; if the site grows |
| 214 | + past ~15 pages, consider moving to a static site generator that |
| 215 | + Cloudflare Pages can build directly (Eleventy, Astro, and Hugo are all |
| 216 | + supported with a build command in the Pages project settings) so |
| 217 | + nav/footer live in one shared layout file instead of being duplicated |
| 218 | + by hand. |
| 219 | +- **Placeholder data.** `people.yml` has 15 sample researchers with |
| 220 | + invented names/tags — swap in real people before publishing. |
| 221 | +- **Project Explorer's source is unconfirmed** — built from HAAG's |
| 222 | + public "On-Going Projects" listing since the exact live |
| 223 | + `/haag-project-explorer/` page wasn't directly reachable; confirm it |
| 224 | + matches before publishing. |
| 225 | +- **No mobile testing done beyond CSS breakpoints** — the responsive |
| 226 | + rules are in place but haven't been checked on an actual device. |
| 227 | +- **Real contact emails and named staff are embedded** (e.g. CLEAR's |
| 228 | + contact, Faculty Affiliates' contact) — confirm those people are still |
| 229 | + correct and comfortable being listed before this goes live. |
0 commit comments