From 9bfda3d95a79e3fd318699ac3cf9acff5df2fdaf Mon Sep 17 00:00:00 2001 From: Neeldhara Misra Date: Thu, 4 Jun 2026 10:30:05 +0530 Subject: [PATCH 1/3] Refresh CSE website content and research pages --- .env.example | 16 + .github/workflows/netlify-deploy.yml | 92 ++ blog-title-avatar-check.png | Bin 0 -> 128000 bytes docs/web-request-agent-workflow.md | 78 ++ netlify.toml | 7 + public/_redirects | 7 + ...ksha-acm-w-grad-cohort-2020-day-1-dark.png | Bin 0 -> 67483 bytes ...sha-acm-w-grad-cohort-2020-day-1-light.png | Bin 0 -> 65652 bytes ...ksha-acm-w-grad-cohort-2020-day-2-dark.png | Bin 0 -> 72477 bytes ...sha-acm-w-grad-cohort-2020-day-2-light.png | Bin 0 -> 69985 bytes ...ksha-acm-w-grad-cohort-2020-day-3-dark.png | Bin 0 -> 67929 bytes ...sha-acm-w-grad-cohort-2020-day-3-light.png | Bin 0 -> 65092 bytes ...women-conquering-computing-online-dark.png | Bin 0 -> 59059 bytes ...omen-conquering-computing-online-light.png | Bin 0 -> 56293 bytes ...sting-experience-part-i-acm-india-dark.png | Bin 0 -> 67550 bytes ...ting-experience-part-i-acm-india-light.png | Bin 0 -> 65384 bytes ...ng-experience-part-ii-acm-w-india-dark.png | Bin 0 -> 48918 bytes ...g-experience-part-ii-acm-w-india-light.png | Bin 0 -> 47094 bytes ...nce-part-iii-student-participants-dark.png | Bin 0 -> 53576 bytes ...ce-part-iii-student-participants-light.png | Bin 0 -> 51557 bytes ...perience-part-iv-industry-experts-dark.png | Bin 0 -> 51695 bytes ...erience-part-iv-industry-experts-light.png | Bin 0 -> 50201 bytes ...ing-experience-part-v-researchers-dark.png | Bin 0 -> 51124 bytes ...ng-experience-part-v-researchers-light.png | Bin 0 -> 49240 bytes ...g-experience-part-vi-perspectives-dark.png | Bin 0 -> 51277 bytes ...-experience-part-vi-perspectives-light.png | Bin 0 -> 49647 bytes ...omen-in-computer-science-research-dark.png | Bin 0 -> 49606 bytes ...men-in-computer-science-research-light.png | Bin 0 -> 47654 bytes .../hackrush-2026-aditya-snake-bot-dark.png | Bin 0 -> 51064 bytes .../hackrush-2026-aditya-snake-bot-light.png | Bin 0 -> 48835 bytes .../hackrush-2026-arpan-bazaar-iitgn-dark.png | Bin 0 -> 56372 bytes ...hackrush-2026-arpan-bazaar-iitgn-light.png | Bin 0 -> 54247 bytes ...-nihar-bone-marrow-classification-dark.png | Bin 0 -> 55945 bytes ...nihar-bone-marrow-classification-light.png | Bin 0 -> 53611 bytes ...2026-srihith-activation-functions-dark.png | Bin 0 -> 51762 bytes ...026-srihith-activation-functions-light.png | Bin 0 -> 50145 bytes ...ush-2026-surriya-archivist-puzzle-dark.png | Bin 0 -> 56611 bytes ...sh-2026-surriya-archivist-puzzle-light.png | Bin 0 -> 54876 bytes ...krush-2026-yuvraj-ai-image-editor-dark.png | Bin 0 -> 44731 bytes ...rush-2026-yuvraj-ai-image-editor-light.png | Bin 0 -> 43034 bytes .../kishan-gsoc-24-final-report-dark.png | Bin 0 -> 33555 bytes .../kishan-gsoc-24-final-report-light.png | Bin 0 -> 32245 bytes .../kishan-gsoc-24-week-1-dark.png | Bin 0 -> 31028 bytes .../kishan-gsoc-24-week-1-light.png | Bin 0 -> 29768 bytes .../kishan-gsoc-24-week-10-dark.png | Bin 0 -> 32387 bytes .../kishan-gsoc-24-week-10-light.png | Bin 0 -> 30807 bytes .../kishan-gsoc-24-week-11-dark.png | Bin 0 -> 31342 bytes .../kishan-gsoc-24-week-11-light.png | Bin 0 -> 29761 bytes .../kishan-gsoc-24-week-12-dark.png | Bin 0 -> 32165 bytes .../kishan-gsoc-24-week-12-light.png | Bin 0 -> 30582 bytes .../kishan-gsoc-24-week-2-dark.png | Bin 0 -> 31751 bytes .../kishan-gsoc-24-week-2-light.png | Bin 0 -> 30474 bytes .../kishan-gsoc-24-week-3-dark.png | Bin 0 -> 32150 bytes .../kishan-gsoc-24-week-3-light.png | Bin 0 -> 30896 bytes .../kishan-gsoc-24-week-4-dark.png | Bin 0 -> 31207 bytes .../kishan-gsoc-24-week-4-light.png | Bin 0 -> 29945 bytes .../kishan-gsoc-24-week-5-dark.png | Bin 0 -> 31907 bytes .../kishan-gsoc-24-week-5-light.png | Bin 0 -> 30675 bytes .../kishan-gsoc-24-week-6-dark.png | Bin 0 -> 32245 bytes .../kishan-gsoc-24-week-6-light.png | Bin 0 -> 30969 bytes .../kishan-gsoc-24-week-7-dark.png | Bin 0 -> 31332 bytes .../kishan-gsoc-24-week-7-light.png | Bin 0 -> 30066 bytes .../kishan-gsoc-24-week-8-dark.png | Bin 0 -> 32304 bytes .../kishan-gsoc-24-week-8-light.png | Bin 0 -> 31032 bytes .../kishan-gsoc-24-week-9-dark.png | Bin 0 -> 32259 bytes .../kishan-gsoc-24-week-9-light.png | Bin 0 -> 30928 bytes ...-my-google-summer-of-code-journey-dark.png | Bin 0 -> 42528 bytes ...my-google-summer-of-code-journey-light.png | Bin 0 -> 40974 bytes .../kishan-my-gsoc-2024-project-dark.png | Bin 0 -> 35715 bytes .../kishan-my-gsoc-2024-project-light.png | Bin 0 -> 34084 bytes .../kishan-my-gsoc-progress-dark.png | Bin 0 -> 33791 bytes .../kishan-my-gsoc-progress-light.png | Bin 0 -> 32091 bytes .../kishan-pycon-2024-proposal-dark.png | Bin 0 -> 34031 bytes .../kishan-pycon-2024-proposal-light.png | Bin 0 -> 32517 bytes ...ter-science-teacher-training-2018-dark.png | Bin 0 -> 61982 bytes ...er-science-teacher-training-2018-light.png | Bin 0 -> 59994 bytes ...5-week-1-community-bonding-begins-dark.png | Bin 0 -> 40345 bytes ...-week-1-community-bonding-begins-light.png | Bin 0 -> 38346 bytes ...community-connections-pr-complete-dark.png | Bin 0 -> 49758 bytes ...ommunity-connections-pr-complete-light.png | Bin 0 -> 48149 bytes ...y-gsoc-2025-week-3-quiet-momentum-dark.png | Bin 0 -> 34540 bytes ...-gsoc-2025-week-3-quiet-momentum-light.png | Bin 0 -> 32935 bytes ...c-2025-week-4-smarter-coordinates-dark.png | Bin 0 -> 38526 bytes ...-2025-week-4-smarter-coordinates-light.png | Bin 0 -> 36540 bytes ...id-layout-custom-anchors-networkx-dark.png | Bin 0 -> 54348 bytes ...d-layout-custom-anchors-networkx-light.png | Bin 0 -> 52438 bytes ...ort-tests-and-residue-coordinates-dark.png | Bin 0 -> 48990 bytes ...rt-tests-and-residue-coordinates-light.png | Bin 0 -> 46882 bytes ...eek-7-testing-residue-coordinates-dark.png | Bin 0 -> 42913 bytes ...ek-7-testing-residue-coordinates-light.png | Bin 0 -> 40886 bytes ...rizing-and-algorithm-improvements-dark.png | Bin 0 -> 48896 bytes ...izing-and-algorithm-improvements-light.png | Bin 0 -> 47421 bytes ...-and-refining-placement-algorithm-dark.png | Bin 0 -> 49742 bytes ...and-refining-placement-algorithm-light.png | Bin 0 -> 47893 bytes ...welcome-drawing-bonds-that-matter-dark.png | Bin 0 -> 42124 bytes ...elcome-drawing-bonds-that-matter-light.png | Bin 0 -> 40491 bytes ...yan-notes-on-distributed-training-dark.png | Bin 0 -> 35654 bytes ...an-notes-on-distributed-training-light.png | Bin 0 -> 34073 bytes .../progyan-notes-on-language-models-dark.png | Bin 0 -> 37474 bytes ...progyan-notes-on-language-models-light.png | Bin 0 -> 35665 bytes .../progyan-softer-software-dark.png | Bin 0 -> 31069 bytes .../progyan-softer-software-light.png | Bin 0 -> 29472 bytes ...ogyan-we-can-be-more-than-wizards-dark.png | Bin 0 -> 38422 bytes ...gyan-we-can-be-more-than-wizards-light.png | Bin 0 -> 36721 bytes ...gyan-why-i-like-really-big-models-dark.png | Bin 0 -> 36752 bytes ...yan-why-i-like-really-big-models-light.png | Bin 0 -> 35258 bytes .../python-is-not-an-acceptable-ml-dark.png | Bin 0 -> 38072 bytes .../python-is-not-an-acceptable-ml-light.png | Bin 0 -> 36326 bytes .../images/facilities/singularity/funding.jpg | Bin 0 -> 64187 bytes .../images/facilities/singularity/layout.jpg | Bin 0 -> 81781 bytes .../images/facilities/singularity/queue.jpg | Bin 0 -> 26700 bytes .../images/facilities/singularity/server1.jpg | Bin 0 -> 176565 bytes .../images/facilities/singularity/server2.jpg | Bin 0 -> 22726 bytes public/images/facilities/singularity/spec.jpg | Bin 0 -> 91202 bytes .../images/jee-open-house-2026-landscape.jpg | Bin 0 -> 133000 bytes public/images/jee-open-house-2026.jpg | Bin 0 -> 161307 bytes public/images/project-madhava-india-today.jpg | Bin 0 -> 208891 bytes scripts/generate-blog-title-images.py | 199 +++++ src/components/BaseHead.astro | 6 +- src/components/layout/footer.tsx | 16 +- src/components/layout/navbar.tsx | 76 +- src/components/layout/search-modal.tsx | 2 + .../sections/administration-page.astro | 57 +- src/components/sections/blog-post.tsx | 124 ++- src/components/sections/blog-posts.tsx | 693 +++++---------- src/components/sections/faculty-directory.tsx | 88 +- src/components/sections/hero.tsx | 65 +- .../sections/jee-open-house-promo.astro | 102 +++ src/components/sections/news-listing.astro | 15 +- .../sections/research-area-profile.astro | 197 +++++ src/components/sections/research-areas.tsx | 37 +- .../apeksha-acm-w-grad-cohort-2020-day-1.mdx | 15 + .../apeksha-acm-w-grad-cohort-2020-day-2.mdx | 15 + .../apeksha-acm-w-grad-cohort-2020-day-3.mdx | 15 + ...2020-women-conquering-computing-online.mdx | 15 + ...podcasting-experience-part-i-acm-india.mdx | 15 + ...casting-experience-part-ii-acm-w-india.mdx | 15 + ...perience-part-iii-student-participants.mdx | 15 + ...ng-experience-part-iv-industry-experts.mdx | 15 + ...dcasting-experience-part-v-researchers.mdx | 15 + ...asting-experience-part-vi-perspectives.mdx | 15 + ...ing-women-in-computer-science-research.mdx | 15 + .../blog/hackrush-2026-aditya-snake-bot.mdx | 4 +- .../blog/hackrush-2026-arpan-bazaar-iitgn.mdx | 4 +- ...-2026-nihar-bone-marrow-classification.mdx | 4 +- ...rush-2026-srihith-activation-functions.mdx | 4 +- ...hackrush-2026-surriya-archivist-puzzle.mdx | 4 +- .../hackrush-2026-yuvraj-ai-image-editor.mdx | 4 +- .../blog/kishan-gsoc-24-final-report.mdx | 17 + src/content/blog/kishan-gsoc-24-week-1.mdx | 17 + src/content/blog/kishan-gsoc-24-week-10.mdx | 17 + src/content/blog/kishan-gsoc-24-week-11.mdx | 17 + src/content/blog/kishan-gsoc-24-week-12.mdx | 17 + src/content/blog/kishan-gsoc-24-week-2.mdx | 17 + src/content/blog/kishan-gsoc-24-week-3.mdx | 17 + src/content/blog/kishan-gsoc-24-week-4.mdx | 17 + src/content/blog/kishan-gsoc-24-week-5.mdx | 17 + src/content/blog/kishan-gsoc-24-week-6.mdx | 17 + src/content/blog/kishan-gsoc-24-week-7.mdx | 17 + src/content/blog/kishan-gsoc-24-week-8.mdx | 17 + src/content/blog/kishan-gsoc-24-week-9.mdx | 17 + ...ishan-my-google-summer-of-code-journey.mdx | 17 + .../blog/kishan-my-gsoc-2024-project.mdx | 17 + src/content/blog/kishan-my-gsoc-progress.mdx | 17 + .../blog/kishan-pycon-2024-proposal.mdx | 17 + ...computer-science-teacher-training-2018.mdx | 2 +- ...c-2025-week-1-community-bonding-begins.mdx | 17 + ...ek-2-community-connections-pr-complete.mdx | 17 + .../nilay-gsoc-2025-week-3-quiet-momentum.mdx | 17 + ...y-gsoc-2025-week-4-smarter-coordinates.mdx | 17 + ...-hybrid-layout-custom-anchors-networkx.mdx | 17 + ...6-export-tests-and-residue-coordinates.mdx | 17 + ...025-week-7-testing-residue-coordinates.mdx | 17 + ...odularizing-and-algorithm-improvements.mdx | 17 + ...sting-and-refining-placement-algorithm.mdx | 17 + ...2025-welcome-drawing-bonds-that-matter.mdx | 17 + .../progyan-notes-on-distributed-training.mdx | 17 + .../blog/progyan-notes-on-language-models.mdx | 17 + src/content/blog/progyan-softer-software.mdx | 17 + .../progyan-we-can-be-more-than-wizards.mdx | 17 + .../progyan-why-i-like-really-big-models.mdx | 17 + .../blog/python-is-not-an-acceptable-ml.mdx | 2 +- src/data/faculty.ts | 399 +++++++++ src/data/news.ts | 209 ++++- src/data/phd-recent-graduates.ts | 128 +++ src/data/research-area-pages.ts | 819 ++++++++++++++++++ src/data/visitors.ts | 198 +++++ src/layouts/DefaultLayout.astro | 9 +- src/pages/about/facilities.astro | 32 +- src/pages/academics/mtech.astro | 7 +- src/pages/academics/phd.astro | 357 +++++++- src/pages/blog/[...slug].astro | 7 +- src/pages/blog/index.astro | 3 +- src/pages/facilities/singularity.astro | 446 ++++++++++ src/pages/hpc/[...path].astro | 35 + src/pages/hpc/index.astro | 22 + src/pages/index.astro | 4 +- src/pages/people/alumni.astro | 392 ++++++++- src/pages/people/visitors.astro | 113 ++- src/pages/research/ai.astro | 10 +- src/pages/research/data-science.astro | 10 +- src/pages/research/hci.astro | 10 +- src/pages/research/patents.astro | 356 +++++++- src/pages/research/projects.astro | 184 ++-- src/pages/research/security.astro | 10 +- src/pages/research/systems.astro | 10 +- src/pages/research/theory.astro | 10 +- src/pages/updates/blog.astro | 13 +- src/pages/updates/deadlines.astro | 25 +- src/pages/updates/events.astro | 2 +- src/pages/updates/outreach.astro | 69 +- 211 files changed, 5666 insertions(+), 837 deletions(-) create mode 100644 .env.example create mode 100644 .github/workflows/netlify-deploy.yml create mode 100644 blog-title-avatar-check.png create mode 100644 docs/web-request-agent-workflow.md create mode 100644 netlify.toml create mode 100644 public/_redirects create mode 100644 public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-1-dark.png create mode 100644 public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-1-light.png create mode 100644 public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-2-dark.png create mode 100644 public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-2-light.png create mode 100644 public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-3-dark.png create mode 100644 public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-3-light.png create mode 100644 public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-women-conquering-computing-online-dark.png create mode 100644 public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-women-conquering-computing-online-light.png create mode 100644 public/images/blog/title-cards/apeksha-my-podcasting-experience-part-i-acm-india-dark.png create mode 100644 public/images/blog/title-cards/apeksha-my-podcasting-experience-part-i-acm-india-light.png create mode 100644 public/images/blog/title-cards/apeksha-my-podcasting-experience-part-ii-acm-w-india-dark.png create mode 100644 public/images/blog/title-cards/apeksha-my-podcasting-experience-part-ii-acm-w-india-light.png create mode 100644 public/images/blog/title-cards/apeksha-my-podcasting-experience-part-iii-student-participants-dark.png create mode 100644 public/images/blog/title-cards/apeksha-my-podcasting-experience-part-iii-student-participants-light.png create mode 100644 public/images/blog/title-cards/apeksha-my-podcasting-experience-part-iv-industry-experts-dark.png create mode 100644 public/images/blog/title-cards/apeksha-my-podcasting-experience-part-iv-industry-experts-light.png create mode 100644 public/images/blog/title-cards/apeksha-my-podcasting-experience-part-v-researchers-dark.png create mode 100644 public/images/blog/title-cards/apeksha-my-podcasting-experience-part-v-researchers-light.png create mode 100644 public/images/blog/title-cards/apeksha-my-podcasting-experience-part-vi-perspectives-dark.png create mode 100644 public/images/blog/title-cards/apeksha-my-podcasting-experience-part-vi-perspectives-light.png create mode 100644 public/images/blog/title-cards/apeksha-promoting-women-in-computer-science-research-dark.png create mode 100644 public/images/blog/title-cards/apeksha-promoting-women-in-computer-science-research-light.png create mode 100644 public/images/blog/title-cards/hackrush-2026-aditya-snake-bot-dark.png create mode 100644 public/images/blog/title-cards/hackrush-2026-aditya-snake-bot-light.png create mode 100644 public/images/blog/title-cards/hackrush-2026-arpan-bazaar-iitgn-dark.png create mode 100644 public/images/blog/title-cards/hackrush-2026-arpan-bazaar-iitgn-light.png create mode 100644 public/images/blog/title-cards/hackrush-2026-nihar-bone-marrow-classification-dark.png create mode 100644 public/images/blog/title-cards/hackrush-2026-nihar-bone-marrow-classification-light.png create mode 100644 public/images/blog/title-cards/hackrush-2026-srihith-activation-functions-dark.png create mode 100644 public/images/blog/title-cards/hackrush-2026-srihith-activation-functions-light.png create mode 100644 public/images/blog/title-cards/hackrush-2026-surriya-archivist-puzzle-dark.png create mode 100644 public/images/blog/title-cards/hackrush-2026-surriya-archivist-puzzle-light.png create mode 100644 public/images/blog/title-cards/hackrush-2026-yuvraj-ai-image-editor-dark.png create mode 100644 public/images/blog/title-cards/hackrush-2026-yuvraj-ai-image-editor-light.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-final-report-dark.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-final-report-light.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-1-dark.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-1-light.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-10-dark.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-10-light.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-11-dark.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-11-light.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-12-dark.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-12-light.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-2-dark.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-2-light.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-3-dark.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-3-light.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-4-dark.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-4-light.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-5-dark.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-5-light.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-6-dark.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-6-light.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-7-dark.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-7-light.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-8-dark.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-8-light.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-9-dark.png create mode 100644 public/images/blog/title-cards/kishan-gsoc-24-week-9-light.png create mode 100644 public/images/blog/title-cards/kishan-my-google-summer-of-code-journey-dark.png create mode 100644 public/images/blog/title-cards/kishan-my-google-summer-of-code-journey-light.png create mode 100644 public/images/blog/title-cards/kishan-my-gsoc-2024-project-dark.png create mode 100644 public/images/blog/title-cards/kishan-my-gsoc-2024-project-light.png create mode 100644 public/images/blog/title-cards/kishan-my-gsoc-progress-dark.png create mode 100644 public/images/blog/title-cards/kishan-my-gsoc-progress-light.png create mode 100644 public/images/blog/title-cards/kishan-pycon-2024-proposal-dark.png create mode 100644 public/images/blog/title-cards/kishan-pycon-2024-proposal-light.png create mode 100644 public/images/blog/title-cards/kvs-computer-science-teacher-training-2018-dark.png create mode 100644 public/images/blog/title-cards/kvs-computer-science-teacher-training-2018-light.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-week-1-community-bonding-begins-dark.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-week-1-community-bonding-begins-light.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-week-2-community-connections-pr-complete-dark.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-week-2-community-connections-pr-complete-light.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-week-3-quiet-momentum-dark.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-week-3-quiet-momentum-light.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-week-4-smarter-coordinates-dark.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-week-4-smarter-coordinates-light.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-week-5-hybrid-layout-custom-anchors-networkx-dark.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-week-5-hybrid-layout-custom-anchors-networkx-light.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-week-6-export-tests-and-residue-coordinates-dark.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-week-6-export-tests-and-residue-coordinates-light.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-week-7-testing-residue-coordinates-dark.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-week-7-testing-residue-coordinates-light.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-week-8-modularizing-and-algorithm-improvements-dark.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-week-8-modularizing-and-algorithm-improvements-light.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-week-9-testing-and-refining-placement-algorithm-dark.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-week-9-testing-and-refining-placement-algorithm-light.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-welcome-drawing-bonds-that-matter-dark.png create mode 100644 public/images/blog/title-cards/nilay-gsoc-2025-welcome-drawing-bonds-that-matter-light.png create mode 100644 public/images/blog/title-cards/progyan-notes-on-distributed-training-dark.png create mode 100644 public/images/blog/title-cards/progyan-notes-on-distributed-training-light.png create mode 100644 public/images/blog/title-cards/progyan-notes-on-language-models-dark.png create mode 100644 public/images/blog/title-cards/progyan-notes-on-language-models-light.png create mode 100644 public/images/blog/title-cards/progyan-softer-software-dark.png create mode 100644 public/images/blog/title-cards/progyan-softer-software-light.png create mode 100644 public/images/blog/title-cards/progyan-we-can-be-more-than-wizards-dark.png create mode 100644 public/images/blog/title-cards/progyan-we-can-be-more-than-wizards-light.png create mode 100644 public/images/blog/title-cards/progyan-why-i-like-really-big-models-dark.png create mode 100644 public/images/blog/title-cards/progyan-why-i-like-really-big-models-light.png create mode 100644 public/images/blog/title-cards/python-is-not-an-acceptable-ml-dark.png create mode 100644 public/images/blog/title-cards/python-is-not-an-acceptable-ml-light.png create mode 100644 public/images/facilities/singularity/funding.jpg create mode 100644 public/images/facilities/singularity/layout.jpg create mode 100644 public/images/facilities/singularity/queue.jpg create mode 100644 public/images/facilities/singularity/server1.jpg create mode 100644 public/images/facilities/singularity/server2.jpg create mode 100644 public/images/facilities/singularity/spec.jpg create mode 100644 public/images/jee-open-house-2026-landscape.jpg create mode 100644 public/images/jee-open-house-2026.jpg create mode 100644 public/images/project-madhava-india-today.jpg create mode 100644 scripts/generate-blog-title-images.py create mode 100644 src/components/sections/jee-open-house-promo.astro create mode 100644 src/components/sections/research-area-profile.astro create mode 100644 src/content/blog/apeksha-acm-w-grad-cohort-2020-day-1.mdx create mode 100644 src/content/blog/apeksha-acm-w-grad-cohort-2020-day-2.mdx create mode 100644 src/content/blog/apeksha-acm-w-grad-cohort-2020-day-3.mdx create mode 100644 src/content/blog/apeksha-acm-w-grad-cohort-2020-women-conquering-computing-online.mdx create mode 100644 src/content/blog/apeksha-my-podcasting-experience-part-i-acm-india.mdx create mode 100644 src/content/blog/apeksha-my-podcasting-experience-part-ii-acm-w-india.mdx create mode 100644 src/content/blog/apeksha-my-podcasting-experience-part-iii-student-participants.mdx create mode 100644 src/content/blog/apeksha-my-podcasting-experience-part-iv-industry-experts.mdx create mode 100644 src/content/blog/apeksha-my-podcasting-experience-part-v-researchers.mdx create mode 100644 src/content/blog/apeksha-my-podcasting-experience-part-vi-perspectives.mdx create mode 100644 src/content/blog/apeksha-promoting-women-in-computer-science-research.mdx create mode 100644 src/content/blog/kishan-gsoc-24-final-report.mdx create mode 100644 src/content/blog/kishan-gsoc-24-week-1.mdx create mode 100644 src/content/blog/kishan-gsoc-24-week-10.mdx create mode 100644 src/content/blog/kishan-gsoc-24-week-11.mdx create mode 100644 src/content/blog/kishan-gsoc-24-week-12.mdx create mode 100644 src/content/blog/kishan-gsoc-24-week-2.mdx create mode 100644 src/content/blog/kishan-gsoc-24-week-3.mdx create mode 100644 src/content/blog/kishan-gsoc-24-week-4.mdx create mode 100644 src/content/blog/kishan-gsoc-24-week-5.mdx create mode 100644 src/content/blog/kishan-gsoc-24-week-6.mdx create mode 100644 src/content/blog/kishan-gsoc-24-week-7.mdx create mode 100644 src/content/blog/kishan-gsoc-24-week-8.mdx create mode 100644 src/content/blog/kishan-gsoc-24-week-9.mdx create mode 100644 src/content/blog/kishan-my-google-summer-of-code-journey.mdx create mode 100644 src/content/blog/kishan-my-gsoc-2024-project.mdx create mode 100644 src/content/blog/kishan-my-gsoc-progress.mdx create mode 100644 src/content/blog/kishan-pycon-2024-proposal.mdx create mode 100644 src/content/blog/nilay-gsoc-2025-week-1-community-bonding-begins.mdx create mode 100644 src/content/blog/nilay-gsoc-2025-week-2-community-connections-pr-complete.mdx create mode 100644 src/content/blog/nilay-gsoc-2025-week-3-quiet-momentum.mdx create mode 100644 src/content/blog/nilay-gsoc-2025-week-4-smarter-coordinates.mdx create mode 100644 src/content/blog/nilay-gsoc-2025-week-5-hybrid-layout-custom-anchors-networkx.mdx create mode 100644 src/content/blog/nilay-gsoc-2025-week-6-export-tests-and-residue-coordinates.mdx create mode 100644 src/content/blog/nilay-gsoc-2025-week-7-testing-residue-coordinates.mdx create mode 100644 src/content/blog/nilay-gsoc-2025-week-8-modularizing-and-algorithm-improvements.mdx create mode 100644 src/content/blog/nilay-gsoc-2025-week-9-testing-and-refining-placement-algorithm.mdx create mode 100644 src/content/blog/nilay-gsoc-2025-welcome-drawing-bonds-that-matter.mdx create mode 100644 src/content/blog/progyan-notes-on-distributed-training.mdx create mode 100644 src/content/blog/progyan-notes-on-language-models.mdx create mode 100644 src/content/blog/progyan-softer-software.mdx create mode 100644 src/content/blog/progyan-we-can-be-more-than-wizards.mdx create mode 100644 src/content/blog/progyan-why-i-like-really-big-models.mdx create mode 100644 src/data/phd-recent-graduates.ts create mode 100644 src/data/research-area-pages.ts create mode 100644 src/data/visitors.ts create mode 100644 src/pages/facilities/singularity.astro create mode 100644 src/pages/hpc/[...path].astro create mode 100644 src/pages/hpc/index.astro diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..b0fd366 --- /dev/null +++ b/.env.example @@ -0,0 +1,16 @@ +# Local values only. Do not commit real secrets. + +# Required by the Netlify deploy workflow. Store the real value as a GitHub +# repository secret named NETLIFY_AUTH_TOKEN. +NETLIFY_AUTH_TOKEN= + +# Needed by the future email request agent. Store these outside Git. +AGENTMAIL_API_KEY= +AGENTMAIL_INBOX= + +# Comma-separated allowlist for merge/deploy approvals received over email. +WEB_REQUEST_APPROVER_EMAILS=manu@iitgn.ac.in,anup@iitgn.ac.in,neeldhara@iitgn.ac.in + +# Comma-separated web team CC list for request acknowledgements and reviews. +WEB_TEAM_CC= + diff --git a/.github/workflows/netlify-deploy.yml b/.github/workflows/netlify-deploy.yml new file mode 100644 index 0000000..0fc79fe --- /dev/null +++ b/.github/workflows/netlify-deploy.yml @@ -0,0 +1,92 @@ +name: Netlify deploy + +on: + push: + branches: + - main + - staging + - "staging/**" + - "web-requests/**" + pull_request: + branches: + - main + - staging + workflow_dispatch: + +permissions: + contents: read + pull-requests: write + +env: + NETLIFY_SITE_ID: e20cb60a-0bfa-48dc-9e8e-5925b0c86ccd + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Node + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Build site + run: npm run build + + - name: Deploy to Netlify + id: deploy + env: + NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} + run: | + set -euo pipefail + + if [ -z "${NETLIFY_AUTH_TOKEN:-}" ]; then + echo "NETLIFY_AUTH_TOKEN is not configured as a repository secret." >&2 + exit 1 + fi + + branch="${GITHUB_HEAD_REF:-${GITHUB_REF_NAME}}" + alias="$(printf '%s' "$branch" \ + | tr '[:upper:]' '[:lower:]' \ + | sed -E 's/[^a-z0-9-]+/-/g; s/^-+//; s/-+$//' \ + | cut -c 1-37)" + + if [ -z "$alias" ]; then + alias="preview" + fi + + if [ "${GITHUB_EVENT_NAME}" = "push" ] && [ "${GITHUB_REF_NAME}" = "main" ]; then + deploy_json="$(npx netlify-cli@latest deploy --site "$NETLIFY_SITE_ID" --prod --dir=dist --json --message "Production deploy from ${GITHUB_SHA}")" + else + deploy_json="$(npx netlify-cli@latest deploy --site "$NETLIFY_SITE_ID" --dir=dist --alias "$alias" --json --message "Preview deploy for ${branch} at ${GITHUB_SHA}")" + fi + + printf '%s\n' "$deploy_json" + deploy_url="$(node -e 'const data = JSON.parse(process.argv[1]); console.log(data.deploy_url || data.deployUrl || data.deploy_ssl_url || data.ssl_url || data.url || "")' "$deploy_json")" + + if [ -n "$deploy_url" ]; then + echo "deploy_url=$deploy_url" >> "$GITHUB_OUTPUT" + echo "### Netlify deploy" >> "$GITHUB_STEP_SUMMARY" + echo "" >> "$GITHUB_STEP_SUMMARY" + echo "$deploy_url" >> "$GITHUB_STEP_SUMMARY" + fi + + - name: Comment preview URL on pull request + if: github.event_name == 'pull_request' && steps.deploy.outputs.deploy_url != '' + uses: actions/github-script@v7 + with: + script: | + const body = `Netlify preview deploy is ready:\n\n${{ steps.deploy.outputs.deploy_url }}`; + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + body, + }); diff --git a/blog-title-avatar-check.png b/blog-title-avatar-check.png new file mode 100644 index 0000000000000000000000000000000000000000..76e988cd769e6541ddaa8a7291601513f793b9ca GIT binary patch literal 128000 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