Site Features Added 2026-06-12 (Squarespace-class equivalents, $0/yr)

Branch: feat/squarespace-equivalents. One commit per feature - git revert <sha> removes any single feature cleanly.

Feature Files Config Status
Shared head include _includes/head-extras.html, wired into index.html, cv.html, 404.html - live
Analytics (GA4, DNT-respecting) _includes/head-extras.html _data/analytics.yml disabled - needs your GA4 ID (TODO 1)
Dead UA cleanup 13 files in cs498gc/fa25/ - done (placeholder comments mark where GA4 goes)
SEO: sitemap + robots Gemfile, _config.yml, robots.txt - live (sitemap.xml auto-generates)
Announcement bar index.html, js/index.js, _sass/_base.scss _data/announcement.yml live - dismissible, localStorage
Contact form index.html (#contact section), _data/navigation.yml form action URL needs Formspree ID (TODO 2)
Newsletter signup index.html (contact section) form action URL needs Buttondown username (TODO 3)
Promo pop-up index.html, js/index.js _data/popup.yml live - 8s delay, 30-day cooldown
Mobile sticky info bar index.html, _sass/_base.scss - live at <= 768px
Support link index.html footer - live (enable GitHub Sponsors on your account)

Your 3 TODOs to fully activate

  1. GA4: go to analytics.google.com -> Admin -> Create property -> Web stream for https://kulbir-singh-ahluwalia.com -> copy the G-XXXXXXXXXX Measurement ID. Then in _data/analytics.yml set ga4_id: "G-XXXXXXXXXX" and enabled: true. Optionally paste the same gtag snippet into the placeholder comments in cs498gc/fa25/*.html (copy the rendered block from _includes/head-extras.html).
  2. Formspree: formspree.io -> New form (free, 50 submissions/mo) -> copy the form ID -> replace FORMSPREE_ID_PLACEHOLDER in index.html.
  3. Buttondown: buttondown.email -> create account (free to 100 subscribers) -> replace BUTTONDOWN_USER_PLACEHOLDER in index.html with your username.

Config knobs

  • _data/announcement.yml - text/link; bump id to re-show the bar to people who dismissed it.
  • _data/popup.yml - copy/CTA/delay/cooldown; change id to reset everyone’s cooldown.
  • _data/analytics.yml - respect_dnt: true skips analytics for Do-Not-Track browsers.

YouTube embed pattern (privacy-friendly)

For project/talk videos use the no-cookie host inside a responsive Bulma wrapper:

<figure class="image is-16by9">
  <iframe class="has-ratio" src="https://www.youtube-nocookie.com/embed/VIDEO_ID"
          title="Video title" loading="lazy" frameborder="0" allowfullscreen></iframe>
</figure>

Deliberately NOT added

  • jekyll-seo-tag - the hand-rolled OG/Twitter/JSON-LD head in index.html is already complete; the plugin would emit duplicates.
  • Ecommerce/POS/gift cards/shipping/etc. - retail features with no use on an academic site. If agentic-robots ever sells things, that lives on its own subdomain with a real commerce backend.

Rollback

Each feature is one commit on this branch; git log --oneline then git revert <sha>. The deploy workflow rebuilds gh-pages from main on every push, so reverting on main fully undoes a feature.