Site Features Added 2026-06-12 (Squarespace-class equivalents, $0/yr)
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
- GA4: go to analytics.google.com -> Admin -> Create property -> Web stream for
https://kulbir-singh-ahluwalia.com-> copy theG-XXXXXXXXXXMeasurement ID. Then in_data/analytics.ymlsetga4_id: "G-XXXXXXXXXX"andenabled: true. Optionally paste the same gtag snippet into the placeholder comments incs498gc/fa25/*.html(copy the rendered block from_includes/head-extras.html). - Formspree: formspree.io -> New form (free, 50 submissions/mo) -> copy the form ID ->
replace
FORMSPREE_ID_PLACEHOLDERinindex.html. - Buttondown: buttondown.email -> create account (free to 100 subscribers) ->
replace
BUTTONDOWN_USER_PLACEHOLDERinindex.htmlwith your username.
Config knobs
_data/announcement.yml- text/link; bumpidto re-show the bar to people who dismissed it._data/popup.yml- copy/CTA/delay/cooldown; changeidto reset everyone’s cooldown._data/analytics.yml-respect_dnt: trueskips 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 inindex.htmlis 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.