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 0000000..76e988c Binary files /dev/null and b/blog-title-avatar-check.png differ diff --git a/docs/web-request-agent-workflow.md b/docs/web-request-agent-workflow.md new file mode 100644 index 0000000..ae0f10d --- /dev/null +++ b/docs/web-request-agent-workflow.md @@ -0,0 +1,78 @@ +# Website Request Agent Workflow + +This repository is prepared for a staging-first website request workflow. + +## Current Repository Setup + +- Build command: `npm run build` +- Publish directory: `dist` +- Netlify site id: `e20cb60a-0bfa-48dc-9e8e-5925b0c86ccd` +- Production branch: `main` +- Staging/request branches: `staging`, `staging/**`, and `web-requests/**` + +The GitHub Actions workflow in `.github/workflows/netlify-deploy.yml` deploys: + +- `main` pushes to Netlify production. +- `staging`, `staging/**`, `web-requests/**`, and pull requests to Netlify preview/alias deploys. + +## Required Secrets + +Store these outside Git: + +- `NETLIFY_AUTH_TOKEN`: Netlify personal access token with deploy access to the site. +- `AGENTMAIL_API_KEY`: AgentMail API key for the intake/reply worker. +- `AGENTMAIL_INBOX`: the request inbox address, for example `cse-web-requests@...`. +- `WEB_REQUEST_APPROVER_EMAILS`: comma-separated approval allowlist. +- `WEB_TEAM_CC`: comma-separated web team CC list. + +Do not commit these values to the repository. + +## Request Flow + +1. A requester emails the AgentMail inbox with a website change request. +2. The email agent creates a branch named `web-requests/-`. +3. The agent applies the change, runs `npm run build`, commits, and pushes the branch. +4. Netlify deploys a preview for that branch. +5. The agent replies to the requester with: + - a summary of changes, + - the Netlify preview URL, + - the branch or pull request URL, + - any caveats or questions, + - `WEB_TEAM_CC` copied. +6. Only an allowlisted approver may authorize merge/deploy. + +## Approval Policy + +Allowed approvers: + +- `manu@iitgn.ac.in` +- `anup@iitgn.ac.in` +- `neeldhara@iitgn.ac.in` + +For email approvals, the agent should require an explicit approval token in the +same thread, for example: + +```text +APPROVE WEB-20260604-abc123 +``` + +The agent must verify: + +- the sender address is in `WEB_REQUEST_APPROVER_EMAILS`, +- the approval token matches the pending request, +- the thread being approved is the same request thread, +- `npm run build` passes on the final branch before merge. + +After approval, the agent merges the request branch into `main`, pushes `main`, +waits for Netlify production deploy, and emails the requester plus the web team +with the production URL. + +## Safety Rules + +- Never merge requests from arbitrary email senders. +- Never treat forwarded text as approval. +- Never deploy secrets or private attachments. +- Ask for clarification when a requested change is ambiguous or policy-relevant. +- Keep one branch per request; do not mix unrelated email requests. +- Include a concise change summary in every review email. + diff --git a/netlify.toml b/netlify.toml new file mode 100644 index 0000000..55effd6 --- /dev/null +++ b/netlify.toml @@ -0,0 +1,7 @@ +[build] +command = "npm run build" +publish = "dist" + +[build.environment] +NODE_VERSION = "22" + diff --git a/public/_redirects b/public/_redirects new file mode 100644 index 0000000..7ac80bd --- /dev/null +++ b/public/_redirects @@ -0,0 +1,7 @@ +/hpc /facilities/singularity 301 +/hpc/ /facilities/singularity 301 +/hpc/index.html /facilities/singularity 301 +/hpc/index.php /facilities/singularity 301 +/hpc/Software.html /facilities/singularity#software 301 +/hpc/Funding.html /facilities/singularity#funding 301 +/hpc/ContactUs.html /facilities/singularity#contact 301 diff --git a/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-1-dark.png b/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-1-dark.png new file mode 100644 index 0000000..3ce0df0 Binary files /dev/null and b/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-1-dark.png differ diff --git a/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-1-light.png b/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-1-light.png new file mode 100644 index 0000000..eb09896 Binary files /dev/null and b/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-1-light.png differ diff --git a/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-2-dark.png b/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-2-dark.png new file mode 100644 index 0000000..50adf72 Binary files /dev/null and b/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-2-dark.png differ diff --git a/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-2-light.png b/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-2-light.png new file mode 100644 index 0000000..e2d5f77 Binary files /dev/null and b/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-2-light.png differ diff --git a/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-3-dark.png b/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-3-dark.png new file mode 100644 index 0000000..e6c7948 Binary files /dev/null and b/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-3-dark.png differ diff --git a/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-3-light.png b/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-3-light.png new file mode 100644 index 0000000..6b17180 Binary files /dev/null and b/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-3-light.png differ diff --git a/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-women-conquering-computing-online-dark.png b/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-women-conquering-computing-online-dark.png new file mode 100644 index 0000000..bcea2d4 Binary files /dev/null and b/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-women-conquering-computing-online-dark.png differ diff --git a/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-women-conquering-computing-online-light.png b/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-women-conquering-computing-online-light.png new file mode 100644 index 0000000..82544e3 Binary files /dev/null and b/public/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-women-conquering-computing-online-light.png differ diff --git a/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-i-acm-india-dark.png b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-i-acm-india-dark.png new file mode 100644 index 0000000..02105d7 Binary files /dev/null and b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-i-acm-india-dark.png differ diff --git a/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-i-acm-india-light.png b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-i-acm-india-light.png new file mode 100644 index 0000000..713d307 Binary files /dev/null and b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-i-acm-india-light.png differ diff --git a/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-ii-acm-w-india-dark.png b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-ii-acm-w-india-dark.png new file mode 100644 index 0000000..e8d58e3 Binary files /dev/null and b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-ii-acm-w-india-dark.png differ diff --git a/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-ii-acm-w-india-light.png b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-ii-acm-w-india-light.png new file mode 100644 index 0000000..35022f2 Binary files /dev/null and b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-ii-acm-w-india-light.png differ diff --git a/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-iii-student-participants-dark.png b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-iii-student-participants-dark.png new file mode 100644 index 0000000..61ea49d Binary files /dev/null and b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-iii-student-participants-dark.png differ diff --git a/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-iii-student-participants-light.png b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-iii-student-participants-light.png new file mode 100644 index 0000000..a5c5c10 Binary files /dev/null and b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-iii-student-participants-light.png differ diff --git a/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-iv-industry-experts-dark.png b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-iv-industry-experts-dark.png new file mode 100644 index 0000000..b773e2d Binary files /dev/null and b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-iv-industry-experts-dark.png differ diff --git a/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-iv-industry-experts-light.png b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-iv-industry-experts-light.png new file mode 100644 index 0000000..69b4302 Binary files /dev/null and b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-iv-industry-experts-light.png differ diff --git a/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-v-researchers-dark.png b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-v-researchers-dark.png new file mode 100644 index 0000000..ee7a768 Binary files /dev/null and b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-v-researchers-dark.png differ diff --git a/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-v-researchers-light.png b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-v-researchers-light.png new file mode 100644 index 0000000..e15f7e8 Binary files /dev/null and b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-v-researchers-light.png differ diff --git a/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-vi-perspectives-dark.png b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-vi-perspectives-dark.png new file mode 100644 index 0000000..bd93a9d Binary files /dev/null and b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-vi-perspectives-dark.png differ diff --git a/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-vi-perspectives-light.png b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-vi-perspectives-light.png new file mode 100644 index 0000000..a7e65cc Binary files /dev/null and b/public/images/blog/title-cards/apeksha-my-podcasting-experience-part-vi-perspectives-light.png differ diff --git a/public/images/blog/title-cards/apeksha-promoting-women-in-computer-science-research-dark.png b/public/images/blog/title-cards/apeksha-promoting-women-in-computer-science-research-dark.png new file mode 100644 index 0000000..2d79db1 Binary files /dev/null and b/public/images/blog/title-cards/apeksha-promoting-women-in-computer-science-research-dark.png differ diff --git a/public/images/blog/title-cards/apeksha-promoting-women-in-computer-science-research-light.png b/public/images/blog/title-cards/apeksha-promoting-women-in-computer-science-research-light.png new file mode 100644 index 0000000..e3ea214 Binary files /dev/null and b/public/images/blog/title-cards/apeksha-promoting-women-in-computer-science-research-light.png differ diff --git a/public/images/blog/title-cards/hackrush-2026-aditya-snake-bot-dark.png b/public/images/blog/title-cards/hackrush-2026-aditya-snake-bot-dark.png new file mode 100644 index 0000000..18caddb Binary files /dev/null and b/public/images/blog/title-cards/hackrush-2026-aditya-snake-bot-dark.png differ diff --git a/public/images/blog/title-cards/hackrush-2026-aditya-snake-bot-light.png b/public/images/blog/title-cards/hackrush-2026-aditya-snake-bot-light.png new file mode 100644 index 0000000..6d29d95 Binary files /dev/null and b/public/images/blog/title-cards/hackrush-2026-aditya-snake-bot-light.png differ diff --git a/public/images/blog/title-cards/hackrush-2026-arpan-bazaar-iitgn-dark.png b/public/images/blog/title-cards/hackrush-2026-arpan-bazaar-iitgn-dark.png new file mode 100644 index 0000000..29bedca Binary files /dev/null and b/public/images/blog/title-cards/hackrush-2026-arpan-bazaar-iitgn-dark.png differ diff --git a/public/images/blog/title-cards/hackrush-2026-arpan-bazaar-iitgn-light.png b/public/images/blog/title-cards/hackrush-2026-arpan-bazaar-iitgn-light.png new file mode 100644 index 0000000..c2ab9c4 Binary files /dev/null and b/public/images/blog/title-cards/hackrush-2026-arpan-bazaar-iitgn-light.png differ diff --git a/public/images/blog/title-cards/hackrush-2026-nihar-bone-marrow-classification-dark.png b/public/images/blog/title-cards/hackrush-2026-nihar-bone-marrow-classification-dark.png new file mode 100644 index 0000000..3623309 Binary files /dev/null and b/public/images/blog/title-cards/hackrush-2026-nihar-bone-marrow-classification-dark.png differ diff --git a/public/images/blog/title-cards/hackrush-2026-nihar-bone-marrow-classification-light.png b/public/images/blog/title-cards/hackrush-2026-nihar-bone-marrow-classification-light.png new file mode 100644 index 0000000..9f66cf3 Binary files /dev/null and b/public/images/blog/title-cards/hackrush-2026-nihar-bone-marrow-classification-light.png differ diff --git a/public/images/blog/title-cards/hackrush-2026-srihith-activation-functions-dark.png b/public/images/blog/title-cards/hackrush-2026-srihith-activation-functions-dark.png new file mode 100644 index 0000000..693ad3c Binary files /dev/null and b/public/images/blog/title-cards/hackrush-2026-srihith-activation-functions-dark.png differ diff --git a/public/images/blog/title-cards/hackrush-2026-srihith-activation-functions-light.png b/public/images/blog/title-cards/hackrush-2026-srihith-activation-functions-light.png new file mode 100644 index 0000000..5ab778c Binary files /dev/null and b/public/images/blog/title-cards/hackrush-2026-srihith-activation-functions-light.png differ diff --git a/public/images/blog/title-cards/hackrush-2026-surriya-archivist-puzzle-dark.png b/public/images/blog/title-cards/hackrush-2026-surriya-archivist-puzzle-dark.png new file mode 100644 index 0000000..9953a86 Binary files /dev/null and b/public/images/blog/title-cards/hackrush-2026-surriya-archivist-puzzle-dark.png differ diff --git a/public/images/blog/title-cards/hackrush-2026-surriya-archivist-puzzle-light.png b/public/images/blog/title-cards/hackrush-2026-surriya-archivist-puzzle-light.png new file mode 100644 index 0000000..0e6bc95 Binary files /dev/null and b/public/images/blog/title-cards/hackrush-2026-surriya-archivist-puzzle-light.png differ diff --git a/public/images/blog/title-cards/hackrush-2026-yuvraj-ai-image-editor-dark.png b/public/images/blog/title-cards/hackrush-2026-yuvraj-ai-image-editor-dark.png new file mode 100644 index 0000000..3f060bc Binary files /dev/null and b/public/images/blog/title-cards/hackrush-2026-yuvraj-ai-image-editor-dark.png differ diff --git a/public/images/blog/title-cards/hackrush-2026-yuvraj-ai-image-editor-light.png b/public/images/blog/title-cards/hackrush-2026-yuvraj-ai-image-editor-light.png new file mode 100644 index 0000000..606efb3 Binary files /dev/null and b/public/images/blog/title-cards/hackrush-2026-yuvraj-ai-image-editor-light.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-final-report-dark.png b/public/images/blog/title-cards/kishan-gsoc-24-final-report-dark.png new file mode 100644 index 0000000..b38788f Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-final-report-dark.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-final-report-light.png b/public/images/blog/title-cards/kishan-gsoc-24-final-report-light.png new file mode 100644 index 0000000..fb0672f Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-final-report-light.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-1-dark.png b/public/images/blog/title-cards/kishan-gsoc-24-week-1-dark.png new file mode 100644 index 0000000..036a427 Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-1-dark.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-1-light.png b/public/images/blog/title-cards/kishan-gsoc-24-week-1-light.png new file mode 100644 index 0000000..ba68b11 Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-1-light.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-10-dark.png b/public/images/blog/title-cards/kishan-gsoc-24-week-10-dark.png new file mode 100644 index 0000000..2817f5d Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-10-dark.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-10-light.png b/public/images/blog/title-cards/kishan-gsoc-24-week-10-light.png new file mode 100644 index 0000000..a624b5a Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-10-light.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-11-dark.png b/public/images/blog/title-cards/kishan-gsoc-24-week-11-dark.png new file mode 100644 index 0000000..1b90719 Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-11-dark.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-11-light.png b/public/images/blog/title-cards/kishan-gsoc-24-week-11-light.png new file mode 100644 index 0000000..4d8c7eb Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-11-light.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-12-dark.png b/public/images/blog/title-cards/kishan-gsoc-24-week-12-dark.png new file mode 100644 index 0000000..dfd7181 Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-12-dark.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-12-light.png b/public/images/blog/title-cards/kishan-gsoc-24-week-12-light.png new file mode 100644 index 0000000..a8a8650 Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-12-light.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-2-dark.png b/public/images/blog/title-cards/kishan-gsoc-24-week-2-dark.png new file mode 100644 index 0000000..b0337d8 Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-2-dark.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-2-light.png b/public/images/blog/title-cards/kishan-gsoc-24-week-2-light.png new file mode 100644 index 0000000..bcdc20d Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-2-light.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-3-dark.png b/public/images/blog/title-cards/kishan-gsoc-24-week-3-dark.png new file mode 100644 index 0000000..ab2421c Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-3-dark.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-3-light.png b/public/images/blog/title-cards/kishan-gsoc-24-week-3-light.png new file mode 100644 index 0000000..9fc73ed Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-3-light.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-4-dark.png b/public/images/blog/title-cards/kishan-gsoc-24-week-4-dark.png new file mode 100644 index 0000000..05936af Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-4-dark.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-4-light.png b/public/images/blog/title-cards/kishan-gsoc-24-week-4-light.png new file mode 100644 index 0000000..e56e34e Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-4-light.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-5-dark.png b/public/images/blog/title-cards/kishan-gsoc-24-week-5-dark.png new file mode 100644 index 0000000..0db0f8e Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-5-dark.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-5-light.png b/public/images/blog/title-cards/kishan-gsoc-24-week-5-light.png new file mode 100644 index 0000000..c9620a6 Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-5-light.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-6-dark.png b/public/images/blog/title-cards/kishan-gsoc-24-week-6-dark.png new file mode 100644 index 0000000..a2ec209 Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-6-dark.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-6-light.png b/public/images/blog/title-cards/kishan-gsoc-24-week-6-light.png new file mode 100644 index 0000000..35d8e21 Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-6-light.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-7-dark.png b/public/images/blog/title-cards/kishan-gsoc-24-week-7-dark.png new file mode 100644 index 0000000..5981dfc Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-7-dark.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-7-light.png b/public/images/blog/title-cards/kishan-gsoc-24-week-7-light.png new file mode 100644 index 0000000..372b175 Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-7-light.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-8-dark.png b/public/images/blog/title-cards/kishan-gsoc-24-week-8-dark.png new file mode 100644 index 0000000..fd3b186 Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-8-dark.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-8-light.png b/public/images/blog/title-cards/kishan-gsoc-24-week-8-light.png new file mode 100644 index 0000000..ff4ea14 Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-8-light.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-9-dark.png b/public/images/blog/title-cards/kishan-gsoc-24-week-9-dark.png new file mode 100644 index 0000000..6ef5854 Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-9-dark.png differ diff --git a/public/images/blog/title-cards/kishan-gsoc-24-week-9-light.png b/public/images/blog/title-cards/kishan-gsoc-24-week-9-light.png new file mode 100644 index 0000000..035e214 Binary files /dev/null and b/public/images/blog/title-cards/kishan-gsoc-24-week-9-light.png differ diff --git a/public/images/blog/title-cards/kishan-my-google-summer-of-code-journey-dark.png b/public/images/blog/title-cards/kishan-my-google-summer-of-code-journey-dark.png new file mode 100644 index 0000000..d12f2b2 Binary files /dev/null and b/public/images/blog/title-cards/kishan-my-google-summer-of-code-journey-dark.png differ diff --git a/public/images/blog/title-cards/kishan-my-google-summer-of-code-journey-light.png b/public/images/blog/title-cards/kishan-my-google-summer-of-code-journey-light.png new file mode 100644 index 0000000..cd0d652 Binary files /dev/null and b/public/images/blog/title-cards/kishan-my-google-summer-of-code-journey-light.png differ diff --git a/public/images/blog/title-cards/kishan-my-gsoc-2024-project-dark.png b/public/images/blog/title-cards/kishan-my-gsoc-2024-project-dark.png new file mode 100644 index 0000000..5325998 Binary files /dev/null and b/public/images/blog/title-cards/kishan-my-gsoc-2024-project-dark.png differ diff --git a/public/images/blog/title-cards/kishan-my-gsoc-2024-project-light.png b/public/images/blog/title-cards/kishan-my-gsoc-2024-project-light.png new file mode 100644 index 0000000..0ba3a40 Binary files /dev/null and b/public/images/blog/title-cards/kishan-my-gsoc-2024-project-light.png differ diff --git a/public/images/blog/title-cards/kishan-my-gsoc-progress-dark.png b/public/images/blog/title-cards/kishan-my-gsoc-progress-dark.png new file mode 100644 index 0000000..c893a50 Binary files /dev/null and b/public/images/blog/title-cards/kishan-my-gsoc-progress-dark.png differ diff --git a/public/images/blog/title-cards/kishan-my-gsoc-progress-light.png b/public/images/blog/title-cards/kishan-my-gsoc-progress-light.png new file mode 100644 index 0000000..1b706e5 Binary files /dev/null and b/public/images/blog/title-cards/kishan-my-gsoc-progress-light.png differ diff --git a/public/images/blog/title-cards/kishan-pycon-2024-proposal-dark.png b/public/images/blog/title-cards/kishan-pycon-2024-proposal-dark.png new file mode 100644 index 0000000..04ed3f5 Binary files /dev/null and b/public/images/blog/title-cards/kishan-pycon-2024-proposal-dark.png differ diff --git a/public/images/blog/title-cards/kishan-pycon-2024-proposal-light.png b/public/images/blog/title-cards/kishan-pycon-2024-proposal-light.png new file mode 100644 index 0000000..76c0198 Binary files /dev/null and b/public/images/blog/title-cards/kishan-pycon-2024-proposal-light.png differ diff --git a/public/images/blog/title-cards/kvs-computer-science-teacher-training-2018-dark.png b/public/images/blog/title-cards/kvs-computer-science-teacher-training-2018-dark.png new file mode 100644 index 0000000..92edffc Binary files /dev/null and b/public/images/blog/title-cards/kvs-computer-science-teacher-training-2018-dark.png differ diff --git a/public/images/blog/title-cards/kvs-computer-science-teacher-training-2018-light.png b/public/images/blog/title-cards/kvs-computer-science-teacher-training-2018-light.png new file mode 100644 index 0000000..a340aa1 Binary files /dev/null and b/public/images/blog/title-cards/kvs-computer-science-teacher-training-2018-light.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-week-1-community-bonding-begins-dark.png b/public/images/blog/title-cards/nilay-gsoc-2025-week-1-community-bonding-begins-dark.png new file mode 100644 index 0000000..60e5f79 Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-week-1-community-bonding-begins-dark.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-week-1-community-bonding-begins-light.png b/public/images/blog/title-cards/nilay-gsoc-2025-week-1-community-bonding-begins-light.png new file mode 100644 index 0000000..da1cc88 Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-week-1-community-bonding-begins-light.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-week-2-community-connections-pr-complete-dark.png b/public/images/blog/title-cards/nilay-gsoc-2025-week-2-community-connections-pr-complete-dark.png new file mode 100644 index 0000000..2ec9339 Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-week-2-community-connections-pr-complete-dark.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-week-2-community-connections-pr-complete-light.png b/public/images/blog/title-cards/nilay-gsoc-2025-week-2-community-connections-pr-complete-light.png new file mode 100644 index 0000000..1e72c51 Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-week-2-community-connections-pr-complete-light.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-week-3-quiet-momentum-dark.png b/public/images/blog/title-cards/nilay-gsoc-2025-week-3-quiet-momentum-dark.png new file mode 100644 index 0000000..7b5269c Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-week-3-quiet-momentum-dark.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-week-3-quiet-momentum-light.png b/public/images/blog/title-cards/nilay-gsoc-2025-week-3-quiet-momentum-light.png new file mode 100644 index 0000000..8b3379a Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-week-3-quiet-momentum-light.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-week-4-smarter-coordinates-dark.png b/public/images/blog/title-cards/nilay-gsoc-2025-week-4-smarter-coordinates-dark.png new file mode 100644 index 0000000..65b3513 Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-week-4-smarter-coordinates-dark.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-week-4-smarter-coordinates-light.png b/public/images/blog/title-cards/nilay-gsoc-2025-week-4-smarter-coordinates-light.png new file mode 100644 index 0000000..aa5bc6f Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-week-4-smarter-coordinates-light.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-week-5-hybrid-layout-custom-anchors-networkx-dark.png b/public/images/blog/title-cards/nilay-gsoc-2025-week-5-hybrid-layout-custom-anchors-networkx-dark.png new file mode 100644 index 0000000..7da7f50 Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-week-5-hybrid-layout-custom-anchors-networkx-dark.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-week-5-hybrid-layout-custom-anchors-networkx-light.png b/public/images/blog/title-cards/nilay-gsoc-2025-week-5-hybrid-layout-custom-anchors-networkx-light.png new file mode 100644 index 0000000..7bb22ab Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-week-5-hybrid-layout-custom-anchors-networkx-light.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-week-6-export-tests-and-residue-coordinates-dark.png b/public/images/blog/title-cards/nilay-gsoc-2025-week-6-export-tests-and-residue-coordinates-dark.png new file mode 100644 index 0000000..fa9809a Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-week-6-export-tests-and-residue-coordinates-dark.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-week-6-export-tests-and-residue-coordinates-light.png b/public/images/blog/title-cards/nilay-gsoc-2025-week-6-export-tests-and-residue-coordinates-light.png new file mode 100644 index 0000000..ac664bb Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-week-6-export-tests-and-residue-coordinates-light.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-week-7-testing-residue-coordinates-dark.png b/public/images/blog/title-cards/nilay-gsoc-2025-week-7-testing-residue-coordinates-dark.png new file mode 100644 index 0000000..6d07c2d Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-week-7-testing-residue-coordinates-dark.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-week-7-testing-residue-coordinates-light.png b/public/images/blog/title-cards/nilay-gsoc-2025-week-7-testing-residue-coordinates-light.png new file mode 100644 index 0000000..01d21f8 Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-week-7-testing-residue-coordinates-light.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-week-8-modularizing-and-algorithm-improvements-dark.png b/public/images/blog/title-cards/nilay-gsoc-2025-week-8-modularizing-and-algorithm-improvements-dark.png new file mode 100644 index 0000000..58d49af Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-week-8-modularizing-and-algorithm-improvements-dark.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-week-8-modularizing-and-algorithm-improvements-light.png b/public/images/blog/title-cards/nilay-gsoc-2025-week-8-modularizing-and-algorithm-improvements-light.png new file mode 100644 index 0000000..2919236 Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-week-8-modularizing-and-algorithm-improvements-light.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-week-9-testing-and-refining-placement-algorithm-dark.png b/public/images/blog/title-cards/nilay-gsoc-2025-week-9-testing-and-refining-placement-algorithm-dark.png new file mode 100644 index 0000000..3b9cca9 Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-week-9-testing-and-refining-placement-algorithm-dark.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-week-9-testing-and-refining-placement-algorithm-light.png b/public/images/blog/title-cards/nilay-gsoc-2025-week-9-testing-and-refining-placement-algorithm-light.png new file mode 100644 index 0000000..90c8b55 Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-week-9-testing-and-refining-placement-algorithm-light.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-welcome-drawing-bonds-that-matter-dark.png b/public/images/blog/title-cards/nilay-gsoc-2025-welcome-drawing-bonds-that-matter-dark.png new file mode 100644 index 0000000..373e498 Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-welcome-drawing-bonds-that-matter-dark.png differ diff --git a/public/images/blog/title-cards/nilay-gsoc-2025-welcome-drawing-bonds-that-matter-light.png b/public/images/blog/title-cards/nilay-gsoc-2025-welcome-drawing-bonds-that-matter-light.png new file mode 100644 index 0000000..d7badc3 Binary files /dev/null and b/public/images/blog/title-cards/nilay-gsoc-2025-welcome-drawing-bonds-that-matter-light.png differ diff --git a/public/images/blog/title-cards/progyan-notes-on-distributed-training-dark.png b/public/images/blog/title-cards/progyan-notes-on-distributed-training-dark.png new file mode 100644 index 0000000..68d478d Binary files /dev/null and b/public/images/blog/title-cards/progyan-notes-on-distributed-training-dark.png differ diff --git a/public/images/blog/title-cards/progyan-notes-on-distributed-training-light.png b/public/images/blog/title-cards/progyan-notes-on-distributed-training-light.png new file mode 100644 index 0000000..fae1b17 Binary files /dev/null and b/public/images/blog/title-cards/progyan-notes-on-distributed-training-light.png differ diff --git a/public/images/blog/title-cards/progyan-notes-on-language-models-dark.png b/public/images/blog/title-cards/progyan-notes-on-language-models-dark.png new file mode 100644 index 0000000..eee17c4 Binary files /dev/null and b/public/images/blog/title-cards/progyan-notes-on-language-models-dark.png differ diff --git a/public/images/blog/title-cards/progyan-notes-on-language-models-light.png b/public/images/blog/title-cards/progyan-notes-on-language-models-light.png new file mode 100644 index 0000000..96a8ab8 Binary files /dev/null and b/public/images/blog/title-cards/progyan-notes-on-language-models-light.png differ diff --git a/public/images/blog/title-cards/progyan-softer-software-dark.png b/public/images/blog/title-cards/progyan-softer-software-dark.png new file mode 100644 index 0000000..6e0ea5f Binary files /dev/null and b/public/images/blog/title-cards/progyan-softer-software-dark.png differ diff --git a/public/images/blog/title-cards/progyan-softer-software-light.png b/public/images/blog/title-cards/progyan-softer-software-light.png new file mode 100644 index 0000000..9f5f419 Binary files /dev/null and b/public/images/blog/title-cards/progyan-softer-software-light.png differ diff --git a/public/images/blog/title-cards/progyan-we-can-be-more-than-wizards-dark.png b/public/images/blog/title-cards/progyan-we-can-be-more-than-wizards-dark.png new file mode 100644 index 0000000..aeeaefa Binary files /dev/null and b/public/images/blog/title-cards/progyan-we-can-be-more-than-wizards-dark.png differ diff --git a/public/images/blog/title-cards/progyan-we-can-be-more-than-wizards-light.png b/public/images/blog/title-cards/progyan-we-can-be-more-than-wizards-light.png new file mode 100644 index 0000000..9cdd60e Binary files /dev/null and b/public/images/blog/title-cards/progyan-we-can-be-more-than-wizards-light.png differ diff --git a/public/images/blog/title-cards/progyan-why-i-like-really-big-models-dark.png b/public/images/blog/title-cards/progyan-why-i-like-really-big-models-dark.png new file mode 100644 index 0000000..5d86e72 Binary files /dev/null and b/public/images/blog/title-cards/progyan-why-i-like-really-big-models-dark.png differ diff --git a/public/images/blog/title-cards/progyan-why-i-like-really-big-models-light.png b/public/images/blog/title-cards/progyan-why-i-like-really-big-models-light.png new file mode 100644 index 0000000..73315d7 Binary files /dev/null and b/public/images/blog/title-cards/progyan-why-i-like-really-big-models-light.png differ diff --git a/public/images/blog/title-cards/python-is-not-an-acceptable-ml-dark.png b/public/images/blog/title-cards/python-is-not-an-acceptable-ml-dark.png new file mode 100644 index 0000000..e565b62 Binary files /dev/null and b/public/images/blog/title-cards/python-is-not-an-acceptable-ml-dark.png differ diff --git a/public/images/blog/title-cards/python-is-not-an-acceptable-ml-light.png b/public/images/blog/title-cards/python-is-not-an-acceptable-ml-light.png new file mode 100644 index 0000000..2848a33 Binary files /dev/null and b/public/images/blog/title-cards/python-is-not-an-acceptable-ml-light.png differ diff --git a/public/images/facilities/singularity/funding.jpg b/public/images/facilities/singularity/funding.jpg new file mode 100644 index 0000000..cd7de36 Binary files /dev/null and b/public/images/facilities/singularity/funding.jpg differ diff --git a/public/images/facilities/singularity/layout.jpg b/public/images/facilities/singularity/layout.jpg new file mode 100644 index 0000000..27c8170 Binary files /dev/null and b/public/images/facilities/singularity/layout.jpg differ diff --git a/public/images/facilities/singularity/queue.jpg b/public/images/facilities/singularity/queue.jpg new file mode 100644 index 0000000..38dbb9e Binary files /dev/null and b/public/images/facilities/singularity/queue.jpg differ diff --git a/public/images/facilities/singularity/server1.jpg b/public/images/facilities/singularity/server1.jpg new file mode 100644 index 0000000..507f91c Binary files /dev/null and b/public/images/facilities/singularity/server1.jpg differ diff --git a/public/images/facilities/singularity/server2.jpg b/public/images/facilities/singularity/server2.jpg new file mode 100644 index 0000000..6c2827c Binary files /dev/null and b/public/images/facilities/singularity/server2.jpg differ diff --git a/public/images/facilities/singularity/spec.jpg b/public/images/facilities/singularity/spec.jpg new file mode 100644 index 0000000..133705f Binary files /dev/null and b/public/images/facilities/singularity/spec.jpg differ diff --git a/public/images/jee-open-house-2026-landscape.jpg b/public/images/jee-open-house-2026-landscape.jpg new file mode 100644 index 0000000..f7950f6 Binary files /dev/null and b/public/images/jee-open-house-2026-landscape.jpg differ diff --git a/public/images/jee-open-house-2026.jpg b/public/images/jee-open-house-2026.jpg new file mode 100644 index 0000000..0f8881f Binary files /dev/null and b/public/images/jee-open-house-2026.jpg differ diff --git a/public/images/project-madhava-india-today.jpg b/public/images/project-madhava-india-today.jpg new file mode 100644 index 0000000..d8ca85d Binary files /dev/null and b/public/images/project-madhava-india-today.jpg differ diff --git a/scripts/generate-blog-title-images.py b/scripts/generate-blog-title-images.py new file mode 100644 index 0000000..fad8657 --- /dev/null +++ b/scripts/generate-blog-title-images.py @@ -0,0 +1,199 @@ +#!/usr/bin/env python3 + +from __future__ import annotations + +import re +import textwrap +from pathlib import Path + +from PIL import Image, ImageDraw, ImageFont + + +ROOT = Path(__file__).resolve().parents[1] +BLOG_DIR = ROOT / "src" / "content" / "blog" +OUTPUT_DIR = ROOT / "public" / "images" / "blog" / "title-cards" +WIDTH = 1200 +HEIGHT = 630 +FONT_BOLD = Path("/System/Library/Fonts/Supplemental/Arial Bold.ttf") + +PALETTES = { + "light": { + "start": (248, 252, 255), + "mid": (255, 247, 243), + "end": (243, 252, 248), + "text": (19, 32, 51), + "icon_bg": (255, 255, 255), + "icon_stroke": (71, 99, 135), + "icon_border": (215, 226, 238), + }, + "dark": { + "start": (225, 233, 245), + "mid": (237, 228, 246), + "end": (221, 239, 241), + "text": (17, 24, 39), + "icon_bg": (246, 249, 253), + "icon_stroke": (54, 76, 112), + "icon_border": (198, 210, 226), + }, +} + + +def extract_title(path: Path) -> str: + text = path.read_text(encoding="utf-8") + match = re.search(r"^title:\s*['\"](.+?)['\"]\s*$", text, flags=re.MULTILINE) + if not match: + raise ValueError(f"Could not find title in {path}") + return match.group(1) + + +def interpolate(a: int, b: int, t: float) -> int: + return round(a + (b - a) * t) + + +def gradient(palette: dict[str, tuple[int, int, int]]) -> Image.Image: + image = Image.new("RGB", (WIDTH, HEIGHT)) + pixels = image.load() + for y in range(HEIGHT): + vertical = y / (HEIGHT - 1) + for x in range(WIDTH): + horizontal = x / (WIDTH - 1) + t = (horizontal * 0.72) + (vertical * 0.28) + if t < 0.5: + local = t / 0.5 + a = palette["start"] + b = palette["mid"] + else: + local = (t - 0.5) / 0.5 + a = palette["mid"] + b = palette["end"] + pixels[x, y] = tuple(interpolate(a[i], b[i], local) for i in range(3)) + return image + + +def wrap_title( + draw: ImageDraw.ImageDraw, + title: str, + font: ImageFont.FreeTypeFont, + max_width: int, +) -> list[str]: + words = title.split() + lines: list[str] = [] + current: list[str] = [] + + for word in words: + candidate = " ".join([*current, word]) + bbox = draw.textbbox((0, 0), candidate, font=font) + if bbox[2] - bbox[0] <= max_width: + current.append(word) + else: + if current: + lines.append(" ".join(current)) + current = [word] + + if current: + lines.append(" ".join(current)) + + return lines + + +def fit_title( + draw: ImageDraw.ImageDraw, + title: str, +) -> tuple[ImageFont.FreeTypeFont, list[str], int]: + max_width = 820 + max_height = 330 + + for size in range(68, 37, -2): + font = ImageFont.truetype(str(FONT_BOLD), size=size) + lines = wrap_title(draw, title, font, max_width) + line_height = round(size * 1.16) + total_height = line_height * len(lines) + widest = max( + (draw.textbbox((0, 0), line, font=font)[2] for line in lines), + default=0, + ) + if total_height <= max_height and widest <= max_width and len(lines) <= 4: + return font, lines, line_height + + font = ImageFont.truetype(str(FONT_BOLD), size=40) + lines = textwrap.wrap(title, width=28) + return font, lines, 48 + + +def draw_article_icon( + draw: ImageDraw.ImageDraw, + palette: dict[str, tuple[int, int, int]], +) -> None: + x = 86 + y = 76 + size = 92 + radius = 24 + stroke = palette["icon_stroke"] + + draw.rounded_rectangle( + (x, y, x + size, y + size), + radius=radius, + fill=palette["icon_bg"], + outline=palette["icon_border"], + width=2, + ) + + page_left = x + 30 + page_top = y + 23 + page_right = x + 62 + page_bottom = y + 69 + fold = 10 + + draw.line((page_left, page_top, page_right - fold, page_top), fill=stroke, width=3) + draw.line((page_right, page_top + fold, page_right, page_bottom), fill=stroke, width=3) + draw.line((page_left, page_top, page_left, page_bottom), fill=stroke, width=3) + draw.line((page_left, page_bottom, page_right, page_bottom), fill=stroke, width=3) + draw.line((page_right - fold, page_top, page_right, page_top + fold), fill=stroke, width=3) + draw.line((page_right - fold, page_top, page_right - fold, page_top + fold), fill=stroke, width=2) + draw.line((page_right - fold, page_top + fold, page_right, page_top + fold), fill=stroke, width=2) + + for offset in (24, 34, 44): + draw.line( + (page_left + 7, page_top + offset, page_right - 7, page_top + offset), + fill=stroke, + width=3, + ) + + +def render_card(title: str, palette_name: str, output_path: Path) -> None: + palette = PALETTES[palette_name] + image = gradient(palette) + draw = ImageDraw.Draw(image) + draw_article_icon(draw, palette) + font, lines, line_height = fit_title(draw, title) + + total_height = line_height * len(lines) + right_margin = 88 + bottom_margin = 86 + y = HEIGHT - bottom_margin - total_height + + for line in lines: + bbox = draw.textbbox((0, 0), line, font=font) + line_width = bbox[2] - bbox[0] + x = WIDTH - right_margin - line_width + draw.text((x, y), line, fill=palette["text"], font=font) + y += line_height + + output_path.parent.mkdir(parents=True, exist_ok=True) + image.save(output_path, "PNG", optimize=True) + + +def main() -> None: + for path in sorted(BLOG_DIR.glob("*.mdx")): + title = extract_title(path) + slug = path.stem + for palette_name in PALETTES: + render_card( + title, + palette_name, + OUTPUT_DIR / f"{slug}-{palette_name}.png", + ) + + +if __name__ == "__main__": + main() diff --git a/src/components/BaseHead.astro b/src/components/BaseHead.astro index 0382501..0534c31 100644 --- a/src/components/BaseHead.astro +++ b/src/components/BaseHead.astro @@ -6,10 +6,11 @@ import { SITE_TITLE, SITE_METADATA } from '../consts'; const canonicalURL = new URL(Astro.url.pathname, Astro.site); -const { title, description, image } = Astro.props; +const { title, description, image, imageAlt } = Astro.props; const finalTitle = title || SITE_METADATA.title.default; const finalDescription = description || SITE_METADATA.description; const finalImage = image || SITE_METADATA.openGraph.images[0].url; +const finalImageAlt = imageAlt || finalTitle; const imageURL = new URL(finalImage, Astro.url); --- @@ -83,7 +84,7 @@ const imageURL = new URL(finalImage, Astro.url); property="og:image:height" content={SITE_METADATA.openGraph.images[0].height.toString()} /> - + @@ -91,4 +92,5 @@ const imageURL = new URL(finalImage, Astro.url); + diff --git a/src/components/layout/footer.tsx b/src/components/layout/footer.tsx index 491e006..beb227d 100644 --- a/src/components/layout/footer.tsx +++ b/src/components/layout/footer.tsx @@ -23,7 +23,7 @@ footerLinks.push({ id: 'updates', items: [ { text: 'News', link: '/updates/news' }, - { text: 'Blog', link: '/updates/blog' }, + { text: 'Blog', link: '/blog' }, { text: 'Seminars', link: '/updates/seminars' }, { text: 'Deadlines', link: '/updates/deadlines' }, { text: 'Outreach', link: '/updates/outreach' }, @@ -65,10 +65,16 @@ const RSS_ICON = { }; const socialLinks = [ - { icon: SOCIAL_ICONS.x, link: 'https://x.com/iaboratories' }, - { icon: SOCIAL_ICONS.linkedin, link: 'https://linkedin.com' }, - { icon: SOCIAL_ICONS.youtube, link: 'https://youtube.com' }, - { icon: SOCIAL_ICONS.instagram, link: 'https://instagram.com' }, + { icon: SOCIAL_ICONS.x, link: 'https://twitter.com/cse_iitgn' }, + { + icon: SOCIAL_ICONS.linkedin, + link: 'https://www.linkedin.com/company/cse-iitgn', + }, + { + icon: SOCIAL_ICONS.youtube, + link: 'https://www.youtube.com/channel/UCPYUnvUV3CiMmkhfYME48QQ', + }, + { icon: SOCIAL_ICONS.instagram, link: 'https://instagram.com/iit_gandhinagar' }, { icon: RSS_ICON, link: '/rss.xml' }, ]; diff --git a/src/components/layout/navbar.tsx b/src/components/layout/navbar.tsx index 8a4e63d..b705d47 100644 --- a/src/components/layout/navbar.tsx +++ b/src/components/layout/navbar.tsx @@ -5,6 +5,7 @@ import { Fragment, useEffect, useState } from 'react'; import type { LucideIcon } from 'lucide-react'; import { ArrowRight, + Award, BookOpen, Brain, Briefcase, @@ -51,16 +52,20 @@ import { } from '@/components/ui/navigation-menu'; import { Separator } from '@/components/ui/separator'; import { Sheet, SheetContent, SheetTitle } from '@/components/ui/sheet'; +import { + RESEARCH_AREAS, + type ResearchAreaSlug, +} from '@/data/research-area-pages'; import { seminarNavHighlights } from '@/data/seminars'; import { cn } from '@/lib/utils'; const RESEARCH_THEMES = [ - { icon: Brain, label: 'AI & Machine Learning', href: '/research/ai', description: 'Deep learning, NLP, computer vision, and AI for social good.' }, - { icon: Code2, label: 'Theoretical CS', href: '/research/theory', description: 'Algorithms, complexity, graph theory, and combinatorial optimization.' }, - { icon: Lock, label: 'Security & Privacy', href: '/research/security', description: 'Program analysis, web security, and privacy-preserving computation.' }, - { icon: Database, label: 'Data Science', href: '/research/data-science', description: 'Large-scale analytics, streaming algorithms, and knowledge discovery.' }, - { icon: Monitor, label: 'Systems & Architecture', href: '/research/systems', description: 'Computer architecture, embedded systems, and hardware-software co-design.' }, - { icon: Network, label: 'HCI & Cognitive Science', href: '/research/hci', description: 'Brain-computer interfaces, accessibility, and cognitive modeling.' }, + { slug: 'ai', icon: Brain, label: 'AI & Machine Learning', href: '/research/ai', description: 'Deep learning, NLP, computer vision, and AI for social good.' }, + { slug: 'theory', icon: Code2, label: 'Theoretical CS', href: '/research/theory', description: 'Algorithms, complexity, graph theory, and combinatorial optimization.' }, + { slug: 'security', icon: Lock, label: 'Security & Privacy', href: '/research/security', description: 'Program analysis, web security, and privacy-preserving computation.' }, + { slug: 'data-science', icon: Database, label: 'Data Science', href: '/research/data-science', description: 'Large-scale analytics, streaming algorithms, and knowledge discovery.' }, + { slug: 'systems', icon: Monitor, label: 'Systems & Architecture', href: '/research/systems', description: 'Computer architecture, embedded systems, and hardware-software co-design.' }, + { slug: 'hci', icon: Network, label: 'HCI & Cognitive Science', href: '/research/hci', description: 'Brain-computer interfaces, accessibility, and cognitive modeling.' }, ]; const RESEARCH_FEATURED = [ @@ -102,7 +107,7 @@ const ACADEMICS_PROGRAMS: AcademicsLink[] = [ { label: 'MTech', href: '/academics/mtech', - description: 'Explore masters and dual-degree programs in CSE and AI', + description: 'Explore masters and dual-degree programs in CSE, AI, and ICDT', icon: GraduationCap, }, { @@ -160,7 +165,7 @@ const ACADEMICS_FEATURED = [ ]; const UPDATES_LINKS = [ - { icon: FileText, label: 'Blog', description: 'Articles and perspectives', href: '/updates/blog' }, + { icon: FileText, label: 'Blog', description: 'Articles and perspectives', href: '/blog' }, { icon: Newspaper, label: 'News', description: 'Announcements and highlights', href: '/updates/news' }, { icon: Calendar, label: 'Seminars', description: 'Talks and lecture series', href: '/updates/seminars' }, { icon: BookOpen, label: 'Deadlines', description: 'Upcoming important dates', href: '/updates/deadlines' }, @@ -169,10 +174,10 @@ const UPDATES_LINKS = [ ]; const SOCIAL_LINKS_NAV = [ - { title: 'X', href: 'https://x.com/iaboratories', icon: 'https://deifkwefumgah.cloudfront.net/shadcnblocks/block/logos/x.svg' }, - { title: 'LinkedIn', href: 'https://linkedin.com', icon: 'https://deifkwefumgah.cloudfront.net/shadcnblocks/block/logos/linkedin-icon.svg' }, - { title: 'YouTube', href: 'https://youtube.com', icon: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2.5 17a24.12 24.12 0 0 1 0-10 2 2 0 0 1 1.4-1.4 49.56 49.56 0 0 1 16.2 0A2 2 0 0 1 21.5 7a24.12 24.12 0 0 1 0 10 2 2 0 0 1-1.4 1.4 49.55 49.55 0 0 1-16.2 0A2 2 0 0 1 2.5 17'/%3E%3Cpath d='m10 15 5-3-5-3z'/%3E%3C/svg%3E" }, - { title: 'Instagram', href: 'https://instagram.com', icon: 'https://deifkwefumgah.cloudfront.net/shadcnblocks/block/logos/instagram-icon.svg' }, + { title: 'X', href: 'https://twitter.com/cse_iitgn', icon: 'https://deifkwefumgah.cloudfront.net/shadcnblocks/block/logos/x.svg' }, + { title: 'LinkedIn', href: 'https://www.linkedin.com/company/cse-iitgn', icon: 'https://deifkwefumgah.cloudfront.net/shadcnblocks/block/logos/linkedin-icon.svg' }, + { title: 'YouTube', href: 'https://www.youtube.com/channel/UCPYUnvUV3CiMmkhfYME48QQ', icon: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2.5 17a24.12 24.12 0 0 1 0-10 2 2 0 0 1 1.4-1.4 49.56 49.56 0 0 1 16.2 0A2 2 0 0 1 21.5 7a24.12 24.12 0 0 1 0 10 2 2 0 0 1-1.4 1.4 49.55 49.55 0 0 1-16.2 0A2 2 0 0 1 2.5 17'/%3E%3Cpath d='m10 15 5-3-5-3z'/%3E%3C/svg%3E" }, + { title: 'Instagram', href: 'https://instagram.com/iit_gandhinagar', icon: 'https://deifkwefumgah.cloudfront.net/shadcnblocks/block/logos/instagram-icon.svg' }, { title: 'RSS', href: '/rss.xml', icon: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'/%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'/%3E%3Ccircle cx='5' cy='19' r='1'/%3E%3C/svg%3E" }, ]; @@ -180,10 +185,9 @@ const LATEST_SEMINARS = seminarNavHighlights.latest; const THEORY_SEMINARS = seminarNavHighlights.theory; const FEATURED_ARTICLE = { - title: 'How AI is Transforming Climate Research at IITGN', - description: 'A look at how CSE faculty are using machine learning to model climate patterns.', - image: 'https://images.unsplash.com/photo-1504639725590-34d0984388bd?w=400&h=200&fit=crop', - href: '/blog', + title: 'Building an AI Image Editor at Hackrush 2026', + description: 'A student account of building a modular AI image editor during Hackrush 2026.', + href: '/blog/hackrush-2026-yuvraj-ai-image-editor', }; interface NavSubitem { @@ -253,6 +257,8 @@ export const NAV_LINKS: NavItem[] = [ { label: 'Post-Docs', href: '/people/postdocs', description: 'Postdoctoral researchers and fellows' }, { label: 'Faculty', href: '/people/faculty', description: 'Core, affiliated, visiting, and guest faculty' }, { label: 'Staff', href: '/people/staff', description: 'Administrative and technical staff' }, + { label: 'Alumni', href: '/people/alumni', description: 'Public alumni trajectories and achievements' }, + { label: 'Visitors', href: '/people/visitors', description: 'Seminar visitors and invited speakers' }, ], }, { @@ -260,7 +266,7 @@ export const NAV_LINKS: NavItem[] = [ href: '/academics', subitems: [ { label: 'BTech', href: '/academics/btech', description: 'Undergraduate programs in CSE, AI, and ICDT' }, - { label: 'MTech', href: '/academics/mtech', description: 'Masters and dual-degree programs in CSE and AI' }, + { label: 'MTech', href: '/academics/mtech', description: 'Masters and dual-degree programs in CSE, AI, and ICDT' }, { label: 'EMasters', href: '/academics/emasters', description: 'Executive masters programs in data analytics' }, { label: 'PhD', href: '/academics/phd', description: 'Graduate programs in CSE and AI' }, { label: 'SRIP', href: '/academics/srip', description: 'Flagship summer internship program' }, @@ -288,7 +294,7 @@ export const NAV_LINKS: NavItem[] = [ label: 'Updates', href: '/news', subitems: [ - { label: 'Blog', href: '/updates/blog', description: 'Articles and perspectives' }, + { label: 'Blog', href: '/blog', description: 'Articles and perspectives' }, { label: 'News', href: '/updates/news', description: 'Announcements and highlights' }, { label: 'Seminars', href: '/updates/seminars', description: 'Talks and lecture series' }, { label: 'Deadlines', href: '/updates/deadlines', description: 'Upcoming important dates' }, @@ -619,7 +625,20 @@ function DesktopMenuItem({ href={theme.href} className="group flex gap-3 transition-opacity duration-200" > -
+
@@ -745,13 +764,6 @@ function DesktopMenuItem({ Featured Article

-
- {FEATURED_ARTICLE.title} -

{FEATURED_ARTICLE.title}

@@ -998,6 +1010,18 @@ const PEOPLE_LINKS = [ description: 'Core, affiliated, visiting, and guest faculty', icon: BookOpen, }, + { + label: 'Alumni', + href: '/people/alumni', + description: 'Public alumni trajectories and achievements', + icon: Award, + }, + { + label: 'Visitors', + href: '/people/visitors', + description: 'Seminar visitors and invited speakers', + icon: Calendar, + }, { label: 'Staff', href: '/people/staff', diff --git a/src/components/layout/search-modal.tsx b/src/components/layout/search-modal.tsx index 8d6b819..92983af 100644 --- a/src/components/layout/search-modal.tsx +++ b/src/components/layout/search-modal.tsx @@ -8,9 +8,11 @@ import { cn } from '@/lib/utils'; const PAGES = [ { title: 'Faculty', href: '/people/faculty', section: 'People' }, + { title: 'Alumni', href: '/people/alumni', section: 'People' }, { title: 'Staff', href: '/people/staff', section: 'People' }, { title: 'Research Scholars', href: '/people/students', section: 'People' }, { title: 'Postdoctoral Researchers', href: '/people/postdocs', section: 'People' }, + { title: 'Visitors', href: '/people/visitors', section: 'People' }, { title: 'B.Tech Program', href: '/academics/btech', section: 'Academics' }, { title: 'M.Tech Program', href: '/academics/mtech', section: 'Academics' }, { title: 'PhD Program', href: '/academics/phd', section: 'Academics' }, diff --git a/src/components/sections/administration-page.astro b/src/components/sections/administration-page.astro index f51b4d5..5f026e3 100644 --- a/src/components/sections/administration-page.astro +++ b/src/components/sections/administration-page.astro @@ -1,4 +1,6 @@ --- +import { Globe2 } from 'lucide-react'; + type Committee = { title: string; members: string[]; @@ -7,15 +9,12 @@ type Committee = { type CommitteeGroup = { title: string; - description: string; committees: Committee[]; }; const committeeGroups: CommitteeGroup[] = [ { title: 'Academic Governance', - description: - 'Representatives and coordinators for senate-facing academic processes, admissions, qualifying exams, and data science coordination.', committees: [ { title: 'SAPC Representative', @@ -42,8 +41,6 @@ const committeeGroups: CommitteeGroup[] = [ }, { title: 'Courses and Programs', - description: - 'Coordination roles for project courses, thesis or project courses, joint programs, and supervisor allocation.', committees: [ { title: 'UG Project Courses and Grades Coordinator', @@ -65,8 +62,6 @@ const committeeGroups: CommitteeGroup[] = [ }, { title: 'Department Planning and Outreach', - description: - 'Coordinators for resources, department vision, recruitment, communication, and public visibility.', committees: [ { title: 'Resource Management and Planning Coordinators', @@ -89,6 +84,14 @@ const committeeGroups: CommitteeGroup[] = [ ], }, ]; + +const departmentHead = { + name: 'Prof. Shanmuganathan Raman', + role: 'Head of Department', + title: 'Professor, Electrical Engineering', + affiliation: 'Jointly with Computer Science & Engineering', + profile: 'https://iitgn.ac.in/faculty/ee/fac-shanmuganathan', +}; ---
@@ -103,16 +106,39 @@ const committeeGroups: CommitteeGroup[] = [

Department-level committee assignments and administrative coordination - roles, consolidated from the current CSE office orders. + roles.

-
-
+ @@ -125,10 +151,6 @@ const committeeGroups: CommitteeGroup[] = [

Roles and coordinators

-

- Faculty members in these committees may co-opt other department faculty - members as required for carrying out specific tasks. -

@@ -137,9 +159,6 @@ const committeeGroups: CommitteeGroup[] = [

{group.title}

-

- {group.description} -

{group.committees.map((committee) => ( diff --git a/src/components/sections/blog-post.tsx b/src/components/sections/blog-post.tsx index 517c564..80a6577 100644 --- a/src/components/sections/blog-post.tsx +++ b/src/components/sections/blog-post.tsx @@ -1,8 +1,5 @@ import type { CollectionEntry } from 'astro:content'; import { ChevronLeft, Facebook, Twitter, MessageCircle } from 'lucide-react'; -import { motion } from 'motion/react'; - -import { BlogCard } from './blog-posts'; /** * Calculate read time based on word count @@ -33,6 +30,50 @@ export function calculateReadTime(content: string): string { return `${Math.max(1, minutes)} min read`; } +const TAG_LABELS: Record = { + 'hackrush 2026': '#hackrush2026', + hackrush2026: '#hackrush2026', +}; + +function tagKey(tag: string) { + return tag.toLowerCase().replace(/[#\s-]/g, ''); +} + +function displayTag(tag: string) { + return TAG_LABELS[tag.trim().toLowerCase()] ?? tag; +} + +function getDisplayTags(tags: string[] = []) { + const seen = new Set(); + return tags + .map(displayTag) + .filter((tag) => { + const key = tagKey(tag); + if (seen.has(key)) return false; + seen.add(key); + return true; + }); +} + +function relatedDate(date: Date | string) { + return new Date(date).toLocaleDateString('en-GB', { + month: 'short', + day: '2-digit', + }); +} + +function tagFilterHref(tag: string) { + return `/blog?tag=${encodeURIComponent(tag)}`; +} + +function authorInitials(name: string) { + const parts = name.trim().split(/\s+/).filter(Boolean); + if (parts.length === 0) return 'CSE'; + if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase(); + + return `${parts[0][0]}${parts[parts.length - 1][0]}`.toUpperCase(); +} + const BlogPost = ({ post, relatedPosts, @@ -42,9 +83,10 @@ const BlogPost = ({ relatedPosts: CollectionEntry<'blog'>[]; children: React.ReactNode; }) => { - const { title, description, date, coverImage, author } = post[0].data; - const { id, body } = post[0]; + const { title, description, date, author } = post[0].data; + const { body } = post[0]; const readTime = calculateReadTime(body || ''); + const initials = authorInitials(author.name); return (
@@ -60,37 +102,28 @@ const BlogPost = ({ {/* Title and Description */} -

+

{title}

-

+

{description}

- - {title} - - {/* Author Information */} -
+
-
- {author.name} +
-
+
{author.name}
-
+
{new Date(date).toLocaleDateString('en-GB', { month: 'short', day: 'numeric', @@ -131,24 +164,43 @@ const BlogPost = ({
{relatedPosts.length > 0 && ( -
-

+
+

Related Articles

-

- More writing from the IITGN CSE community, grouped by shared - themes and tags. -

-
+
{relatedPosts.map((relatedPost) => { + const tags = getDisplayTags(relatedPost.data.tags).slice(0, 2); + return ( - - - + + + {relatedPost.data.title} + + + {tags.map((tag) => ( + + {tag} + + ))} + +
); })}
diff --git a/src/components/sections/blog-posts.tsx b/src/components/sections/blog-posts.tsx index c4d5c56..160dcdf 100644 --- a/src/components/sections/blog-posts.tsx +++ b/src/components/sections/blog-posts.tsx @@ -1,536 +1,259 @@ -'use client'; - -import { useEffect, useState } from 'react'; - -import { ArrowUpRight } from 'lucide-react'; -import { AnimatePresence, motion, useScroll, useTransform } from 'motion/react'; +import { useEffect, useMemo, useState } from 'react'; import { Badge } from '@/components/ui/badge'; -import { - Card, - CardContent, - CardFooter, - CardHeader, -} from '@/components/ui/card'; -import { - Pagination, - PaginationContent, - PaginationItem, - PaginationLink, - PaginationNext, - PaginationPrevious, -} from '@/components/ui/pagination'; -import { ScrollArea } from '@/components/ui/scroll-area'; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from '@/components/ui/select'; -import { Tabs, TabsList, TabsTrigger } from '@/components/ui/tabs'; -import usePrefersReducedMotion from '@/hooks/usePrefersReducedMotion'; +import { Card, CardContent } from '@/components/ui/card'; import { cn } from '@/lib/utils'; -/** - * Calculate read time based on word count - * @param content - The markdown content to analyze - * @returns Formatted read time string (e.g., "5 min read") - */ -export function calculateReadTime(content: string): string { - // Remove markdown syntax and count words - const cleanContent = content - .replace(/#{1,6}\s+/g, '') // Remove headers - .replace(/\*\*(.*?)\*\*/g, '$1') // Remove bold - .replace(/\*(.*?)\*/g, '$1') // Remove italic - .replace(/\[(.*?)\]\(.*?\)/g, '$1') // Remove links - .replace(/```[\s\S]*?```/g, '') // Remove code blocks - .replace(/`(.*?)`/g, '$1') // Remove inline code - .replace(/^\s*[-*+]\s+/gm, '') // Remove list markers - .replace(/^\s*\d+\.\s+/gm, '') // Remove numbered list markers - .replace(/---[\s\S]*?---/g, '') // Remove frontmatter - .trim(); - - const words = cleanContent.split(/\s+/).filter((word) => word.length > 0); - const wordCount = words.length; - - // Average reading speed is 200-250 words per minute, using 225 - const readingSpeed = 225; - const minutes = Math.ceil(wordCount / readingSpeed); - - return `${Math.max(1, minutes)} min read`; -} - export type EnhancedBlogPost = import('astro:content').CollectionEntry<'blog'>; interface BlogClientProps { posts: EnhancedBlogPost[]; } -export default function BlogPosts({ posts }: BlogClientProps) { - const prefersReducedMotion = usePrefersReducedMotion(); - const [selectedCategory, setSelectedCategory] = useState('View all'); - const [sortBy, setSortBy] = useState('newest'); - const [currentPage, setCurrentPage] = useState(1); - const [isScrolling, setIsScrolling] = useState(false); - const postsPerPage = 9; - const { scrollY } = useScroll(); - const categories = [ - 'View all', - ...Array.from( - new Set( - posts - .map((post) => post.data.tags?.[0]) - .filter((tag): tag is string => Boolean(tag)), - ), - ), - ]; +const TAG_LABELS: Record = { + 'hackrush 2026': '#hackrush2026', + hackrush2026: '#hackrush2026', +}; - // Scroll-based animations for featured card - const imageScale = useTransform(scrollY, [0, 600], [1, 1.15]); +function tagKey(tag: string) { + return tag.toLowerCase().replace(/[#\s-]/g, ''); +} - const filteredPosts = posts - .filter( - (post) => - selectedCategory === 'View all' || - post.data.tags?.includes(selectedCategory), - ) - .sort((a, b) => { - if (sortBy === 'newest') { - return ( - new Date(b.data.date).getTime() - new Date(a.data.date).getTime() - ); - } else { - return ( - new Date(a.data.date).getTime() - new Date(b.data.date).getTime() - ); - } +function displayTag(tag: string) { + return TAG_LABELS[tag.trim().toLowerCase()] ?? tag; +} + +function getDisplayTags(tags: string[] = []) { + const seen = new Set(); + return tags + .map(displayTag) + .filter((tag) => { + const key = tagKey(tag); + if (seen.has(key)) return false; + seen.add(key); + return true; }); +} - const featuredPost = posts[0]; - const allRegularPosts = filteredPosts.slice(1); +function formattedDate(date: Date | string) { + return new Date(date).toLocaleDateString('en-GB', { + month: 'short', + day: 'numeric', + year: 'numeric', + }); +} - // Pagination logic - const totalPages = Math.ceil(allRegularPosts.length / postsPerPage); - const startIndex = (currentPage - 1) * postsPerPage; - const endIndex = startIndex + postsPerPage; - const currentPosts = allRegularPosts.slice(startIndex, endIndex); +function archiveDate(date: Date | string) { + return new Date(date).toLocaleDateString('en-GB', { + month: 'short', + day: '2-digit', + }); +} + +function yearOf(date: Date | string) { + return new Date(date).getFullYear().toString(); +} + +export default function BlogPosts({ posts }: BlogClientProps) { + const [activeTag, setActiveTag] = useState(''); - // Update isScrolling state when user scrolls useEffect(() => { - const updateScrollState = () => { - if (window.scrollY > 5 && !isScrolling) { - setIsScrolling(true); - } - }; + const params = new URLSearchParams(window.location.search); + setActiveTag(params.get('tag') ?? ''); + }, []); - window.addEventListener('scroll', updateScrollState); - return () => window.removeEventListener('scroll', updateScrollState); - }, [isScrolling]); + const sortedPosts = useMemo( + () => + posts.slice().sort((a, b) => { + const aTime = new Date(a.data.date).getTime(); + const bTime = new Date(b.data.date).getTime(); + return bTime - aTime; + }), + [posts], + ); - // Reset to page 1 when category changes - const handleCategoryChange = (category: string) => { - setSelectedCategory(category); - setCurrentPage(1); - }; + const filteredPosts = useMemo(() => { + if (!activeTag) return sortedPosts; + const activeKey = tagKey(activeTag); - // Animation variants for featured card - const featuredContainer = { - hidden: { opacity: 0 }, - visible: { - opacity: 1, - transition: { - staggerChildren: 0.2, - delayChildren: 0.3, - }, + return sortedPosts.filter((post) => + getDisplayTags(post.data.tags).some((tag) => tagKey(tag) === activeKey), + ); + }, [activeTag, sortedPosts]); + + const groupedPosts = filteredPosts.reduce>( + (groups, post) => { + const year = yearOf(post.data.date); + groups[year] = groups[year] ?? []; + groups[year].push(post); + return groups; }, - }; + {}, + ); - const featuredItem = { - hidden: { opacity: 0, y: 30, filter: 'blur(2px)' }, - visible: { - opacity: 1, - y: 0, - filter: 'blur(0px)', - transition: { - type: 'spring' as const, - stiffness: 60, - damping: 20, - }, - }, - }; + const years = Object.keys(groupedPosts).sort( + (a, b) => Number(b) - Number(a), + ); + const activeTagLabel = activeTag ? displayTag(activeTag) : ''; + + function applyTagFilter(tag: string) { + const nextTag = activeTag && tagKey(activeTag) === tagKey(tag) ? '' : tag; + setActiveTag(nextTag); + + const url = new URL(window.location.href); + if (nextTag) { + url.searchParams.set('tag', nextTag); + } else { + url.searchParams.delete('tag'); + } + window.history.replaceState({}, '', `${url.pathname}${url.search}`); + } - // Animation variants for individual blog cards - const cardVariants = { - hidden: { - opacity: 0, - y: 20, - filter: 'blur(3px)', - scale: 0.98, - }, - visible: { - opacity: 1, - y: 0, - filter: 'blur(0px)', - scale: 1, - transition: { - type: 'spring' as const, - stiffness: 120, - damping: 25, - mass: 1, - duration: 0.6, - }, - }, - }; return ( -
- {/* Hero Section */} -
-

- Blog -

-

- Read our latest articles -

- - {featuredPost && ( - - +
+
+
+
+

+ Blog +

+

+ Articles, essays, and student perspectives from the CSE + community. +

+
+
- {/* Image */} -
- - {featuredPost.data.title} -
- - - {/* Desktop overlay - only shows on md+ */} - - -

- {featuredPost.data.title} -

- -
- - {featuredPost.data.description} - - -
-
-
Written by
-
- {featuredPost.data.author.name} - - {featuredPost.data.author.name} - -
-
-
-
Published on
-
- {new Date(featuredPost.data.date).toLocaleDateString( - 'en-GB', - { - month: 'short', - day: 'numeric', - year: 'numeric', - }, - )} -
-
-
-
- {featuredPost.data.tags?.slice(0, 3).map((tag) => ( - - {tag} - - ))} -
-
-
-
- - {/* Mobile Content - Shows on mobile */} -
- -
- {featuredPost.data.tags?.slice(0, 3).map((tag) => ( - - {tag} - - ))} -
-
- -

- {featuredPost.data.title} -

- -
-
- - {/* Mobile Content - Shows below image on mobile */} -
- - {featuredPost.data.description} - - -
- {featuredPost.data.author.name} -
-
- {featuredPost.data.author.name} -
-
- {new Date(featuredPost.data.date).toLocaleDateString( - 'en-GB', - { - month: 'short', - day: 'numeric', - year: 'numeric', - }, - )} -
-
-
-
-
-
-
- )} -
- - {/* Filter Controls */} -
-
- - - - {categories.map((category) => ( - - {category} - - ))} - - - -
- -
- -
-
- -

- Read all articles -

- {/* Regular Posts Grid */} -
- {currentPosts.map((post) => ( - - - + RSS - - ))} -
+
+
- {/* Pagination */} - - {totalPages > 1 && ( - - - - - { - e.preventDefault(); - if (currentPage > 1) setCurrentPage(currentPage - 1); - }} - className={ - currentPage === 1 ? 'pointer-events-none opacity-50' : '' - } - /> - - - {Array.from({ length: totalPages }, (_, i) => i + 1).map( - (page) => ( - - { - e.preventDefault(); - setCurrentPage(page); - }} - isActive={currentPage === page} - > - {page} - - - ), - )} - - - { - e.preventDefault(); - if (currentPage < totalPages) - setCurrentPage(currentPage + 1); - }} - className={ - currentPage === totalPages - ? 'pointer-events-none opacity-50' - : '' - } - /> - - - - + {activeTagLabel && ( +
+ + Showing {filteredPosts.length} of {sortedPosts.length} posts + tagged{' '} + + {activeTagLabel} + + . + + +
)} -
+ +
+ {years.length > 0 ? ( + years.map((year) => ( +
+

+ {year} +

+
+ {groupedPosts[year].map((post) => { + const tags = getDisplayTags(post.data.tags).slice(0, 2); + + return ( +
+ + + {post.data.title} + + + {tags.map((tag) => { + const isActive = + activeTag && tagKey(activeTag) === tagKey(tag); + + return ( + + ); + })} + +
+ ); + })} +
+
+ )) + ) : ( +

+ No posts match this tag. +

+ )} +
+
); } interface BlogCardProps { post: EnhancedBlogPost; - featured?: boolean; className?: string; } -export function BlogCard({ post, featured = false, className }: BlogCardProps) { - if (featured) { - // Featured card is handled separately in the main component - return null; - } +export function BlogCard({ post, className }: BlogCardProps) { + const tags = getDisplayTags(post.data.tags); return ( - - - {post.data.title} - - - -
- {post.data.tags?.[0]} - - {new Date(post.data.date).toLocaleDateString('en-GB', { - month: 'short', - day: 'numeric', - year: 'numeric', - })} - -
- -

{post.data.title}

-
- - - Read now - -
- {post.data.tags?.slice(0, 2).map((tag) => ( - + +
+ {tags.slice(0, 3).map((tag) => ( + {tag} ))}
- +

{post.data.title}

+

+ {post.data.description} +

+
+ {formattedDate(post.data.date)} +
+
); } diff --git a/src/components/sections/faculty-directory.tsx b/src/components/sections/faculty-directory.tsx index ca93f0d..3fbc10e 100644 --- a/src/components/sections/faculty-directory.tsx +++ b/src/components/sections/faculty-directory.tsx @@ -2,7 +2,18 @@ import { useState } from 'react'; -import { Filter, Globe } from 'lucide-react'; +import { + AtSign, + BookOpen, + Database, + ExternalLink, + Filter, + Github, + Globe, + Linkedin, + Youtube, + type LucideIcon, +} from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Card } from '@/components/ui/card'; @@ -12,8 +23,22 @@ import { FACULTY, type FacultyCategory, type FacultyMember, + type FacultyProfileLink, + type FacultyProfileLinkType, } from '@/data/faculty'; +const PROFILE_LINK_ICONS: Record = { + website: ExternalLink, + scholar: BookOpen, + dblp: Database, + github: Github, + youtube: Youtube, + linkedin: Linkedin, + x: AtSign, + mastodon: AtSign, + profile: Globe, +}; + function FacultyCard({ member }: { member: FacultyMember }) { const initials = member.name .split(' ') @@ -27,32 +52,65 @@ function FacultyCard({ member }: { member: FacultyMember }) { : member.secondaryDepartment ? `Also affiliated with ${member.secondaryDepartment}` : undefined; + const isHeadOfDepartment = member.name === 'Shanmuganathan Raman'; + const profileLinks: FacultyProfileLink[] = [ + ...(member.homepage + ? [ + { + type: 'profile' as const, + label: 'IITGN faculty profile', + url: member.homepage, + }, + ] + : []), + ...(member.links ?? []), + ]; return ( - + + {isHeadOfDepartment && ( + + HoD + + )}
{initials}
-
+

{member.name}

{member.designation}

- {member.homepage && ( - - - - )} +
+ {profileLinks.map((link) => { + const Icon = PROFILE_LINK_ICONS[link.type]; + + return ( + + + + ); + })} +
{affiliationLine && (

diff --git a/src/components/sections/hero.tsx b/src/components/sections/hero.tsx index 72f1228..f4ffda6 100644 --- a/src/components/sections/hero.tsx +++ b/src/components/sections/hero.tsx @@ -6,26 +6,25 @@ import { AnimatePresence, motion } from 'motion/react'; import { ArrowRight } from 'lucide-react'; import { Button } from '@/components/ui/button'; -import { cn } from '@/lib/utils'; const slides = [ { - src: 'https://images.unsplash.com/photo-1639322537228-f710d846310a?w=1528&h=700&fit=crop', - alt: 'Abstract digital network', - title: 'Explore our programs', - description: 'B.Tech, M.Tech, and Ph.D. programs in Computer Science & Engineering.', + src: '/images/jee-open-house-2026-landscape.jpg', + alt: 'JEE Open House 2026 at IIT Gandhinagar', + title: 'JEE Open House 2026', + description: + 'June 5, 2026 at 3:30 PM IST. Online session for JEE Advanced qualified students and parents.', + ctaLabel: 'Register Now', + ctaHref: 'https://zurl.co/Tgat9', }, { - src: 'https://images.unsplash.com/photo-1635070041078-e363dbe005cb?w=1528&h=700&fit=crop', - alt: 'Abstract geometric patterns', - title: 'Explore our research', - description: 'Cutting-edge research across AI, systems, security, theory, and more.', - }, - { - src: 'https://images.unsplash.com/photo-1620712943543-bcc4688e7485?w=1528&h=700&fit=crop', - alt: 'Abstract AI visualization', - title: 'Join our community', - description: 'A vibrant student community with clubs, events, and hackathons.', + src: '/images/project-madhava-india-today.jpg', + alt: 'Project Madhav hardware learning kits displayed at the AI Summit 2026', + title: + "Inside IIT Gandhinagar's prototype lab: Project Madhav leads innovation", + ctaLabel: 'Read Article', + ctaHref: + 'https://www.indiatoday.in/education-today/featurephilia/story/iit-gandhinagars-self-reliant-india-story-begins-in-classrooms-2869886-2026-02-18', }, ]; @@ -118,7 +117,7 @@ export default function Hero() { useEffect(() => { const timer = setTimeout(() => { setCurrentIndex((prevIndex) => (prevIndex + 1) % slides.length); - }, 2500); + }, 5000); return () => clearTimeout(timer); }, [currentIndex]); @@ -165,7 +164,7 @@ export default function Hero() { - {/* Top-right box with dummy text */} + {/* Top-right slide summary */}

{slides[currentIndex].title}

-

- {slides[currentIndex].description} -

+ {slides[currentIndex].description && ( +

+ {slides[currentIndex].description} +

+ )}
@@ -206,9 +207,11 @@ export default function Hero() {

{slides[currentIndex].title}

-

- {slides[currentIndex].description} -

+ {slides[currentIndex].description && ( +

+ {slides[currentIndex].description} +

+ )}
@@ -218,8 +221,20 @@ export default function Hero() { className="group -bottom-5 left-0 mt-3 flex items-center justify-center rounded-full bg-foreground px-6 py-2 text-background tracking-tight hover:bg-blue-500 dark:hover:bg-blue-400 hover:gap-4 lg:absolute lg:bottom-0 lg:mt-0 xl:bottom-3" asChild > - - Contact Us{' '} + + {slides[currentIndex].ctaLabel}{' '} diff --git a/src/components/sections/jee-open-house-promo.astro b/src/components/sections/jee-open-house-promo.astro new file mode 100644 index 0000000..5ef25dc --- /dev/null +++ b/src/components/sections/jee-open-house-promo.astro @@ -0,0 +1,102 @@ +--- +import { + ArrowRight, + CalendarDays, + Clock3, + ExternalLink, + MonitorPlay, + UsersRound, +} from 'lucide-react'; + +interface Props { + variant?: 'home' | 'deadlines'; +} + +const { variant = 'home' } = Astro.props; + +const registerUrl = 'https://zurl.co/Tgat9'; +const announcementUrl = + 'https://www.linkedin.com/posts/indian-institute-of-technology-gandhinagar-iitgn-_iitgn-jeeopenhouse2026-jeeadvanced-activity-7467168090930302976-1d_s'; +const sectionClass = + variant === 'home' + ? 'pb-10 pt-0 md:pb-12' + : 'pb-12 pt-8 md:pb-16 md:pt-10'; +--- + +
+
+
+
+
+

+ Admissions event +

+

+ JEE Open House 2026: Explore IIT Gandhinagar +

+

+ JEE Advanced qualified students and parents are invited to an + online interactive session with IITGN leadership, faculty, Career + Development Services, students, and alumni. +

+ +
+
+
+
+
June 5, 2026
+
+
+
+
+
3:30 PM IST
+
+
+
+
+
Online session
+
+
+ +
+
+ + +
+
+
+
+
diff --git a/src/components/sections/news-listing.astro b/src/components/sections/news-listing.astro index 877d0bc..99838d2 100644 --- a/src/components/sections/news-listing.astro +++ b/src/components/sections/news-listing.astro @@ -1,7 +1,14 @@ --- -import { allDepartmentNews, CATEGORY_LABELS } from '@/data/news'; +import { allDepartmentNews, CATEGORY_LABELS, type NewsCategory } from '@/data/news'; -const categoryOrder = ['media', 'research', 'award', 'event', 'infrastructure']; +const categoryOrder: NewsCategory[] = [ + 'media', + 'research', + 'award', + 'event', + 'infrastructure', + 'service', +]; ---
@@ -11,8 +18,8 @@ const categoryOrder = ['media', 'research', 'award', 'event', 'infrastructure'];

CSE in the News

- Recent media coverage, research highlights, awards, and department - achievements. + Recent media coverage, research highlights, awards, professional service, + and department achievements.

diff --git a/src/components/sections/research-area-profile.astro b/src/components/sections/research-area-profile.astro new file mode 100644 index 0000000..3a6cf4c --- /dev/null +++ b/src/components/sections/research-area-profile.astro @@ -0,0 +1,197 @@ +--- +import { ArrowUpRight, Globe } from 'lucide-react'; + +import type { ResearchAreaPage } from '@/data/research-area-pages'; + +type Props = { + area: ResearchAreaPage; +}; + +const { area } = Astro.props; + +const accentStyle = `--area-accent: ${area.accent.foreground}; --area-accent-soft: ${area.accent.soft}; --area-accent-bg: ${area.accent.background}; --area-accent-header: ${area.accent.header}; --area-accent-border: ${area.accent.border};`; +--- + +
+
+
+
+

+ Research Area +

+

+ {area.title} +

+

+ {area.description} +

+
+
+
+ +{ + area.featuredVideo && ( +
+
+
+
+
+

+ Featured Video +

+

+ {area.featuredVideo.title} +

+
+ + Watch on YouTube + +
+
+
+ +
+
+
+
+
+ ) +} + +
+
+
+
+

Research Themes

+

+ What the group works on +

+
+ { + area.themes.map((theme) => ( + + {theme} + + )) + } +
+
+ +
+

Faculty

+

+ People shaping this area +

+
+ { + area.faculty.map((faculty) => ( +
+
+
+

{faculty.name}

+

+ {faculty.title} +

+
+ {faculty.profile && ( + + + + )} +
+

+ {faculty.focus} +

+
+ )) + } +
+
+
+
+
+ +
+
+
+
+

Selected Publications

+

+ Recent Publications +

+
+ { + area.publications.map((publication) => ( +
+

{publication.title}

+

+ {publication.detail} +

+ {publication.href && ( + + Read more + + )} +
+ )) + } +
+
+ +
+

Projects & Outputs

+

+ Representative Projects +

+
+ { + area.projects.map((project) => ( +
+

{project.title}

+

+ {project.detail} +

+ {project.href && ( + + Read more + + )} +
+ )) + } +
+
+
+
+
+
diff --git a/src/components/sections/research-areas.tsx b/src/components/sections/research-areas.tsx index 0be9089..46f020d 100644 --- a/src/components/sections/research-areas.tsx +++ b/src/components/sections/research-areas.tsx @@ -9,42 +9,57 @@ import { Network, } from 'lucide-react'; -import { Card } from '@/components/ui/card'; +import { + RESEARCH_AREAS, + type ResearchAreaSlug, +} from '@/data/research-area-pages'; const AREAS = [ { + slug: 'ai', icon: Brain, title: 'Artificial Intelligence & ML', + href: '/research/ai', description: 'Deep learning, NLP, computer vision, reinforcement learning, and AI for social good.', }, { + slug: 'theory', icon: Code2, title: 'Theoretical Computer Science', + href: '/research/theory', description: 'Algorithms, computational complexity, graph theory, and combinatorial optimization.', }, { + slug: 'security', icon: Lock, title: 'Security & Privacy', + href: '/research/security', description: 'Program analysis, web security, information flow, and privacy-preserving computation.', }, { + slug: 'data-science', icon: Database, title: 'Data Science & Mining', + href: '/research/data-science', description: 'Large-scale data analytics, streaming algorithms, and knowledge discovery.', }, { + slug: 'systems', icon: Monitor, title: 'Systems & Architecture', + href: '/research/systems', description: 'Computer architecture, embedded systems, VLSI design, and hardware-software co-design.', }, { + slug: 'hci', icon: Network, title: 'HCI & Cognitive Science', + href: '/research/hci', description: 'Brain-computer interfaces, accessibility, human-AI interaction, and cognitive modeling.', }, @@ -62,20 +77,32 @@ export default function ResearchAreas() {

{AREAS.map((area, i) => ( -

{area.title}

-
+

{area.description}

- + ))}
diff --git a/src/content/blog/apeksha-acm-w-grad-cohort-2020-day-1.mdx b/src/content/blog/apeksha-acm-w-grad-cohort-2020-day-1.mdx new file mode 100644 index 0000000..2922390 --- /dev/null +++ b/src/content/blog/apeksha-acm-w-grad-cohort-2020-day-1.mdx @@ -0,0 +1,15 @@ +--- +title: "ACM-W India Grad Cohort 2020: Day 1 Of The Women Virtual Workshop In Computing Opens With A Bang!" +description: "Apeksha Srivastava's Day 1 report from ACM India Grad Cohort 2020, hosted online by ACM-W India and CSE at IIT Gandhinagar." +date: "2020-07-24" +author: + name: "Apeksha Srivastava" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["Grad Cohort", "ACM-W", "Women in Computing", "CSE Events"] +coverImage: "/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-1-light.png" +--- + +This archive entry points to Apeksha Srivastava's Day 1 report from ACM India Grad Cohort 2020. The article covers the opening of the online workshop and its early sessions for women graduate students in computing. + +**Original source:** [ACM-W India Grad Cohort 2020: Day 1 Of The Women Virtual Workshop In Computing Opens With A Bang!](https://medium.com/@apeksha.0503/grad-cohort-2020-day-1-of-the-women-virtual-workshop-in-computing-opens-with-a-bang-56407c113ad) + diff --git a/src/content/blog/apeksha-acm-w-grad-cohort-2020-day-2.mdx b/src/content/blog/apeksha-acm-w-grad-cohort-2020-day-2.mdx new file mode 100644 index 0000000..8f04e28 --- /dev/null +++ b/src/content/blog/apeksha-acm-w-grad-cohort-2020-day-2.mdx @@ -0,0 +1,15 @@ +--- +title: "ACM-W Grad Cohort 2020 Day 2: A Perfect Combo Of Motivation And Quality Advice From Women Leaders In Computing" +description: "Apeksha Srivastava's Day 2 report from ACM India Grad Cohort 2020, covering research talks, career guidance, and mentoring for women in computing." +date: "2020-07-26" +author: + name: "Apeksha Srivastava" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["Grad Cohort", "ACM-W", "Women in Computing", "CSE Events"] +coverImage: "/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-2-light.png" +--- + +This archive entry points to Apeksha Srivastava's Day 2 report from ACM India Grad Cohort 2020. The article covers research talks, professional advice, and mentoring sessions for women leaders and graduate students in computing. + +**Original source:** [ACM-W Grad Cohort 2020 Day 2: A Perfect Combo Of Motivation And Quality Advice From Women Leaders In Computing](https://medium.com/@apeksha.0503/acm-w-grad-cohort-2020-day-2-a-perfect-combo-of-motivation-and-quality-advice-from-women-leaders-3f2c629e05e5) + diff --git a/src/content/blog/apeksha-acm-w-grad-cohort-2020-day-3.mdx b/src/content/blog/apeksha-acm-w-grad-cohort-2020-day-3.mdx new file mode 100644 index 0000000..756faa3 --- /dev/null +++ b/src/content/blog/apeksha-acm-w-grad-cohort-2020-day-3.mdx @@ -0,0 +1,15 @@ +--- +title: "Day 3: ACM-W Grad Cohort 2020 Concludes With Strong Networking Opportunities And Professional Guidance For Women In Computer Science" +description: "Apeksha Srivastava's final-day report from ACM India Grad Cohort 2020, focused on post-PhD careers, networking, and professional guidance." +date: "2020-07-27" +author: + name: "Apeksha Srivastava" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["Grad Cohort", "ACM-W", "Women in Computing", "CSE Events"] +coverImage: "/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-day-3-light.png" +--- + +This archive entry points to Apeksha Srivastava's final-day report from ACM India Grad Cohort 2020. The article focuses on post-PhD career paths, networking, job-hunt preparation, and professional guidance for women in computing. + +**Original source:** [Day 3: ACM-W Grad Cohort 2020 Concludes With Strong Networking Opportunities And Professional Guidance For Women In Computer Science](https://medium.com/@apeksha.0503/day-3-acm-w-grad-cohort-2020-concludes-with-strong-networking-opportunities-and-professional-bc8c78efbc33) + diff --git a/src/content/blog/apeksha-acm-w-grad-cohort-2020-women-conquering-computing-online.mdx b/src/content/blog/apeksha-acm-w-grad-cohort-2020-women-conquering-computing-online.mdx new file mode 100644 index 0000000..c7dc115 --- /dev/null +++ b/src/content/blog/apeksha-acm-w-grad-cohort-2020-women-conquering-computing-online.mdx @@ -0,0 +1,15 @@ +--- +title: "ACM-W Grad Cohort 2020: Women Conquering Computing Online" +description: "Apeksha Srivastava's IITGN News preview of the ACM India Grad Cohort 2020, co-organized by ACM-W India and CSE at IIT Gandhinagar." +date: "2020-07-19" +author: + name: "Apeksha Srivastava" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["Grad Cohort", "ACM-W", "Women in Computing", "CSE Events"] +coverImage: "/images/blog/title-cards/apeksha-acm-w-grad-cohort-2020-women-conquering-computing-online-light.png" +--- + +This archive entry points to Apeksha Srivastava's IITGN News preview of ACM India Grad Cohort 2020. The event was co-organized by ACM-W India and the Computer Science and Engineering discipline at IIT Gandhinagar as an online workshop for women in computing. + +**Original source:** [ACM-W Grad Cohort 2020: Women Conquering Computing Online](https://news.iitgn.ac.in/the-acm-w-grad-cohort-2020-women-conquering-computing-online/) + diff --git a/src/content/blog/apeksha-my-podcasting-experience-part-i-acm-india.mdx b/src/content/blog/apeksha-my-podcasting-experience-part-i-acm-india.mdx new file mode 100644 index 0000000..c530764 --- /dev/null +++ b/src/content/blog/apeksha-my-podcasting-experience-part-i-acm-india.mdx @@ -0,0 +1,15 @@ +--- +title: "My Podcasting Experience (Part I): Association for Computing Machinery (ACM) - India" +description: "Apeksha Srivastava's first ACM/IRISS podcasting note, introducing conversations around IRISS, the ACM-W workshop, and the ACM India Annual Event hosted at IITGN." +date: "2020-03-03" +author: + name: "Apeksha Srivastava" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["ACM India", "Podcasting", "IRISS", "CSE Events"] +coverImage: "/images/blog/title-cards/apeksha-my-podcasting-experience-part-i-acm-india-light.png" +--- + +This archive entry points to Apeksha Srivastava's first note in her ACM/IRISS podcasting series. The piece introduces her podcasting conversations with people connected to IRISS, the ACM-W workshop, and the ACM India Annual Event hosted at IIT Gandhinagar in February 2020. + +**Original source:** [My Podcasting Experience (Part I): Association for Computing Machinery (ACM) - India](https://medium.com/@apeksha.0503/my-podcasting-experience-association-for-computing-machinery-acm-india-part-i-887109803735) + diff --git a/src/content/blog/apeksha-my-podcasting-experience-part-ii-acm-w-india.mdx b/src/content/blog/apeksha-my-podcasting-experience-part-ii-acm-w-india.mdx new file mode 100644 index 0000000..282bbf4 --- /dev/null +++ b/src/content/blog/apeksha-my-podcasting-experience-part-ii-acm-w-india.mdx @@ -0,0 +1,15 @@ +--- +title: "My Podcasting Experience (Part II): ACM-W India" +description: "Apeksha Srivastava's second ACM/IRISS podcasting note, focused on ACM-W India and conversations around women in computing." +date: "2020-03-03" +author: + name: "Apeksha Srivastava" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["ACM-W", "Podcasting", "Women in Computing", "CSE Events"] +coverImage: "/images/blog/title-cards/apeksha-my-podcasting-experience-part-ii-acm-w-india-light.png" +--- + +This archive entry points to Apeksha Srivastava's second ACM/IRISS podcasting note. The article gathers perspectives from ACM-W India sessions and conversations with women leaders in computer science education and research. + +**Original source:** [My Podcasting Experience (Part II): ACM-W India](https://medium.com/@apeksha.0503/my-podcasting-experience-part-ii-acm-w-india-4e3dcb0fb0e8) + diff --git a/src/content/blog/apeksha-my-podcasting-experience-part-iii-student-participants.mdx b/src/content/blog/apeksha-my-podcasting-experience-part-iii-student-participants.mdx new file mode 100644 index 0000000..91414a9 --- /dev/null +++ b/src/content/blog/apeksha-my-podcasting-experience-part-iii-student-participants.mdx @@ -0,0 +1,15 @@ +--- +title: "My Podcasting Experience (Part III): Student Participants" +description: "Apeksha Srivastava's third ACM/IRISS podcasting note, featuring student perspectives from IRISS, the ACM-W workshop, and the ACM India Annual Event." +date: "2020-03-04" +author: + name: "Apeksha Srivastava" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["IRISS", "Podcasting", "ACM India", "CSE Events"] +coverImage: "/images/blog/title-cards/apeksha-my-podcasting-experience-part-iii-student-participants-light.png" +--- + +This archive entry points to Apeksha Srivastava's third ACM/IRISS podcasting note. The article focuses on student participants from IRISS, the ACM-W workshop, and the ACM India Annual Event, with accessible explanations of computing research and student reflections. + +**Original source:** [My Podcasting Experience (Part III): Student Participants](https://medium.com/@apeksha.0503/my-podcasting-experience-part-iii-student-participants-35973c42b02a) + diff --git a/src/content/blog/apeksha-my-podcasting-experience-part-iv-industry-experts.mdx b/src/content/blog/apeksha-my-podcasting-experience-part-iv-industry-experts.mdx new file mode 100644 index 0000000..b425221 --- /dev/null +++ b/src/content/blog/apeksha-my-podcasting-experience-part-iv-industry-experts.mdx @@ -0,0 +1,15 @@ +--- +title: "My Podcasting Experience (Part IV): Industry Experts" +description: "Apeksha Srivastava's fourth ACM/IRISS podcasting note, collecting industry perspectives from the computing events hosted at IITGN." +date: "2020-03-06" +author: + name: "Apeksha Srivastava" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["ACM India", "Industry", "Podcasting", "CSE Events"] +coverImage: "/images/blog/title-cards/apeksha-my-podcasting-experience-part-iv-industry-experts-light.png" +--- + +This archive entry points to Apeksha Srivastava's fourth ACM/IRISS podcasting note. The article brings together industry-facing conversations from the computing events hosted at IITGN, including reflections on computer science education, AI, machine learning, and industry-academia connections. + +**Original source:** [My Podcasting Experience (Part IV): Industry Experts](https://medium.com/@apeksha.0503/my-podcasting-experience-part-iv-industry-experts-cebfcc63ab26) + diff --git a/src/content/blog/apeksha-my-podcasting-experience-part-v-researchers.mdx b/src/content/blog/apeksha-my-podcasting-experience-part-v-researchers.mdx new file mode 100644 index 0000000..b7ab117 --- /dev/null +++ b/src/content/blog/apeksha-my-podcasting-experience-part-v-researchers.mdx @@ -0,0 +1,15 @@ +--- +title: "My Podcasting Experience (Part V): Researchers" +description: "Apeksha Srivastava's fifth ACM/IRISS podcasting note, highlighting researchers' perspectives on computing, AI, cryptography, and IRISS 2020." +date: "2020-03-09" +author: + name: "Apeksha Srivastava" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["IRISS", "Research", "Podcasting", "CSE Events"] +coverImage: "/images/blog/title-cards/apeksha-my-podcasting-experience-part-v-researchers-light.png" +--- + +This archive entry points to Apeksha Srivastava's fifth ACM/IRISS podcasting note. The article gathers researchers' perspectives from the event series, including discussions on healthcare computing, cryptography, interdisciplinary research, and IRISS 2020. + +**Original source:** [My Podcasting Experience (Part V): Researchers](https://medium.com/@apeksha.0503/my-podcasting-experience-part-v-researchers-37a2b3daf324) + diff --git a/src/content/blog/apeksha-my-podcasting-experience-part-vi-perspectives.mdx b/src/content/blog/apeksha-my-podcasting-experience-part-vi-perspectives.mdx new file mode 100644 index 0000000..79199d4 --- /dev/null +++ b/src/content/blog/apeksha-my-podcasting-experience-part-vi-perspectives.mdx @@ -0,0 +1,15 @@ +--- +title: "My Podcasting Experience (Part VI): Perspectives" +description: "Apeksha Srivastava's concluding ACM/IRISS podcasting note, including reflections on ACM-W, IRISS, and organizing large computing events at IITGN." +date: "2020-03-12" +author: + name: "Apeksha Srivastava" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["IRISS", "ACM-W", "Podcasting", "CSE Events"] +coverImage: "/images/blog/title-cards/apeksha-my-podcasting-experience-part-vi-perspectives-light.png" +--- + +This archive entry points to Apeksha Srivastava's concluding ACM/IRISS podcasting note. The article includes reflections on the ACM-W workshop, IRISS, and the experience of organizing large-scale computing events at IIT Gandhinagar. + +**Original source:** [My Podcasting Experience (Part VI): Perspectives](https://medium.com/@apeksha.0503/my-podcasting-experience-part-vi-perspectives-876a2c870daa) + diff --git a/src/content/blog/apeksha-promoting-women-in-computer-science-research.mdx b/src/content/blog/apeksha-promoting-women-in-computer-science-research.mdx new file mode 100644 index 0000000..de05f97 --- /dev/null +++ b/src/content/blog/apeksha-promoting-women-in-computer-science-research.mdx @@ -0,0 +1,15 @@ +--- +title: "Promoting Women in Computer Science Research" +description: "Apeksha Srivastava's preview of the ACM-W India event on Women in Computer Science and Research, co-located with IRISS and the ACM India Annual Event at IIT Gandhinagar." +date: "2020-01-23" +author: + name: "Apeksha Srivastava" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["ACM-W", "CSE Events", "IRISS", "Apeksha Srivastava"] +coverImage: "/images/blog/title-cards/apeksha-promoting-women-in-computer-science-research-light.png" +--- + +This archive entry points to Apeksha Srivastava's original article previewing the ACM-W India event on Women in Computer Science and Research at IIT Gandhinagar. The event was co-located with IRISS and the ACM India Annual Event, and focused on research opportunities, mentoring, and participation of women in computing. + +**Original source:** [Promoting Women in Computer Science Research](https://medium.com/@apeksha.0503/promoting-women-in-computer-science-research-ae64544cb5d5) + diff --git a/src/content/blog/hackrush-2026-aditya-snake-bot.mdx b/src/content/blog/hackrush-2026-aditya-snake-bot.mdx index 09fe43a..51f5cd8 100644 --- a/src/content/blog/hackrush-2026-aditya-snake-bot.mdx +++ b/src/content/blog/hackrush-2026-aditya-snake-bot.mdx @@ -5,8 +5,8 @@ date: '2026-05-01' author: name: 'Aditya' image: '/favicon/web-app-manifest-192x192.png' -tags: ['Hackrush 2026', 'hackrush2026', 'Game AI'] -coverImage: '/images/blog/hackrush-2026/hackrush-2026-cover.webp' +tags: ['hackrush2026', 'Game AI'] +coverImage: '/images/blog/title-cards/hackrush-2026-aditya-snake-bot-light.png' --- Hackrush 2026 gave us a compact but demanding Game AI challenge: build a bot that could play Beat My Bot v2, read the game state from JSON, choose a move within a 500 ms turn limit, and survive longer than the opponent while maximizing length and score. diff --git a/src/content/blog/hackrush-2026-arpan-bazaar-iitgn.mdx b/src/content/blog/hackrush-2026-arpan-bazaar-iitgn.mdx index 6d25f16..4fa043c 100644 --- a/src/content/blog/hackrush-2026-arpan-bazaar-iitgn.mdx +++ b/src/content/blog/hackrush-2026-arpan-bazaar-iitgn.mdx @@ -5,8 +5,8 @@ date: '2026-05-02' author: name: 'Arpan' image: '/favicon/web-app-manifest-192x192.png' -tags: ['Hackrush 2026', 'hackrush2026', 'Web Development'] -coverImage: '/images/blog/hackrush-2026/hackrush-2026-cover.webp' +tags: ['hackrush2026', 'Web Development'] +coverImage: '/images/blog/title-cards/hackrush-2026-arpan-bazaar-iitgn-light.png' --- Bazaar@IITGN is a peer-to-peer campus marketplace built exclusively for the IIT Gandhinagar community. The motivation came from a familiar student problem: someone wants to sell an old cycle before the semester ends, or find an affordable textbook before exams, but there is no reliable, trusted platform designed for the campus. diff --git a/src/content/blog/hackrush-2026-nihar-bone-marrow-classification.mdx b/src/content/blog/hackrush-2026-nihar-bone-marrow-classification.mdx index bc576b1..aa22c02 100644 --- a/src/content/blog/hackrush-2026-nihar-bone-marrow-classification.mdx +++ b/src/content/blog/hackrush-2026-nihar-bone-marrow-classification.mdx @@ -5,8 +5,8 @@ date: '2026-05-03' author: name: 'Nihar' image: '/favicon/web-app-manifest-192x192.png' -tags: ['Hackrush 2026', 'hackrush2026', 'Machine Learning'] -coverImage: '/images/blog/hackrush-2026/hackrush-2026-cover.webp' +tags: ['hackrush2026', 'Machine Learning'] +coverImage: '/images/blog/title-cards/hackrush-2026-nihar-bone-marrow-classification-light.png' --- For Hackrush 2026, I worked on few-shot bone marrow cell classification. The task was to classify bone marrow microscopy images under severely limited labeled data conditions. diff --git a/src/content/blog/hackrush-2026-srihith-activation-functions.mdx b/src/content/blog/hackrush-2026-srihith-activation-functions.mdx index 2f2cc68..482d8fe 100644 --- a/src/content/blog/hackrush-2026-srihith-activation-functions.mdx +++ b/src/content/blog/hackrush-2026-srihith-activation-functions.mdx @@ -5,8 +5,8 @@ date: '2026-05-04' author: name: 'Srihith' image: '/favicon/web-app-manifest-192x192.png' -tags: ['Hackrush 2026', 'hackrush2026', 'Computer Architecture'] -coverImage: '/images/blog/hackrush-2026/hackrush-2026-cover.webp' +tags: ['hackrush2026', 'Computer Architecture'] +coverImage: '/images/blog/title-cards/hackrush-2026-srihith-activation-functions-light.png' --- For Hackrush 2026, I worked on a computer architecture problem that required implementing four machine-learning activation functions in hardware: ReLU, Leaky ReLU, sigmoid approximation, and tanh approximation. diff --git a/src/content/blog/hackrush-2026-surriya-archivist-puzzle.mdx b/src/content/blog/hackrush-2026-surriya-archivist-puzzle.mdx index 806717c..b2d0b60 100644 --- a/src/content/blog/hackrush-2026-surriya-archivist-puzzle.mdx +++ b/src/content/blog/hackrush-2026-surriya-archivist-puzzle.mdx @@ -5,8 +5,8 @@ date: '2026-05-05' author: name: 'Surriya' image: '/favicon/web-app-manifest-192x192.png' -tags: ['Hackrush 2026', 'hackrush2026', 'Machine Learning'] -coverImage: '/images/blog/hackrush-2026/hackrush-2026-cover.webp' +tags: ['hackrush2026', 'Machine Learning'] +coverImage: '/images/blog/title-cards/hackrush-2026-surriya-archivist-puzzle-light.png' --- One of the Hackrush 2026 problems was a narrative reconstruction challenge inspired by *Cain's Jawbone*. We were given two mystery books as CSV files of shuffled text fragments. The goal was to reconstruct the original page order for each book. diff --git a/src/content/blog/hackrush-2026-yuvraj-ai-image-editor.mdx b/src/content/blog/hackrush-2026-yuvraj-ai-image-editor.mdx index 3eae106..c158466 100644 --- a/src/content/blog/hackrush-2026-yuvraj-ai-image-editor.mdx +++ b/src/content/blog/hackrush-2026-yuvraj-ai-image-editor.mdx @@ -5,8 +5,8 @@ date: '2026-05-06' author: name: 'Yuvraj' image: '/favicon/web-app-manifest-192x192.png' -tags: ['Hackrush 2026', 'hackrush2026', 'Deep Learning'] -coverImage: '/images/blog/hackrush-2026/hackrush-2026-cover.webp' +tags: ['hackrush2026', 'Deep Learning'] +coverImage: '/images/blog/title-cards/hackrush-2026-yuvraj-ai-image-editor-light.png' --- For Hackrush 2026, I built an AI Image Editor: a web application that lets users edit images using natural-language instructions, masks, sketches, and voice input. diff --git a/src/content/blog/kishan-gsoc-24-final-report.mdx b/src/content/blog/kishan-gsoc-24-final-report.mdx new file mode 100644 index 0000000..1fe81a5 --- /dev/null +++ b/src/content/blog/kishan-gsoc-24-final-report.mdx @@ -0,0 +1,17 @@ +--- +title: "GSoC '24 Final Report" +description: "Kishan Ved summarizes his Google Summer of Code 2024 work with PyDataStructs." +date: "2024-08-26" +author: + name: "Kishan Ved" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "PyDataStructs", "Kishan Ved"] +coverImage: "/images/blog/title-cards/kishan-gsoc-24-final-report-light.png" +--- + +This archive entry points to Kishan Ved's original post, "GSoC '24 Final Report". It is included here as a source-linked entry with credit to the author. + +The report summarizes Kishan's Google Summer of Code 2024 project, including the scope of his PyDataStructs work and the outcomes from the coding period. + +**Original source:** [GSoC '24 Final Report](https://kishan-ved.github.io/portfolio/blog/gsoc_report) + diff --git a/src/content/blog/kishan-gsoc-24-week-1.mdx b/src/content/blog/kishan-gsoc-24-week-1.mdx new file mode 100644 index 0000000..57aa236 --- /dev/null +++ b/src/content/blog/kishan-gsoc-24-week-1.mdx @@ -0,0 +1,17 @@ +--- +title: "GSoC '24 Week 1" +description: "Kishan Ved reports on C++ backend setup and Binary Tree work for PyDataStructs." +date: "2024-05-27" +author: + name: "Kishan Ved" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "PyDataStructs", "Kishan Ved"] +coverImage: "/images/blog/title-cards/kishan-gsoc-24-week-1-light.png" +--- + +This archive entry points to Kishan Ved's original post, "GSoC '24 Week 1". It is included here as a source-linked entry with credit to the author. + +The update covers C++ backend setup, Binary Tree work, and repository build setup for the GSoC project. + +**Original source:** [GSoC '24 Week 1](https://kishan-ved.github.io/portfolio/blog/week1) + diff --git a/src/content/blog/kishan-gsoc-24-week-10.mdx b/src/content/blog/kishan-gsoc-24-week-10.mdx new file mode 100644 index 0000000..80d7f1a --- /dev/null +++ b/src/content/blog/kishan-gsoc-24-week-10.mdx @@ -0,0 +1,17 @@ +--- +title: "GSoC '24 Week 10" +description: "Kishan Ved reports on the C++ backend for Cartesian Trees during GSoC 2024." +date: "2024-07-29" +author: + name: "Kishan Ved" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "PyDataStructs", "Kishan Ved"] +coverImage: "/images/blog/title-cards/kishan-gsoc-24-week-10-light.png" +--- + +This archive entry points to Kishan Ved's original post, "GSoC '24 Week 10". It is included here as a source-linked entry with credit to the author. + +The update focuses on completing the C++ backend for Cartesian Trees as part of the PyDataStructs project. + +**Original source:** [GSoC '24 Week 10](https://kishan-ved.github.io/portfolio/blog/week10) + diff --git a/src/content/blog/kishan-gsoc-24-week-11.mdx b/src/content/blog/kishan-gsoc-24-week-11.mdx new file mode 100644 index 0000000..4089517 --- /dev/null +++ b/src/content/blog/kishan-gsoc-24-week-11.mdx @@ -0,0 +1,17 @@ +--- +title: "GSoC '24 Week 11" +description: "Kishan Ved reports on the C++ backend for Treap support in PyDataStructs." +date: "2024-08-05" +author: + name: "Kishan Ved" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "PyDataStructs", "Kishan Ved"] +coverImage: "/images/blog/title-cards/kishan-gsoc-24-week-11-light.png" +--- + +This archive entry points to Kishan Ved's original post, "GSoC '24 Week 11". It is included here as a source-linked entry with credit to the author. + +The update covers progress on the C++ backend for Treap support and the merge work around that implementation. + +**Original source:** [GSoC '24 Week 11](https://kishan-ved.github.io/portfolio/blog/week11) + diff --git a/src/content/blog/kishan-gsoc-24-week-12.mdx b/src/content/blog/kishan-gsoc-24-week-12.mdx new file mode 100644 index 0000000..4064971 --- /dev/null +++ b/src/content/blog/kishan-gsoc-24-week-12.mdx @@ -0,0 +1,17 @@ +--- +title: "GSoC '24 Week 12" +description: "Kishan Ved closes out his Google Summer of Code 2024 weekly updates." +date: "2024-08-12" +author: + name: "Kishan Ved" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "PyDataStructs", "Kishan Ved"] +coverImage: "/images/blog/title-cards/kishan-gsoc-24-week-12-light.png" +--- + +This archive entry points to Kishan Ved's original post, "GSoC '24 Week 12". It is included here as a source-linked entry with credit to the author. + +The update marks the completion of Kishan's Google Summer of Code 2024 work and records the closing stage of the project. + +**Original source:** [GSoC '24 Week 12](https://kishan-ved.github.io/portfolio/blog/week12) + diff --git a/src/content/blog/kishan-gsoc-24-week-2.mdx b/src/content/blog/kishan-gsoc-24-week-2.mdx new file mode 100644 index 0000000..d015e49 --- /dev/null +++ b/src/content/blog/kishan-gsoc-24-week-2.mdx @@ -0,0 +1,17 @@ +--- +title: "GSoC '24 Week 2" +description: "Kishan Ved reports on C++ backend work for Node, TreeNode, and ArrayForTrees." +date: "2024-06-03" +author: + name: "Kishan Ved" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "PyDataStructs", "Kishan Ved"] +coverImage: "/images/blog/title-cards/kishan-gsoc-24-week-2-light.png" +--- + +This archive entry points to Kishan Ved's original post, "GSoC '24 Week 2". It is included here as a source-linked entry with credit to the author. + +The update covers C++ backend work for Node, TreeNode, and ArrayForTrees during the second week of the project. + +**Original source:** [GSoC '24 Week 2](https://kishan-ved.github.io/portfolio/blog/week2) + diff --git a/src/content/blog/kishan-gsoc-24-week-3.mdx b/src/content/blog/kishan-gsoc-24-week-3.mdx new file mode 100644 index 0000000..8cf98c5 --- /dev/null +++ b/src/content/blog/kishan-gsoc-24-week-3.mdx @@ -0,0 +1,17 @@ +--- +title: "GSoC '24 Week 3" +description: "Kishan Ved reports on testing, debugging, and Binary Search Tree methods." +date: "2024-06-10" +author: + name: "Kishan Ved" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "PyDataStructs", "Kishan Ved"] +coverImage: "/images/blog/title-cards/kishan-gsoc-24-week-3-light.png" +--- + +This archive entry points to Kishan Ved's original post, "GSoC '24 Week 3". It is included here as a source-linked entry with credit to the author. + +The update covers testing, debugging, and progress on Binary Search Tree `insert()` and `search()` support. + +**Original source:** [GSoC '24 Week 3](https://kishan-ved.github.io/portfolio/blog/week3) + diff --git a/src/content/blog/kishan-gsoc-24-week-4.mdx b/src/content/blog/kishan-gsoc-24-week-4.mdx new file mode 100644 index 0000000..51f5d70 --- /dev/null +++ b/src/content/blog/kishan-gsoc-24-week-4.mdx @@ -0,0 +1,17 @@ +--- +title: "GSoC '24 Week 4" +description: "Kishan Ved reports on BinarySearchTree methods, tree traversals, and performance results." +date: "2024-06-17" +author: + name: "Kishan Ved" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "PyDataStructs", "Kishan Ved"] +coverImage: "/images/blog/title-cards/kishan-gsoc-24-week-4-light.png" +--- + +This archive entry points to Kishan Ved's original post, "GSoC '24 Week 4". It is included here as a source-linked entry with credit to the author. + +The update covers BinarySearchTree methods, tree traversals, and performance results from the implementation work. + +**Original source:** [GSoC '24 Week 4](https://kishan-ved.github.io/portfolio/blog/week4) + diff --git a/src/content/blog/kishan-gsoc-24-week-5.mdx b/src/content/blog/kishan-gsoc-24-week-5.mdx new file mode 100644 index 0000000..8c0c715 --- /dev/null +++ b/src/content/blog/kishan-gsoc-24-week-5.mdx @@ -0,0 +1,17 @@ +--- +title: "GSoC '24 Week 5" +description: "Kishan Ved reports on self-balancing binary trees and a PyCon 2024 proposal." +date: "2024-06-24" +author: + name: "Kishan Ved" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "PyDataStructs", "Kishan Ved"] +coverImage: "/images/blog/title-cards/kishan-gsoc-24-week-5-light.png" +--- + +This archive entry points to Kishan Ved's original post, "GSoC '24 Week 5". It is included here as a source-linked entry with credit to the author. + +The update covers self-balancing binary tree work and notes the submission of a PyCon 2024 proposal related to the project. + +**Original source:** [GSoC '24 Week 5](https://kishan-ved.github.io/portfolio/blog/week5) + diff --git a/src/content/blog/kishan-gsoc-24-week-6.mdx b/src/content/blog/kishan-gsoc-24-week-6.mdx new file mode 100644 index 0000000..9237ee9 --- /dev/null +++ b/src/content/blog/kishan-gsoc-24-week-6.mdx @@ -0,0 +1,17 @@ +--- +title: "GSoC '24 Week 6" +description: "Kishan Ved reports on Red Black Trees and Binary Indexed Trees for PyDataStructs." +date: "2024-07-01" +author: + name: "Kishan Ved" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "PyDataStructs", "Kishan Ved"] +coverImage: "/images/blog/title-cards/kishan-gsoc-24-week-6-light.png" +--- + +This archive entry points to Kishan Ved's original post, "GSoC '24 Week 6". It is included here as a source-linked entry with credit to the author. + +The update covers progress on Red Black Trees and Binary Indexed Trees in the PyDataStructs codebase. + +**Original source:** [GSoC '24 Week 6](https://kishan-ved.github.io/portfolio/blog/week6) + diff --git a/src/content/blog/kishan-gsoc-24-week-7.mdx b/src/content/blog/kishan-gsoc-24-week-7.mdx new file mode 100644 index 0000000..c066423 --- /dev/null +++ b/src/content/blog/kishan-gsoc-24-week-7.mdx @@ -0,0 +1,17 @@ +--- +title: "GSoC '24 Week 7" +description: "Kishan Ved reports on Splay Tree backend progress for PyDataStructs." +date: "2024-07-08" +author: + name: "Kishan Ved" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "PyDataStructs", "Kishan Ved"] +coverImage: "/images/blog/title-cards/kishan-gsoc-24-week-7-light.png" +--- + +This archive entry points to Kishan Ved's original post, "GSoC '24 Week 7". It is included here as a source-linked entry with credit to the author. + +The update focuses on C++ backend progress for Splay Trees during the seventh week of Kishan's Google Summer of Code project. + +**Original source:** [GSoC '24 Week 7](https://kishan-ved.github.io/portfolio/blog/week7) + diff --git a/src/content/blog/kishan-gsoc-24-week-8.mdx b/src/content/blog/kishan-gsoc-24-week-8.mdx new file mode 100644 index 0000000..6ca39f8 --- /dev/null +++ b/src/content/blog/kishan-gsoc-24-week-8.mdx @@ -0,0 +1,17 @@ +--- +title: "GSoC '24 Week 8" +description: "Kishan Ved reports on Splay Tree backend work and the start of AVL Tree implementation." +date: "2024-07-15" +author: + name: "Kishan Ved" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "PyDataStructs", "Kishan Ved"] +coverImage: "/images/blog/title-cards/kishan-gsoc-24-week-8-light.png" +--- + +This archive entry points to Kishan Ved's original post, "GSoC '24 Week 8". It is included here as a source-linked entry with credit to the author. + +The update records completion of C++ backend work for Splay Trees and the start of AVL Tree implementation. + +**Original source:** [GSoC '24 Week 8](https://kishan-ved.github.io/portfolio/blog/week8) + diff --git a/src/content/blog/kishan-gsoc-24-week-9.mdx b/src/content/blog/kishan-gsoc-24-week-9.mdx new file mode 100644 index 0000000..c54b017 --- /dev/null +++ b/src/content/blog/kishan-gsoc-24-week-9.mdx @@ -0,0 +1,17 @@ +--- +title: "GSoC '24 Week 9" +description: "Kishan Ved reports on AVL Tree backend work and lightweight testing features." +date: "2024-07-22" +author: + name: "Kishan Ved" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "PyDataStructs", "Kishan Ved"] +coverImage: "/images/blog/title-cards/kishan-gsoc-24-week-9-light.png" +--- + +This archive entry points to Kishan Ved's original post, "GSoC '24 Week 9". It is included here as a source-linked entry with credit to the author. + +The update covers C++ backend work for AVL Trees and a lightweight testing feature developed during the GSoC period. + +**Original source:** [GSoC '24 Week 9](https://kishan-ved.github.io/portfolio/blog/week9) + diff --git a/src/content/blog/kishan-my-google-summer-of-code-journey.mdx b/src/content/blog/kishan-my-google-summer-of-code-journey.mdx new file mode 100644 index 0000000..e4a3841 --- /dev/null +++ b/src/content/blog/kishan-my-google-summer-of-code-journey.mdx @@ -0,0 +1,17 @@ +--- +title: "My Google Summer of Code Journey" +description: "Kishan Ved recounts his open-source path from first contribution to Google Summer of Code." +date: "2024-09-02" +author: + name: "Kishan Ved" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "Open Source", "Kishan Ved"] +coverImage: "/images/blog/title-cards/kishan-my-google-summer-of-code-journey-light.png" +--- + +This archive entry points to Kishan Ved's original post, "My Google Summer of Code Journey". It is included here as a source-linked entry with credit to the author. + +The post looks back at Kishan's open-source journey, tracing the path from early contributions to his Google Summer of Code work. + +**Original source:** [My Google Summer of Code Journey](https://kishan-ved.github.io/portfolio/blog/my_gsoc_journey) + diff --git a/src/content/blog/kishan-my-gsoc-2024-project.mdx b/src/content/blog/kishan-my-gsoc-2024-project.mdx new file mode 100644 index 0000000..0411ddf --- /dev/null +++ b/src/content/blog/kishan-my-gsoc-2024-project.mdx @@ -0,0 +1,17 @@ +--- +title: "My GSoC 2024 Project" +description: "Kishan Ved introduces his Google Summer of Code 2024 project, organization, and proposal." +date: "2024-05-01" +author: + name: "Kishan Ved" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "Open Source", "Kishan Ved"] +coverImage: "/images/blog/title-cards/kishan-my-gsoc-2024-project-light.png" +--- + +This archive entry points to Kishan Ved's original post, "My GSoC 2024 Project". It is included here as a source-linked entry with credit to the author. + +The post introduces Kishan's Google Summer of Code 2024 project, the participating organization, and the proposal context. + +**Original source:** [My GSoC 2024 Project](https://kishan-ved.github.io/portfolio/blog/my_gsoc) + diff --git a/src/content/blog/kishan-my-gsoc-progress.mdx b/src/content/blog/kishan-my-gsoc-progress.mdx new file mode 100644 index 0000000..3657cd5 --- /dev/null +++ b/src/content/blog/kishan-my-gsoc-progress.mdx @@ -0,0 +1,17 @@ +--- +title: "My GSoC Progress" +description: "Kishan Ved collects progress notes from his Google Summer of Code 2024 work." +date: "2024-06-14" +author: + name: "Kishan Ved" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "Open Source", "Kishan Ved"] +coverImage: "/images/blog/title-cards/kishan-my-gsoc-progress-light.png" +--- + +This archive entry points to Kishan Ved's original post, "My GSoC Progress". It is included here as a source-linked entry with credit to the author. + +The post collects progress notes from Kishan's Google Summer of Code 2024 project and gives a broader view of the implementation timeline. + +**Original source:** [My GSoC Progress](https://kishan-ved.github.io/portfolio/blog/gsoc-progress) + diff --git a/src/content/blog/kishan-pycon-2024-proposal.mdx b/src/content/blog/kishan-pycon-2024-proposal.mdx new file mode 100644 index 0000000..62a0e8b --- /dev/null +++ b/src/content/blog/kishan-pycon-2024-proposal.mdx @@ -0,0 +1,17 @@ +--- +title: "PyCon 2024 Proposal" +description: "Kishan Ved shares his PyCon 2024 proposal connected to GSoC work on PyDataStructs." +date: "2024-06-20" +author: + name: "Kishan Ved" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["PyCon", "GSoC", "Kishan Ved"] +coverImage: "/images/blog/title-cards/kishan-pycon-2024-proposal-light.png" +--- + +This archive entry points to Kishan Ved's original post, "PyCon 2024 Proposal". It is included here as a source-linked entry with credit to the author. + +The post shares Kishan's proposal for PyCon 2024 in Bengaluru, connected to his PyDataStructs work during Google Summer of Code 2024. + +**Original source:** [PyCon 2024 Proposal](https://kishan-ved.github.io/portfolio/blog/PyCon_proposal) + diff --git a/src/content/blog/kvs-computer-science-teacher-training-2018.mdx b/src/content/blog/kvs-computer-science-teacher-training-2018.mdx index 58ee394..4c3f824 100644 --- a/src/content/blog/kvs-computer-science-teacher-training-2018.mdx +++ b/src/content/blog/kvs-computer-science-teacher-training-2018.mdx @@ -6,7 +6,7 @@ author: name: 'Center for Creative Learning, IIT Gandhinagar' image: '/favicon/web-app-manifest-192x192.png' tags: ['Outreach', 'Teacher Training', 'School Education', 'Python', 'CCL'] -coverImage: '/images/blog/kvs-cs-pgt-2018/kvs-cs-pgt-2018-01.png' +coverImage: '/images/blog/title-cards/kvs-computer-science-teacher-training-2018-light.png' --- ![KVS Computer Science PGT teachers and facilitators at IIT Gandhinagar](/images/blog/kvs-cs-pgt-2018/kvs-cs-pgt-2018-01.png) diff --git a/src/content/blog/nilay-gsoc-2025-week-1-community-bonding-begins.mdx b/src/content/blog/nilay-gsoc-2025-week-1-community-bonding-begins.mdx new file mode 100644 index 0000000..2ce4974 --- /dev/null +++ b/src/content/blog/nilay-gsoc-2025-week-1-community-bonding-begins.mdx @@ -0,0 +1,17 @@ +--- +title: "Week 1 - Community Bonding Begins" +description: "Nilay Verma opens the community bonding phase of his MDAnalysis ProLIF GSoC project." +date: "2025-05-19" +author: + name: "Nilay Verma" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "MDAnalysis", "Nilay Verma"] +coverImage: "/images/blog/title-cards/nilay-gsoc-2025-week-1-community-bonding-begins-light.png" +--- + +This archive entry points to Nilay Verma's original post, "Week 1 - Community Bonding Begins". It is included here as a source-linked entry with credit to the author. + +The post is part of Nilay's GSoC 2025 blog on drawing molecular interaction bonds with MDAnalysis and ProLIF, focusing here on the start of the community bonding phase. + +**Original source:** [Week 1 - Community Bonding Begins](https://nilay-v3rma.github.io/gsoc-blog/posts/Week%201/index.html) + diff --git a/src/content/blog/nilay-gsoc-2025-week-2-community-connections-pr-complete.mdx b/src/content/blog/nilay-gsoc-2025-week-2-community-connections-pr-complete.mdx new file mode 100644 index 0000000..7da1619 --- /dev/null +++ b/src/content/blog/nilay-gsoc-2025-week-2-community-connections-pr-complete.mdx @@ -0,0 +1,17 @@ +--- +title: "Week 2 - Community Connections and PR Complete" +description: "Nilay Verma reports on community connections and a completed pull request during the GSoC bonding phase." +date: "2025-05-26" +author: + name: "Nilay Verma" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "MDAnalysis", "Nilay Verma"] +coverImage: "/images/blog/title-cards/nilay-gsoc-2025-week-2-community-connections-pr-complete-light.png" +--- + +This archive entry points to Nilay Verma's original post, "Week 2 - Community Connections and PR Complete". It is included here as a source-linked entry with credit to the author. + +The post is part of Nilay's GSoC 2025 blog on drawing molecular interaction bonds with MDAnalysis and ProLIF, focusing here on community bonding and a completed pull request. + +**Original source:** [Week 2 - Community Connections and PR Complete](https://nilay-v3rma.github.io/gsoc-blog/posts/Week%202/index.html) + diff --git a/src/content/blog/nilay-gsoc-2025-week-3-quiet-momentum.mdx b/src/content/blog/nilay-gsoc-2025-week-3-quiet-momentum.mdx new file mode 100644 index 0000000..3825cd7 --- /dev/null +++ b/src/content/blog/nilay-gsoc-2025-week-3-quiet-momentum.mdx @@ -0,0 +1,17 @@ +--- +title: "Week 3 - Quiet Momentum" +description: "Nilay Verma reports on exploring the codebase during the community bonding phase of his GSoC project." +date: "2025-06-02" +author: + name: "Nilay Verma" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "MDAnalysis", "Nilay Verma"] +coverImage: "/images/blog/title-cards/nilay-gsoc-2025-week-3-quiet-momentum-light.png" +--- + +This archive entry points to Nilay Verma's original post, "Week 3 - Quiet Momentum: Exploring the Codebase". It is included here as a source-linked entry with credit to the author. + +The post is part of Nilay's GSoC 2025 blog on drawing molecular interaction bonds with MDAnalysis and ProLIF, focusing here on exploring the project codebase. + +**Original source:** [Week 3 - Quiet Momentum: Exploring the Codebase](https://nilay-v3rma.github.io/gsoc-blog/posts/Week%203/index.html) + diff --git a/src/content/blog/nilay-gsoc-2025-week-4-smarter-coordinates.mdx b/src/content/blog/nilay-gsoc-2025-week-4-smarter-coordinates.mdx new file mode 100644 index 0000000..830965f --- /dev/null +++ b/src/content/blog/nilay-gsoc-2025-week-4-smarter-coordinates.mdx @@ -0,0 +1,17 @@ +--- +title: "Week 4 - Smarter Coordinates" +description: "Nilay Verma reports on using interaction context to guide residue placement in his MDAnalysis ProLIF GSoC project." +date: "2025-06-09" +author: + name: "Nilay Verma" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "MDAnalysis", "Nilay Verma"] +coverImage: "/images/blog/title-cards/nilay-gsoc-2025-week-4-smarter-coordinates-light.png" +--- + +This archive entry points to Nilay Verma's original post, "Week 4 - Smarter Coordinates: Guiding Residue Placement with Interaction Context". It is included here as a source-linked entry with credit to the author. + +The post is part of Nilay's GSoC 2025 blog on drawing molecular interaction bonds with MDAnalysis and ProLIF, focusing here on using interaction context to guide residue placement. + +**Original source:** [Week 4 - Smarter Coordinates: Guiding Residue Placement with Interaction Context](https://nilay-v3rma.github.io/gsoc-blog/posts/Week%204/index.html) + diff --git a/src/content/blog/nilay-gsoc-2025-week-5-hybrid-layout-custom-anchors-networkx.mdx b/src/content/blog/nilay-gsoc-2025-week-5-hybrid-layout-custom-anchors-networkx.mdx new file mode 100644 index 0000000..bd666ff --- /dev/null +++ b/src/content/blog/nilay-gsoc-2025-week-5-hybrid-layout-custom-anchors-networkx.mdx @@ -0,0 +1,17 @@ +--- +title: "Week 5 - Hybrid Layout with Custom Anchors and NetworkX" +description: "Nilay Verma reports on hybrid layout work, custom anchors, and NetworkX in his MDAnalysis ProLIF GSoC project." +date: "2025-06-16" +author: + name: "Nilay Verma" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "MDAnalysis", "Nilay Verma"] +coverImage: "/images/blog/title-cards/nilay-gsoc-2025-week-5-hybrid-layout-custom-anchors-networkx-light.png" +--- + +This archive entry points to Nilay Verma's original post, "Week 5 - Hybrid Layout with Custom Anchors and NetworkX". It is included here as a source-linked entry with credit to the author. + +The post is part of Nilay's GSoC 2025 blog on drawing molecular interaction bonds with MDAnalysis and ProLIF, focusing here on hybrid layout work with custom anchors and NetworkX. + +**Original source:** [Week 5 - Hybrid Layout with Custom Anchors and NetworkX](https://nilay-v3rma.github.io/gsoc-blog/posts/Week%205/index.html) + diff --git a/src/content/blog/nilay-gsoc-2025-week-6-export-tests-and-residue-coordinates.mdx b/src/content/blog/nilay-gsoc-2025-week-6-export-tests-and-residue-coordinates.mdx new file mode 100644 index 0000000..ac3aca8 --- /dev/null +++ b/src/content/blog/nilay-gsoc-2025-week-6-export-tests-and-residue-coordinates.mdx @@ -0,0 +1,17 @@ +--- +title: "Week 6 - Export Tests and Residue Coordinates" +description: "Nilay Verma reports on export tests and residue coordinate work in his MDAnalysis ProLIF GSoC project." +date: "2025-06-23" +author: + name: "Nilay Verma" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "MDAnalysis", "Nilay Verma"] +coverImage: "/images/blog/title-cards/nilay-gsoc-2025-week-6-export-tests-and-residue-coordinates-light.png" +--- + +This archive entry points to Nilay Verma's original post, "Week 6 - Export Tests and Residue Coordinates". It is included here as a source-linked entry with credit to the author. + +The post is part of Nilay's GSoC 2025 blog on drawing molecular interaction bonds with MDAnalysis and ProLIF, focusing here on export tests and residue coordinate handling. + +**Original source:** [Week 6 - Export Tests and Residue Coordinates](https://nilay-v3rma.github.io/gsoc-blog/posts/Week%206/index.html) + diff --git a/src/content/blog/nilay-gsoc-2025-week-7-testing-residue-coordinates.mdx b/src/content/blog/nilay-gsoc-2025-week-7-testing-residue-coordinates.mdx new file mode 100644 index 0000000..8c56087 --- /dev/null +++ b/src/content/blog/nilay-gsoc-2025-week-7-testing-residue-coordinates.mdx @@ -0,0 +1,17 @@ +--- +title: "Week 7 - Testing Residue Coordinates" +description: "Nilay Verma reports on testing residue coordinate handling in his MDAnalysis ProLIF GSoC project." +date: "2025-06-30" +author: + name: "Nilay Verma" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "MDAnalysis", "Nilay Verma"] +coverImage: "/images/blog/title-cards/nilay-gsoc-2025-week-7-testing-residue-coordinates-light.png" +--- + +This archive entry points to Nilay Verma's original post, "Week 7 - Testing Residue Coordinates". It is included here as a source-linked entry with credit to the author. + +The post is part of Nilay's GSoC 2025 blog on drawing molecular interaction bonds with MDAnalysis and ProLIF, focusing here on residue coordinate testing. + +**Original source:** [Week 7 - Testing Residue Coordinates](https://nilay-v3rma.github.io/gsoc-blog/posts/Week%207/index.html) + diff --git a/src/content/blog/nilay-gsoc-2025-week-8-modularizing-and-algorithm-improvements.mdx b/src/content/blog/nilay-gsoc-2025-week-8-modularizing-and-algorithm-improvements.mdx new file mode 100644 index 0000000..27aa091 --- /dev/null +++ b/src/content/blog/nilay-gsoc-2025-week-8-modularizing-and-algorithm-improvements.mdx @@ -0,0 +1,17 @@ +--- +title: "Week 8 - Modularizing and Algorithm Improvements" +description: "Nilay Verma reports on modularization and algorithm improvements in his MDAnalysis ProLIF GSoC project." +date: "2025-07-07" +author: + name: "Nilay Verma" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "MDAnalysis", "Nilay Verma"] +coverImage: "/images/blog/title-cards/nilay-gsoc-2025-week-8-modularizing-and-algorithm-improvements-light.png" +--- + +This archive entry points to Nilay Verma's original post, "Week 8 - Modularizing and Algorithm Improvements". It is included here as a source-linked entry with credit to the author. + +The post is part of Nilay's GSoC 2025 blog on drawing molecular interaction bonds with MDAnalysis and ProLIF, focusing here on code modularization and algorithm improvements. + +**Original source:** [Week 8 - Modularizing and Algorithm Improvements](https://nilay-v3rma.github.io/gsoc-blog/posts/Week%208/index.html) + diff --git a/src/content/blog/nilay-gsoc-2025-week-9-testing-and-refining-placement-algorithm.mdx b/src/content/blog/nilay-gsoc-2025-week-9-testing-and-refining-placement-algorithm.mdx new file mode 100644 index 0000000..eae7445 --- /dev/null +++ b/src/content/blog/nilay-gsoc-2025-week-9-testing-and-refining-placement-algorithm.mdx @@ -0,0 +1,17 @@ +--- +title: "Week 9 - Testing and Refining the Placement Algorithm" +description: "Nilay Verma reports on testing and refining a placement algorithm for the MDAnalysis ProLIF GSoC project." +date: "2025-07-14" +author: + name: "Nilay Verma" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "MDAnalysis", "Nilay Verma"] +coverImage: "/images/blog/title-cards/nilay-gsoc-2025-week-9-testing-and-refining-placement-algorithm-light.png" +--- + +This archive entry points to Nilay Verma's original post, "Week 9 - Testing and Refining the Placement Algorithm". It is included here as a source-linked entry with credit to the author. + +The post is part of Nilay's GSoC 2025 blog on drawing molecular interaction bonds with MDAnalysis and ProLIF, focusing here on testing and refining the placement algorithm. + +**Original source:** [Week 9 - Testing and Refining the Placement Algorithm](https://nilay-v3rma.github.io/gsoc-blog/posts/Week%209/index.html) + diff --git a/src/content/blog/nilay-gsoc-2025-welcome-drawing-bonds-that-matter.mdx b/src/content/blog/nilay-gsoc-2025-welcome-drawing-bonds-that-matter.mdx new file mode 100644 index 0000000..761cc49 --- /dev/null +++ b/src/content/blog/nilay-gsoc-2025-welcome-drawing-bonds-that-matter.mdx @@ -0,0 +1,17 @@ +--- +title: "Drawing Bonds That Matter - Welcome" +description: "Nilay Verma introduces his GSoC 2025 project with MDAnalysis and ProLIF." +date: "2025-05-10" +author: + name: "Nilay Verma" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["GSoC", "MDAnalysis", "Nilay Verma"] +coverImage: "/images/blog/title-cards/nilay-gsoc-2025-welcome-drawing-bonds-that-matter-light.png" +--- + +This archive entry points to Nilay Verma's original post, "Drawing Bonds That Matter - Welcome". It is included here as a source-linked entry with credit to the author. + +The post introduces Nilay's GSoC 2025 blog on drawing molecular interaction bonds with MDAnalysis and ProLIF. + +**Original source:** [Drawing Bonds That Matter - Welcome](https://nilay-v3rma.github.io/gsoc-blog/posts/welcome/index.html) + diff --git a/src/content/blog/progyan-notes-on-distributed-training.mdx b/src/content/blog/progyan-notes-on-distributed-training.mdx new file mode 100644 index 0000000..01fe5eb --- /dev/null +++ b/src/content/blog/progyan-notes-on-distributed-training.mdx @@ -0,0 +1,17 @@ +--- +title: "Notes on Distributed Training" +description: "Progyan Das collects notes on the practical and conceptual structure of distributed model training." +date: "2026-01-27" +author: + name: "Progyan Das" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["Machine Learning Systems", "Language Models", "Progyan Das"] +coverImage: "/images/blog/title-cards/progyan-notes-on-distributed-training-light.png" +--- + +This archive entry points to Progyan Das's original post, "Notes on Distributed Training". It is included here as a source-linked entry with credit to the author. + +The post gathers notes around distributed training, with attention to the systems ideas and implementation tradeoffs that shape large-scale machine learning workloads. + +**Original source:** [Notes on Distributed Training](https://plugyawn.com/distributed-training/) + diff --git a/src/content/blog/progyan-notes-on-language-models.mdx b/src/content/blog/progyan-notes-on-language-models.mdx new file mode 100644 index 0000000..5bf7db0 --- /dev/null +++ b/src/content/blog/progyan-notes-on-language-models.mdx @@ -0,0 +1,17 @@ +--- +title: "Notes on Language Models" +description: "Progyan Das collects notes on language models, their behavior, and how to think about them." +date: "2025-12-20" +author: + name: "Progyan Das" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["Language Models", "AI", "Progyan Das"] +coverImage: "/images/blog/title-cards/progyan-notes-on-language-models-light.png" +--- + +This archive entry points to Progyan Das's original post, "Notes on Language Models". It is included here as a source-linked entry with credit to the author. + +The post gathers observations on language models and the questions that come up when studying their capabilities, limits, and internal behavior. + +**Original source:** [Notes on Language Models](https://plugyawn.com/language-models-contd/) + diff --git a/src/content/blog/progyan-softer-software.mdx b/src/content/blog/progyan-softer-software.mdx new file mode 100644 index 0000000..46ed1bb --- /dev/null +++ b/src/content/blog/progyan-softer-software.mdx @@ -0,0 +1,17 @@ +--- +title: "Softer Software" +description: "Progyan Das reflects on language, software, and gentler ways of shaping computational systems." +date: "2026-03-27" +author: + name: "Progyan Das" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["Essays", "Software", "Progyan Das"] +coverImage: "/images/blog/title-cards/progyan-softer-software-light.png" +--- + +This archive entry points to Progyan Das's original post, "Softer Software". It is included here as a source-linked entry with credit to the author. + +The post reflects on language as a medium for writing, shaping, and maintaining software systems, and on how gentler interfaces can change the way programmers work with code. + +**Original source:** [Softer Software](https://plugyawn.com/language-as-software/) + diff --git a/src/content/blog/progyan-we-can-be-more-than-wizards.mdx b/src/content/blog/progyan-we-can-be-more-than-wizards.mdx new file mode 100644 index 0000000..bd3c0c3 --- /dev/null +++ b/src/content/blog/progyan-we-can-be-more-than-wizards.mdx @@ -0,0 +1,17 @@ +--- +title: "We can be more than Wizards" +description: "Progyan Das writes about craft, agency, and building technology beyond mystique." +date: "2026-03-27" +author: + name: "Progyan Das" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["Essays", "Software", "Progyan Das"] +coverImage: "/images/blog/title-cards/progyan-we-can-be-more-than-wizards-light.png" +--- + +This archive entry points to Progyan Das's original post, "We can be more than Wizards". It is included here as a source-linked entry with credit to the author. + +The essay frames computing as a practice that can be clearer and more grounded than technical mystique, while still preserving a sense of ambition and imagination. + +**Original source:** [We can be more than Wizards](https://plugyawn.com/we-can-be-more-than-wizards/) + diff --git a/src/content/blog/progyan-why-i-like-really-big-models.mdx b/src/content/blog/progyan-why-i-like-really-big-models.mdx new file mode 100644 index 0000000..0525d98 --- /dev/null +++ b/src/content/blog/progyan-why-i-like-really-big-models.mdx @@ -0,0 +1,17 @@ +--- +title: "Why I like Really Big Models" +description: "Progyan Das discusses why very large language models can be interesting from an evaluation and training perspective." +date: "2026-03-27" +author: + name: "Progyan Das" + image: "/favicon/web-app-manifest-192x192.png" +tags: ["Language Models", "AI", "Progyan Das"] +coverImage: "/images/blog/title-cards/progyan-why-i-like-really-big-models-light.png" +--- + +This archive entry points to Progyan Das's original post, "Why I like Really Big Models". It is included here as a source-linked entry with credit to the author. + +The post explores why scaling can matter for language models, connecting evaluation, stochastic behavior, reinforcement learning, and the possibility of richer model behavior at larger scales. + +**Original source:** [Why I like Really Big Models](https://plugyawn.com/really-big-models/) + diff --git a/src/content/blog/python-is-not-an-acceptable-ml.mdx b/src/content/blog/python-is-not-an-acceptable-ml.mdx index 8e81e5d..bad90fb 100644 --- a/src/content/blog/python-is-not-an-acceptable-ml.mdx +++ b/src/content/blog/python-is-not-an-acceptable-ml.mdx @@ -6,7 +6,7 @@ author: name: 'Balagopal Komarath' image: '/favicon/web-app-manifest-192x192.png' tags: ['Programming Languages', 'Teaching', 'OCaml', 'Python'] -coverImage: '/images/course-resources/theory-of-computing.png' +coverImage: '/images/blog/title-cards/python-is-not-an-acceptable-ml-light.png' --- Python is a popular fixture in introductory programming courses. Its adoption is mainly driven by two reasons: its popularity in scientific computing and industry, and its perceived readability. diff --git a/src/data/faculty.ts b/src/data/faculty.ts index 3867068..3e10499 100644 --- a/src/data/faculty.ts +++ b/src/data/faculty.ts @@ -6,6 +6,23 @@ export type FacultyCategory = | 'teaching' | 'guest'; +export type FacultyProfileLinkType = + | 'website' + | 'scholar' + | 'dblp' + | 'github' + | 'youtube' + | 'linkedin' + | 'x' + | 'mastodon' + | 'profile'; + +export interface FacultyProfileLink { + type: FacultyProfileLinkType; + label: string; + url: string; +} + export interface FacultyMember { name: string; designation: string; @@ -16,6 +33,7 @@ export interface FacultyMember { researchAreas: string[]; dateOfJoining: string; homepage?: string; + links?: FacultyProfileLink[]; } export const FACULTY: FacultyMember[] = [ @@ -28,6 +46,18 @@ export const FACULTY: FacultyMember[] = [ researchAreas: [], dateOfJoining: '2022-10-03', homepage: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + links: [ + { + type: 'website', + label: 'Personal website', + url: 'https://www.cse.iitk.ac.in/users/moona/', + }, + { + type: 'dblp', + label: 'DBLP', + url: 'https://dblp.org/pid/16/2265', + }, + ], }, { name: 'Anirban Dasgupta', @@ -37,6 +67,23 @@ export const FACULTY: FacultyMember[] = [ researchAreas: ['Computer Science and Engineering', 'Artificial Intelligence'], dateOfJoining: '2013-12-30', homepage: 'https://iitgn.ac.in/faculty/cse/fac-anirban', + links: [ + { + type: 'website', + label: 'Personal website', + url: 'https://sites.google.com/site/anirbandasgupta', + }, + { + type: 'scholar', + label: 'Google Scholar', + url: 'https://scholar.google.com/citations?hl=en&user=plJC8R0AAAAJ', + }, + { + type: 'dblp', + label: 'DBLP', + url: 'https://dblp.org/pid/54/385-1', + }, + ], }, { name: 'Bireswar Das', @@ -46,6 +93,23 @@ export const FACULTY: FacultyMember[] = [ researchAreas: ['Computer Science and Engineering'], dateOfJoining: '2010-06-28', homepage: 'https://iitgn.ac.in/faculty/cse/fac-bireswar', + links: [ + { + type: 'website', + label: 'Personal website', + url: 'https://sites.google.com/site/bireswar/home', + }, + { + type: 'scholar', + label: 'Google Scholar', + url: 'https://scholar.google.com/citations?hl=en&user=RcBEsucAAAAJ', + }, + { + type: 'dblp', + label: 'DBLP', + url: 'https://dblp.org/pid/93/3858', + }, + ], }, { name: 'Neeldhara Misra', @@ -55,6 +119,43 @@ export const FACULTY: FacultyMember[] = [ researchAreas: ['Computer Science and Engineering', 'Artificial Intelligence'], dateOfJoining: '2015-09-23', homepage: 'https://iitgn.ac.in/faculty/cse/fac-neeldhara', + links: [ + { + type: 'website', + label: 'Personal website', + url: 'https://www.neeldhara.com/', + }, + { + type: 'scholar', + label: 'Google Scholar', + url: 'https://scholar.google.com/citations?hl=en&user=XFgieDYAAAAJ', + }, + { + type: 'dblp', + label: 'DBLP', + url: 'https://dblp.org/pid/85/6789', + }, + { + type: 'github', + label: 'GitHub', + url: 'https://github.com/neeldhara', + }, + { + type: 'youtube', + label: 'YouTube', + url: 'https://www.youtube.com/c/NeeldharaMisra42', + }, + { + type: 'linkedin', + label: 'LinkedIn', + url: 'https://www.linkedin.com/in/neeldhara-misra-a54b6920/', + }, + { + type: 'mastodon', + label: 'Mastodon', + url: 'https://mathstodon.xyz/@neeldhara', + }, + ], }, { name: 'Nipun Batra', @@ -65,6 +166,43 @@ export const FACULTY: FacultyMember[] = [ researchAreas: ['Computer Science and Engineering', 'Artificial Intelligence'], dateOfJoining: '2018-07-09', homepage: 'https://iitgn.ac.in/faculty/cse/fac-nipun', + links: [ + { + type: 'website', + label: 'Personal website', + url: 'https://nipunbatra.github.io/', + }, + { + type: 'scholar', + label: 'Google Scholar', + url: 'https://scholar.google.co.in/citations?hl=en&oi=ao&user=rFGzHlIAAAAJ', + }, + { + type: 'dblp', + label: 'DBLP', + url: 'https://dblp.org/pid/19/2128', + }, + { + type: 'github', + label: 'GitHub', + url: 'https://github.com/nipunbatra', + }, + { + type: 'youtube', + label: 'YouTube', + url: 'https://www.youtube.com/@NipunBatra0', + }, + { + type: 'linkedin', + label: 'LinkedIn', + url: 'https://www.linkedin.com/in/nipunbatra0/', + }, + { + type: 'x', + label: 'X', + url: 'https://twitter.com/nipun_batra', + }, + ], }, { name: 'Manoj D Gupta', @@ -74,6 +212,23 @@ export const FACULTY: FacultyMember[] = [ researchAreas: ['Computer Science and Engineering'], dateOfJoining: '2016-01-18', homepage: 'https://iitgn.ac.in/faculty/cse/fac-manoj', + links: [ + { + type: 'website', + label: 'Personal website', + url: 'https://gmanoj.people.iitgn.ac.in/', + }, + { + type: 'scholar', + label: 'Google Scholar', + url: 'https://scholar.google.com/citations?hl=en&user=jt38uQ8AAAAJ', + }, + { + type: 'dblp', + label: 'DBLP', + url: 'https://dblp.org/pid/05/5157', + }, + ], }, { name: 'Mayank Singh', @@ -83,6 +238,28 @@ export const FACULTY: FacultyMember[] = [ researchAreas: ['Computer Science and Engineering', 'Artificial Intelligence'], dateOfJoining: '2019-02-06', homepage: 'https://iitgn.ac.in/faculty/cse/fac-mayank', + links: [ + { + type: 'website', + label: 'Personal website', + url: 'https://mayank4490.github.io/', + }, + { + type: 'dblp', + label: 'DBLP', + url: 'https://dblp.org/pid/96/4770', + }, + { + type: 'x', + label: 'Lingo Labs on X', + url: 'https://twitter.com/lingoiitgn', + }, + { + type: 'linkedin', + label: 'Lingo Labs on LinkedIn', + url: 'https://in.linkedin.com/company/lingo-labs-iitgn', + }, + ], }, { name: 'Sameer G Kulkarni', @@ -93,6 +270,23 @@ export const FACULTY: FacultyMember[] = [ researchAreas: ['Computer Science and Engineering', 'Electrical Engineering'], dateOfJoining: '2020-04-03', homepage: 'https://iitgn.ac.in/faculty/cse/fac-sameer', + links: [ + { + type: 'website', + label: 'Personal website', + url: 'https://sameergk.github.io/', + }, + { + type: 'scholar', + label: 'Google Scholar', + url: 'https://scholar.google.com/citations?hl=en&user=CnPfKYUAAAAJ', + }, + { + type: 'dblp', + label: 'DBLP', + url: 'https://dblp.org/pid/185/5705', + }, + ], }, { name: 'Balagopal Komarath', @@ -102,6 +296,23 @@ export const FACULTY: FacultyMember[] = [ researchAreas: ['Computer Science and Engineering'], dateOfJoining: '2020-12-21', homepage: 'https://iitgn.ac.in/faculty/cse/fac-balagopal', + links: [ + { + type: 'website', + label: 'Personal website', + url: 'https://bkomarath.rbgo.in/', + }, + { + type: 'scholar', + label: 'Google Scholar', + url: 'https://scholar.google.com/citations?hl=en&user=uTv7Dl4AAAAJ', + }, + { + type: 'dblp', + label: 'DBLP', + url: 'https://dblp.org/pid/124/2629', + }, + ], }, { name: 'Abhishek Bichhawat', @@ -111,6 +322,23 @@ export const FACULTY: FacultyMember[] = [ researchAreas: ['Computer Science and Engineering'], dateOfJoining: '2021-03-30', homepage: 'https://iitgn.ac.in/faculty/cse/fac-abhishek', + links: [ + { + type: 'website', + label: 'Personal website', + url: 'https://people.iitgn.ac.in/~abhishek/', + }, + { + type: 'scholar', + label: 'Google Scholar', + url: 'https://scholar.google.com/citations?hl=en&user=qJavKW4AAAAJ', + }, + { + type: 'dblp', + label: 'DBLP', + url: 'https://dblp.org/pid/61/10308', + }, + ], }, { name: 'Yogesh Kumar Meena', @@ -124,6 +352,23 @@ export const FACULTY: FacultyMember[] = [ ], dateOfJoining: '2023-02-14', homepage: 'https://iitgn.ac.in/faculty/cse/fac-yogesh', + links: [ + { + type: 'website', + label: 'Personal website', + url: 'https://yogeshmeena.com/', + }, + { + type: 'scholar', + label: 'Google Scholar', + url: 'https://scholar.google.it/citations?hl=en&user=5xxepFkAAAAJ', + }, + { + type: 'dblp', + label: 'DBLP', + url: 'https://dblp.org/pid/66/10604', + }, + ], }, { name: 'Shouvick Mondal', @@ -133,6 +378,23 @@ export const FACULTY: FacultyMember[] = [ researchAreas: ['Computer Science and Engineering'], dateOfJoining: '2023-02-01', homepage: 'https://iitgn.ac.in/faculty/cse/fac-shouvick', + links: [ + { + type: 'website', + label: 'Personal website', + url: 'https://sites.google.com/view/shouvick', + }, + { + type: 'scholar', + label: 'Google Scholar', + url: 'https://scholar.google.com/citations?hl=en&user=QtsJ2pUAAAAJ', + }, + { + type: 'dblp', + label: 'DBLP', + url: 'https://dblp.org/pid/167/4011', + }, + ], }, { name: 'Manisha Padala', @@ -142,6 +404,23 @@ export const FACULTY: FacultyMember[] = [ researchAreas: [], dateOfJoining: '2024-03-26', homepage: 'https://iitgn.ac.in/faculty/cse/fac-manisha', + links: [ + { + type: 'website', + label: 'Personal website', + url: 'https://sites.google.com/view/manishapadala/home', + }, + { + type: 'scholar', + label: 'Google Scholar', + url: 'https://scholar.google.com/citations?hl=en&user=xV1WKDkAAAAJ', + }, + { + type: 'dblp', + label: 'DBLP', + url: 'https://dblp.org/pid/213/8101', + }, + ], }, // --- Affiliated Faculty --- @@ -158,6 +437,23 @@ export const FACULTY: FacultyMember[] = [ ], dateOfJoining: '2013-05-20', homepage: 'https://iitgn.ac.in/faculty/ee/fac-shanmuganathan', + links: [ + { + type: 'website', + label: 'Personal website', + url: 'https://people.iitgn.ac.in/~shanmuga/', + }, + { + type: 'scholar', + label: 'Google Scholar', + url: 'https://scholar.google.com/citations?hl=en&user=3YWptB8AAAAJ', + }, + { + type: 'dblp', + label: 'DBLP', + url: 'https://dblp.org/pid/70/4688', + }, + ], }, { name: 'Udit Bhatia', @@ -168,6 +464,18 @@ export const FACULTY: FacultyMember[] = [ researchAreas: ['Civil Engineering', 'Artificial Intelligence', 'Earth Sciences'], dateOfJoining: '2019-01-17', homepage: 'https://iitgn.ac.in/faculty/civil/fac-udit', + links: [ + { + type: 'scholar', + label: 'Google Scholar', + url: 'https://scholar.google.com/citations?hl=en&user=tYqY-VoAAAAJ', + }, + { + type: 'dblp', + label: 'DBLP', + url: 'https://dblp.org/pid/199/7860', + }, + ], }, // --- Teaching Faculty --- { @@ -179,6 +487,13 @@ export const FACULTY: FacultyMember[] = [ researchAreas: ['Computer Science and Engineering'], dateOfJoining: '2024-03-11', homepage: 'https://iitgn.ac.in/faculty/cse/fac-jyothi', + links: [ + { + type: 'profile', + label: 'CCL profile', + url: 'https://ccl.iitgn.ac.in/ccl-team/jyothi-krishnan', + }, + ], }, // --- Practice Faculty --- @@ -191,6 +506,28 @@ export const FACULTY: FacultyMember[] = [ researchAreas: [], dateOfJoining: '2025-12-12', homepage: 'https://iitgn.ac.in/faculty/cse/fac-manu', + links: [ + { + type: 'website', + label: 'Personal website', + url: 'https://manuawasthi.in/', + }, + { + type: 'scholar', + label: 'Google Scholar', + url: 'https://scholar.google.com/citations?hl=en&user=AaMBbMMAAAAJ', + }, + { + type: 'x', + label: 'X', + url: 'https://twitter.com/mnwsth', + }, + { + type: 'linkedin', + label: 'LinkedIn', + url: 'https://linkedin.com/in/manuawasthi', + }, + ], }, { name: 'Anup Kalbalia', @@ -200,6 +537,13 @@ export const FACULTY: FacultyMember[] = [ researchAreas: [], dateOfJoining: '2026-02-02', homepage: 'https://iitgn.ac.in/faculty/cse/fac-anup', + links: [ + { + type: 'linkedin', + label: 'LinkedIn', + url: 'https://www.linkedin.com/in/anup-kalbalia-66387b22/', + }, + ], }, // --- Visiting / Guest Faculty --- @@ -219,6 +563,18 @@ export const FACULTY: FacultyMember[] = [ primaryDepartment: 'Computer Science and Engineering', researchAreas: [], dateOfJoining: '2025-03-01', + links: [ + { + type: 'profile', + label: 'IIT Guwahati profile', + url: 'https://www.iitg.ac.in/iitg_faculty_details?fac=bUJwSThqUnkyTE5MdXBJY0I3d0liQT09', + }, + { + type: 'website', + label: 'Personal website', + url: 'https://www.iitg.ernet.in/samit/', + }, + ], }, { name: 'Venkatesh Raman', @@ -228,6 +584,18 @@ export const FACULTY: FacultyMember[] = [ researchAreas: [], dateOfJoining: '2025-10-17', homepage: 'https://iitgn.ac.in/faculty/guestprof/fac-venkatesh_raman', + links: [ + { + type: 'website', + label: 'Personal website', + url: 'https://www.imsc.res.in/~vraman/', + }, + { + type: 'dblp', + label: 'DBLP', + url: 'https://dblp.org/pid/25/2134', + }, + ], }, { name: 'Viraj Shah', @@ -236,6 +604,23 @@ export const FACULTY: FacultyMember[] = [ primaryDepartment: 'Computer Science and Engineering', researchAreas: [], dateOfJoining: '2026-01-05', + links: [ + { + type: 'website', + label: 'Personal website', + url: 'https://virajshah.com/', + }, + { + type: 'scholar', + label: 'Google Scholar', + url: 'https://scholar.google.com/citations?hl=en&user=am47A6YAAAAJ', + }, + { + type: 'linkedin', + label: 'LinkedIn', + url: 'https://linkedin.com/in/virajshah018', + }, + ], }, { name: 'Madhavan Unnikrishnan Nair', @@ -253,6 +638,13 @@ export const FACULTY: FacultyMember[] = [ researchAreas: [], dateOfJoining: '2025-01-01', homepage: 'https://iitgn.ac.in/faculty/guestprof/yuvraj_patel', + links: [ + { + type: 'website', + label: 'Personal website', + url: 'https://homepages.inf.ed.ac.uk/ypatel/', + }, + ], }, { name: 'Subir Verma', @@ -278,6 +670,13 @@ export const FACULTY: FacultyMember[] = [ primaryDepartment: 'Computer Science and Engineering', researchAreas: [], dateOfJoining: '2025-12-17', + links: [ + { + type: 'website', + label: 'Personal website', + url: 'https://www.csa.iisc.ac.in/~gopi/', + }, + ], }, ]; diff --git a/src/data/news.ts b/src/data/news.ts index dd9bda8..2b11b40 100644 --- a/src/data/news.ts +++ b/src/data/news.ts @@ -3,7 +3,8 @@ export type NewsCategory = | "research" | "award" | "event" - | "infrastructure"; + | "infrastructure" + | "service"; export type NewsStatus = "confirmed" | "achievement"; @@ -27,6 +28,7 @@ export const CATEGORY_LABELS: Record = { award: "Award", event: "Event", infrastructure: "Infrastructure", + service: "Service", }; export const STATUS_LABELS: Record = { @@ -35,6 +37,208 @@ export const STATUS_LABELS: Record = { }; export const departmentNews: DepartmentNewsItem[] = [ + { + id: "abhishek-asiaccs-2026-track-chair", + title: "Prof. Abhishek Bichhawat named AsiaCCS 2026 track co-chair", + summary: + "Prof. Bichhawat is track co-chair for Software Security, Formal Methods, and Programming Languages at ACM AsiaCCS 2026 in Bengaluru.", + people: "Prof. Abhishek Bichhawat", + displayDate: "June 2026", + date: "2026-06-01", + category: "service", + status: "confirmed", + sourceLabel: "ACM AsiaCCS 2026 Program Committee", + sourceUrl: "https://asiaccs2026.cse.iitkgp.ac.in/program-committee/", + }, + { + id: "abhishek-acm-summer-school-systems-ml-2026", + title: + "Prof. Abhishek Bichhawat serves as academic coordinator for ACM India Summer School on Systems for ML", + summary: + "The VIT-hosted ACM India summer school runs from 1-12 June 2026 and covers scalable ML systems, deep learning infrastructure, hardware accelerators, distributed ML, Edge AI, ML compilers, and explainable AI.", + people: "Prof. Abhishek Bichhawat", + displayDate: "June 2026", + date: "2026-06-01", + category: "service", + status: "confirmed", + sourceLabel: "VIT brochure", + sourceUrl: "https://vit.ac.in/wp-content/uploads/2026/05/ACM_VIT-brochure-U3.pdf", + }, + { + id: "abhishek-acm-indics-secure-usable-systems-2026", + title: + "Prof. Abhishek Bichhawat organizes ACM IndiCS workshop on secure and usable systems", + summary: + "The 2026 ACM IndiCS workshop focuses on designing secure and usable systems for humans, connecting security, privacy, HCI, and systems perspectives.", + people: "Prof. Abhishek Bichhawat", + displayDate: "2026", + date: "2026-06-01", + category: "service", + status: "confirmed", + sourceLabel: "ACM IndiCS", + sourceUrl: "https://india.acm.org/research/indics", + }, + { + id: "shanmuga-neurips-2026-area-chair", + title: "Prof. Shanmuganathan Raman serves as NeurIPS 2026 Area Chair", + summary: + "Prof. Raman is contributing to the NeurIPS 2026 main-track review process as an Area Chair.", + people: "Prof. Shanmuganathan Raman", + displayDate: "2026", + date: "2026-05-06", + category: "service", + status: "confirmed", + sourceLabel: "NeurIPS 2026 Main Track Handbook", + sourceUrl: "https://neurips.cc/Conferences/2026/MainTrackHandbook", + }, + { + id: "neeldhara-aamas-2026-area-chair", + title: "Prof. Neeldhara Misra serves as AAMAS 2026 Area Chair", + summary: + "Prof. Misra is listed as an Area Chair for the Game Theory and Economic Paradigms area at AAMAS 2026.", + people: "Prof. Neeldhara Misra", + displayDate: "2026", + date: "2026-05-25", + category: "service", + status: "confirmed", + sourceLabel: "AAMAS 2026 Area Chairs", + sourceUrl: "https://cyprusconferences.org/aamas2026/area-chairs/", + }, + { + id: "neeldhara-caldam-2026-pc-cochair", + title: "Prof. Neeldhara Misra serves as CALDAM 2026 PC co-chair", + summary: + "Prof. Misra and Prof. Arti Pandey are program committee co-chairs for the 12th International Conference on Algorithms and Discrete Applied Mathematics.", + people: "Prof. Neeldhara Misra and Prof. Arti Pandey", + displayDate: "Feb 2026", + date: "2026-02-12", + category: "service", + status: "confirmed", + sourceLabel: "CALDAM 2026 Committees", + sourceUrl: "https://caldam2026.iitdh.ac.in/committees", + }, + { + id: "abhishek-jcs-associate-editor-2026", + title: + "Prof. Abhishek Bichhawat joins Journal of Computer Security editorial board", + summary: + "The Journal of Computer Security editorial board lists Prof. Bichhawat among its Associate Editors.", + people: "Prof. Abhishek Bichhawat", + displayDate: "2026", + date: "2026-01-01", + category: "service", + status: "confirmed", + sourceLabel: "Journal of Computer Security editorial board", + sourceUrl: "https://journals.sagepub.com/editorial-board/JCU", + }, + { + id: "abhishek-plas-2025-pc-cochair", + title: "Prof. Abhishek Bichhawat serves as PLAS 2025 PC co-chair", + summary: + "PLAS 2025, the 20th Workshop on Programming Languages and Analysis for Security, was co-located with ACM CCS 2025 in Taipei.", + people: "Prof. Abhishek Bichhawat", + displayDate: "Oct 2025", + date: "2025-10-13", + category: "service", + status: "confirmed", + sourceLabel: "PLAS 2025", + sourceUrl: "https://plas25.github.io/", + }, + { + id: "neeldhara-ctis-2024-pc-cochair", + title: "Prof. Neeldhara Misra serves as CTiS 2024 PC co-chair", + summary: + "Prof. Misra was program committee co-chair for ACM India's Computational Thinking in Schools 2024 conference with Geeta Ghormade.", + people: "Prof. Neeldhara Misra and Geeta Ghormade", + displayDate: "Jul 2024", + date: "2024-07-05", + category: "service", + status: "confirmed", + sourceLabel: "CTiS 2024", + sourceUrl: "https://event.india.acm.org/ctis/ctis-2024/", + }, + { + id: "neeldhara-ipec-2023-pc-cochair", + title: "Prof. Neeldhara Misra serves as IPEC 2023 PC co-chair", + summary: + "Prof. Misra and Magnus Wahlström were program committee co-chairs for the 18th International Symposium on Parameterized and Exact Computation.", + people: "Prof. Neeldhara Misra and Magnus Wahlström", + displayDate: "Sep 2023", + date: "2023-09-06", + category: "service", + status: "confirmed", + sourceLabel: "IPEC 2023", + sourceUrl: "https://algo-conference.org/2023/ipec", + }, + { + id: "neeldhara-acmw-india-council", + title: "Prof. Neeldhara Misra serves on the ACM-W India Council", + summary: + "Prof. Misra has served as a member of the ACM-India ACM-W Council since 2019.", + people: "Prof. Neeldhara Misra", + displayDate: "2019-present", + date: "2026-01-01", + category: "service", + status: "confirmed", + sourceLabel: "IITGN faculty chair profile", + sourceUrl: "https://iitgn.ac.in/faculty/chairs/avss", + }, + { + id: "neeldhara-iarcs-council-2020-2023", + title: "Prof. Neeldhara Misra served on the IARCS Council", + summary: + "Prof. Misra served as a council member of the Indian Association for Research in Computing Science from 2020 to 2023.", + people: "Prof. Neeldhara Misra", + displayDate: "2020-23", + date: "2023-12-01", + category: "service", + status: "confirmed", + sourceLabel: "IARCS Council", + sourceUrl: "https://www.iarcs.org.in/about/council.php", + }, + { + id: "neeldhara-acm-internal-affairs-2020-2022", + title: "Prof. Neeldhara Misra served on the ACM Internal Affairs Committee", + summary: + "Prof. Misra served as a member of the ACM Internal Affairs Committee from 2020 to 2022.", + people: "Prof. Neeldhara Misra", + displayDate: "2020-22", + date: "2022-12-01", + category: "service", + status: "confirmed", + sourceLabel: "Neeldhara Misra CV", + sourceUrl: "https://www.neeldhara.com/CV.pdf", + }, + { + id: "neeldhara-acm-summer-winter-schools-steering", + title: + "Prof. Neeldhara Misra served on the ACM-India Summer and Winter Schools steering committee", + summary: + "Prof. Misra was a steering committee member for ACM-India Summer and Winter Schools from 2019 to 2022.", + people: "Prof. Neeldhara Misra", + displayDate: "2019-22", + date: "2022-12-01", + category: "service", + status: "confirmed", + sourceLabel: "ACM India Annual Report", + sourceUrl: + "https://www.acm.org/binaries/content/assets/about/annual-reports/india_council_fy-22.pdf", + }, + { + id: "neeldhara-algorithms-special-issue-2019", + title: + "Prof. Neeldhara Misra co-guest edited Algorithms special issue", + summary: + "Prof. Misra co-guest edited the Algorithms open-access special issue New Frontiers in Parameterized Complexity and Algorithms.", + people: "Prof. Neeldhara Misra, Frances Rosamond, and Meirav Zehavi", + displayDate: "2019", + date: "2019-09-30", + category: "service", + status: "confirmed", + sourceLabel: "Algorithms special issue", + sourceUrl: + "https://www.mdpi.com/journal/algorithms/special_issues/Parameterized_Complexity", + }, { id: "thermeval-kdd-2026", title: "ThermEval accepted at KDD 2026", @@ -77,7 +281,6 @@ export const departmentNews: DepartmentNewsItem[] = [ sourceLabel: "India Today", sourceUrl: "https://www.indiatoday.in/education-today/featurephilia/story/iit-gandhinagars-self-reliant-india-story-begins-in-classrooms-2869886-2026-02-18", - homepage: true, }, { id: "cvig-pollen-ai-2026", @@ -266,7 +469,7 @@ export const departmentNews: DepartmentNewsItem[] = [ id: "dharaben-acm-india-dda", title: "Dharaben R. Thakkar receives ACM India Doctoral Dissertation Award", summary: - "The theoretical CSE dissertation award recognizes work advised by Prof. Bireswar Das.", + "The ACM India dissertation award recognizes work advised by Prof. Bireswar Das.", people: "Dr. Dharaben R. Thakkar and Prof. Bireswar Das", displayDate: "2025", date: "2025-09-01", diff --git a/src/data/phd-recent-graduates.ts b/src/data/phd-recent-graduates.ts new file mode 100644 index 0000000..b8b8fa6 --- /dev/null +++ b/src/data/phd-recent-graduates.ts @@ -0,0 +1,128 @@ +import { RESEARCH_SCHOLARS, RESEARCH_SCHOLAR_SOURCE } from './research-scholars'; + +export interface RecentPhDGraduate { + name: string; + directoryName: string; + program: 'Computer Science and Engineering' | 'Artificial Intelligence'; + joined: string; + email: string; + image: string; + thesisTitle: string; + defenseDate: string; + defenseDateTime: string; + supervisor: string; + summary: string; + source: string; +} + +type GraduateInput = Omit< + RecentPhDGraduate, + 'program' | 'joined' | 'email' | 'image' | 'source' +>; + +const getScholar = (directoryName: string) => { + const scholar = RESEARCH_SCHOLARS.find((item) => item.name === directoryName); + + if (!scholar) { + throw new Error(`Missing research scholar data for ${directoryName}`); + } + + return scholar; +}; + +const graduates: GraduateInput[] = [ + { + name: 'Jayesh Malaviya', + directoryName: 'Malaviya Jayesh Vallabhbhai', + thesisTitle: + 'Subset Selection for Scalable Machine Learning: Coresets, Sketching, and Statistical Guarantees', + defenseDate: '3 Jun 2026', + defenseDateTime: '2026-06-03T18:00:00+05:30', + supervisor: 'Anirban Dasgupta', + summary: + 'Scalable machine learning through coresets, sketching, and randomized numerical linear algebra.', + }, + { + name: 'Pritam Kadasi', + directoryName: 'Kadasi Pritam Shankaraiah', + thesisTitle: + 'Budget-Aware Decision Making for NLP: Annotation, Training and Data', + defenseDate: '3 Jun 2026', + defenseDateTime: '2026-06-03T17:30:00+05:30', + supervisor: 'Mayank Singh', + summary: + 'Natural language processing and large language models, with an emphasis on instruction tuning, multilingual AI, and resource-efficient model training.', + }, + { + name: 'Himanshu Beniwal', + directoryName: 'Himanshu Beniwal', + thesisTitle: 'Assessing Factuality and Toxicity in Large Language Models', + defenseDate: '18 May 2026', + defenseDateTime: '2026-05-18T09:00:00+05:30', + supervisor: 'Mayank Singh', + summary: + 'Factuality, toxicity, and safety assessment in multilingual large language models.', + }, + { + name: 'Prajwal Kumar Singh', + directoryName: 'Prajwal Kumar Singh', + thesisTitle: + 'Scalable Generative Vision and Neural Decoding: Connecting Machine and Human Perception', + defenseDate: '6 May 2026', + defenseDateTime: '2026-05-06T16:30:00+05:30', + supervisor: 'Shanmuganathan Raman', + summary: + 'Generative vision and neural decoding methods that connect machine and human perception.', + }, + { + name: 'Jinia Ghosh', + directoryName: 'Jinia Ghosh', + thesisTitle: + 'Graphs Defined on Groups: Complexity Theoretic and Algorithmic Aspects', + defenseDate: '29 Apr 2026', + defenseDateTime: '2026-04-29T10:00:00+05:30', + supervisor: 'Bireswar Das', + summary: + 'Complexity-theoretic and algorithmic aspects of graphs defined in terms of groups.', + }, + { + name: 'Anant Kumar', + directoryName: 'Anant Kumar', + thesisTitle: + 'On Graph Isomorphism for Power Graphs and Subgraph Counting in Sparse Graphs', + defenseDate: '24 Mar 2026', + defenseDateTime: '2026-03-24T21:30:00+05:30', + supervisor: 'Bireswar Das', + summary: + 'Graph isomorphism for power graphs and subgraph counting in sparse graphs.', + }, + { + name: 'Zeel B Patel', + directoryName: 'Patel Zeel Bharatkumar', + thesisTitle: 'AI for Air Quality: Modeling, Sensor Placement and Source Detection', + defenseDate: '4 Feb 2026', + defenseDateTime: '2026-02-04T17:00:00+05:30', + supervisor: 'Nipun Batra', + summary: + 'AI for social good and air-quality systems, including modeling, sensor placement, and source detection.', + }, +]; + +export const RECENT_PHD_GRADUATES: RecentPhDGraduate[] = graduates + .map((graduate) => { + const scholar = getScholar(graduate.directoryName); + + return { + ...graduate, + program: scholar.program, + joined: scholar.joined, + email: scholar.email, + image: scholar.image, + source: RESEARCH_SCHOLAR_SOURCE, + }; + }) + .sort( + (a, b) => + new Date(b.defenseDateTime).getTime() - + new Date(a.defenseDateTime).getTime(), + ); diff --git a/src/data/research-area-pages.ts b/src/data/research-area-pages.ts new file mode 100644 index 0000000..d4299fb --- /dev/null +++ b/src/data/research-area-pages.ts @@ -0,0 +1,819 @@ +export type ResearchAreaSlug = + | 'ai' + | 'theory' + | 'security' + | 'data-science' + | 'systems' + | 'hci'; + +export type ResearchAreaFaculty = { + name: string; + title: string; + focus: string; + profile?: string; +}; + +export type ResearchAreaWork = { + title: string; + detail: string; + href?: string; +}; + +export type ResearchAreaVideo = { + title: string; + href: string; + embedUrl: string; +}; + +export type ResearchAreaPage = { + slug: ResearchAreaSlug; + title: string; + shortTitle: string; + description: string; + accent: { + foreground: string; + soft: string; + background: string; + header: string; + border: string; + }; + heroImage: { + src: string; + alt: string; + caption: string; + }; + themes: string[]; + faculty: ResearchAreaFaculty[]; + publications: ResearchAreaWork[]; + projects: ResearchAreaWork[]; + sources: ResearchAreaWork[]; + featuredVideo?: ResearchAreaVideo; +}; + +export const RESEARCH_AREAS: Record = { + ai: { + slug: 'ai', + title: 'AI & Machine Learning', + shortTitle: 'AI & ML', + description: + 'Research in AI and machine learning spans multilingual NLP, computer vision, trustworthy and fair learning, AI for sustainability, and human-centred intelligent systems.', + accent: { + foreground: '#5572a3', + soft: '#e8eef7', + background: '#f5f8fc', + header: '#fbfcfe', + border: '#d8e2f0', + }, + heroImage: { + src: '/images/course-resources/machine-learning.png', + alt: 'Machine learning course visual', + caption: 'Models, data, language, vision, and deployment-minded AI.', + }, + featuredVideo: { + title: 'AI and machine learning at IIT Gandhinagar', + href: 'https://www.youtube.com/watch?v=sx1QhfZ4yMA', + embedUrl: 'https://www.youtube.com/embed/sx1QhfZ4yMA', + }, + themes: [ + 'Multilingual NLP and Indian-language AI', + 'Computer vision, graphics, and computational photography', + 'Efficient learning algorithms and graph ML', + 'Fair, federated, and trustworthy learning', + 'AI for sustainability, health, and assistive systems', + ], + faculty: [ + { + name: 'Mayank Singh', + title: 'Associate Professor', + focus: + 'Multilingual NLP, large language models, scientific text mining, and AI tools for research and education.', + profile: 'https://iitgn.ac.in/faculty/cse/fac-mayank', + }, + { + name: 'Nipun Batra', + title: 'Associate Professor', + focus: + 'Machine learning for scalable sensing, smart buildings, air quality, health sensing, and computational sustainability.', + profile: 'https://nipunbatra.github.io/', + }, + { + name: 'Anirban Dasgupta', + title: 'Professor', + focus: + 'Algorithms and machine learning at scale, sketching, sampling, graph learning, and efficient ML pipelines.', + profile: 'https://iitgn.ac.in/faculty/cse/fac-anirban', + }, + { + name: 'Yogesh Kumar Meena', + title: 'Assistant Professor', + focus: + 'Human-AI interaction, brain-computer interfaces, eye tracking, multimodal interaction, and assistive AI.', + profile: 'https://yogeshmeena.com/', + }, + { + name: 'Manisha Padala', + title: 'Assistant Professor', + focus: + 'Fairness, federated learning, differential privacy, strategic clients, and trustworthy distributed ML.', + profile: 'https://iitgn.ac.in/faculty/cse/fac-manisha', + }, + { + name: 'Shanmuganathan Raman', + title: 'Professor', + focus: + 'Computer vision, deep learning, computational photography, image/video processing, and graphics.', + profile: 'https://shanmuga.people.iitgn.ac.in/', + }, + ], + publications: [ + { + title: + 'FIT-GNN: Faster Inference Time for GNNs that FIT in Memory Using Coarsening', + detail: 'TMLR 2026 - efficient graph neural-network inference.', + }, + { + title: + 'Gaslight, Gatekeep, V1-V3: Early Visual Cortex Alignment Shields Vision-Language Models from Sycophantic Manipulation', + detail: '2026 preprint - robustness and alignment for vision-language models.', + }, + { + title: + 'GF-Score: Certified Class-Conditional Robustness Evaluation with Fairness Guarantees', + detail: '2026 preprint - fairness-aware robustness assessment.', + }, + { + title: + 'MERLiN: Single-Shot Material Estimation and ReLighting for Photometric Stereo', + detail: 'ECCV 2024 - computer vision and inverse rendering.', + }, + ], + projects: [ + { + title: + "Chitrabhasha: Developing India's Largest Dataset and Foundation Models for Multimodal AI", + detail: 'ANRF Advanced Research Grant led by Mayank Singh.', + }, + { + title: + 'Scalable Detection of Brick Kilns from Low-Resolution Satellite Imagery for Environmental Compliance', + detail: 'ANRF project led by Nipun Batra.', + }, + { + title: + 'iGazeBuddy: Multimodal gaze-controlled learning system for dyslexia support', + detail: 'ANRF PMECRG project led by Yogesh Kumar Meena.', + }, + { + title: + 'Fair Federated Learning Framework in the Presence of Heterogeneous, Strategic, and Malicious Clients', + detail: 'ANRF early-career grant led by Manisha Padala.', + }, + ], + sources: [ + { + title: 'Lingo Labs research facilities entry', + detail: 'Public lab description for Mayank Singh and Lingo Labs.', + href: 'https://iitgn.ac.in/research/facilities', + }, + { + title: 'Nipun Batra homepage and Sustainability Lab', + detail: 'AI-powered sustainability and sensing research overview.', + href: 'https://nipunbatra.github.io/', + }, + { + title: 'Data Science Lab', + detail: 'Algorithms and machine learning for efficient ML pipelines.', + href: 'https://labs.iitgn.ac.in/datascience/', + }, + { + title: 'Shanmuganathan Raman homepage', + detail: 'Computer vision, graphics, and deep learning interests.', + href: 'https://shanmuga.people.iitgn.ac.in/', + }, + ], + }, + theory: { + slug: 'theory', + title: 'Theoretical Computer Science', + shortTitle: 'Theory', + description: + 'The theory group studies algorithms, complexity, graph problems, algebraic computation, quantum algorithms, computational social choice, and the foundations of efficient computation.', + accent: { + foreground: '#746099', + soft: '#eeeaf5', + background: '#f8f6fb', + header: '#fcfbfd', + border: '#ddd6e9', + }, + heroImage: { + src: '/images/course-resources/parameterized-algorithms.png', + alt: 'Parameterized algorithms course visual', + caption: 'Algorithms, lower bounds, graph structure, and computation.', + }, + featuredVideo: { + title: 'Theoretical computer science at IIT Gandhinagar', + href: 'https://www.youtube.com/watch?v=JqvVE67LiX8', + embedUrl: 'https://www.youtube.com/embed/JqvVE67LiX8', + }, + themes: [ + 'Parameterized and exact algorithms', + 'Graph algorithms and dynamic graph problems', + 'Computational complexity and algebraic computation', + 'Quantum algorithms and algebraic/combinatorial problems', + 'Computational social choice and games', + ], + faculty: [ + { + name: 'Neeldhara Misra', + title: 'Associate Professor', + focus: + 'Parameterized algorithms, computational social choice, combinatorial games, satisfiability, and graph problems.', + profile: 'https://www.neeldhara.com/', + }, + { + name: 'Manoj D Gupta', + title: 'Associate Professor', + focus: + 'Graph algorithms, dynamic graphs, shortest paths, and algorithmic graph theory.', + profile: 'https://iitgn.ac.in/faculty/cse/fac-manoj', + }, + { + name: 'Bireswar Das', + title: 'Associate Professor', + focus: + 'Algorithms for algebraic and combinatorial problems, quantum algorithms, and complexity theory.', + profile: 'https://sites.google.com/site/bireswar/home', + }, + { + name: 'Balagopal Komarath', + title: 'Assistant Professor', + focus: + 'Computational complexity, algebraic complexity, circuit complexity, and low-level computational models.', + profile: 'https://bkomarath.rbgo.in/', + }, + { + name: 'Anirban Dasgupta', + title: 'Professor', + focus: + 'Randomized algorithms, sketching, large-scale data algorithms, and algorithmic foundations of machine learning.', + profile: 'https://iitgn.ac.in/faculty/cse/fac-anirban', + }, + ], + publications: [ + { + title: 'Finding and counting patterns in sparse graphs', + detail: 'JCSS 2026 - graph algorithms and sparse graph structure.', + }, + { + title: 'On the Parameterized Complexity of Diverse SAT', + detail: 'Theoretical Computer Science 2026 - parameterized complexity.', + }, + { + title: + 'VP, VNP and Algebraic Branching Programs over Min-Plus Semirings', + detail: '2026 preprint - algebraic complexity over semirings.', + }, + { + title: 'Ferry Cover with Connectivity Constraints', + detail: 'FUN 2026 - algorithmic graph covering constraints.', + }, + ], + projects: [ + { + title: 'Approximate Shortest Paths in Graphs', + detail: 'ANRF ARG MATRICS project led by Manoj D Gupta.', + }, + { + title: 'Quantum Algorithms for Group Theoretic Problems', + detail: 'ANRF ARG MATRICS project led by Bireswar Das.', + }, + { + title: + 'On the Role of Multilinearity and Monotonicity in Algebraic Computation', + detail: 'ANRF ARG MATRICS project led by Balagopal Komarath.', + }, + ], + sources: [ + { + title: 'CSE research archive', + detail: 'Historical department research descriptions and faculty summaries.', + href: 'https://cs.iitgn.ac.in/research', + }, + { + title: 'Neeldhara Misra homepage', + detail: 'Algorithms, computational social choice, and games.', + href: 'https://www.neeldhara.com/', + }, + { + title: 'Balagopal Komarath homepage', + detail: 'Complexity theory and algorithms.', + href: 'https://bkomarath.rbgo.in/', + }, + { + title: 'Parameterized Algorithms NPTEL course', + detail: 'Public teaching material reflecting theory strengths.', + href: 'https://onlinecourses.nptel.ac.in/noc23_cs102/preview', + }, + ], + }, + security: { + slug: 'security', + title: 'Security & Privacy', + shortTitle: 'Security', + description: + 'Security and privacy research connects formal verification, language-based security, web privacy, usable consent systems, privacy-preserving machine learning, and trustworthy public-interest systems.', + accent: { + foreground: '#9b5a69', + soft: '#f5e8eb', + background: '#fbf6f7', + header: '#fdfbfb', + border: '#ead4da', + }, + heroImage: { + src: '/images/course-resources/operating-systems.png', + alt: 'Systems course visual used as a security and software foundation image', + caption: 'Secure systems, privacy guarantees, and trustworthy software.', + }, + themes: [ + 'Formal methods and protocol verification', + 'Language-based security and information flow', + 'Web privacy and browser consent management', + 'Privacy-preserving and fair machine learning', + 'Secure embedded and public-interest computing systems', + ], + faculty: [ + { + name: 'Abhishek Bichhawat', + title: 'Assistant Professor', + focus: + 'Language-based security, formal verification, web security, usable privacy, and policy enforcement.', + profile: 'https://abhishek.people.iitgn.ac.in/', + }, + { + name: 'Manisha Padala', + title: 'Assistant Professor', + focus: + 'Fair and federated learning, differential privacy, strategic clients, and secure distributed ML systems.', + profile: 'https://iitgn.ac.in/faculty/cse/fac-manisha', + }, + { + name: 'Rajat Moona', + title: 'Professor and Director', + focus: + 'Embedded systems, smart cards, RFID, secure access systems, VLSI, and public-scale trusted computing.', + profile: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + }, + ], + publications: [ + { + title: + "Johnny Can't Revoke Consent Either: Measuring Compliance of Consent Revocation on the Web", + detail: 'PETS 2025 - web privacy and consent revocation compliance.', + }, + { + title: + 'Least Privilege Access for Persistent Storage Mechanisms in Web Browsers', + detail: 'WWW 2025 - browser storage and least-privilege web security.', + }, + { + title: + 'Fall-Through Semantics for Mitigating Timing-Based Side Channel Leaks', + detail: 'FSTTCS 2025 - semantics and side-channel mitigation.', + }, + { + title: + 'DY*: A Modular Symbolic Verification Framework for Executable Cryptographic Protocol Code', + detail: 'IEEE EuroS&P 2021 - verified cryptographic protocol code.', + }, + ], + projects: [ + { + title: 'Understanding and Ensuring the Privacy of User Data', + detail: 'SERB project led by Abhishek Bichhawat.', + }, + { + title: 'Verifying Security Properties of Group Messaging Protocols', + detail: 'CEFIPRA international project led by Abhishek Bichhawat.', + }, + { + title: + 'Towards a Private yet Functional Web: Designing a Usable and Privacy-compliant Consent Management Framework for Online Browsing', + detail: 'ANRF Advanced Research Grant led by Abhishek Bichhawat.', + }, + { + title: + 'Fair Federated Learning Framework in the Presence of Heterogeneous, Strategic, and Malicious Clients', + detail: 'ANRF early-career project led by Manisha Padala.', + }, + ], + sources: [ + { + title: 'Abhishek Bichhawat homepage', + detail: 'Secure systems by design and formal security guarantees.', + href: 'https://abhishek.people.iitgn.ac.in/', + }, + { + title: 'Abhishek Bichhawat IITGN profile', + detail: 'Language-based security, verification, and IoT security interests.', + href: 'https://iitgn.ac.in/faculty/cse/fac-abhishek', + }, + { + title: 'Rajat Moona IITGN profile', + detail: 'Security, smart cards, RFID, embedded systems, and patents.', + href: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + }, + { + title: 'Privacy and web consent publications', + detail: 'Recent web privacy work involving IITGN security researchers.', + href: 'https://arxiv.org/abs/2411.15414', + }, + ], + }, + 'data-science': { + slug: 'data-science', + title: 'Data Science', + shortTitle: 'Data Science', + description: + 'Data science research at CSE links scalable algorithms, sensing, climate and urban resilience, social-network analysis, scientific text, and reproducible data-driven systems.', + accent: { + foreground: '#527d68', + soft: '#e5f1ea', + background: '#f5faf7', + header: '#fbfdfc', + border: '#cfe2d7', + }, + heroImage: { + src: '/images/course-resources/scalable-data-science.png', + alt: 'Scalable data science course visual', + caption: 'Scalable data, infrastructure intelligence, and real-world analytics.', + }, + featuredVideo: { + title: 'The AI Resilience and Command Centre at the Research Park', + href: 'https://www.youtube.com/watch?v=mNJJXm3xtA8', + embedUrl: 'https://www.youtube.com/embed/mNJJXm3xtA8', + }, + themes: [ + 'Sketching, sampling, and coresets for large data', + 'AI for sustainability, energy, air quality, and health', + 'Physics-guided models for climate and urban resilience', + 'Scientific text mining and social-network analytics', + 'Open benchmarks, reproducibility, and deployment-oriented data systems', + ], + faculty: [ + { + name: 'Anirban Dasgupta', + title: 'Professor', + focus: + 'Data science algorithms, randomized numerical linear algebra, sketching, sampling, and information dynamics.', + profile: 'https://labs.iitgn.ac.in/datascience/', + }, + { + name: 'Nipun Batra', + title: 'Associate Professor', + focus: + 'Scalable sensing, energy analytics, air quality, health sensing, and AI for sustainability.', + profile: 'https://sustainability-lab.github.io/', + }, + { + name: 'Udit Bhatia', + title: 'Associate Professor', + focus: + 'Physics-guided data science for urban flooding, climate extremes, resilient infrastructure, and networks.', + profile: 'https://iitgn.ac.in/faculty/earths/fac-udit', + }, + { + name: 'Mayank Singh', + title: 'Associate Professor', + focus: + 'Scientific text mining, scholarly knowledge discovery, social networks, and AI-enabled research tools.', + profile: 'https://iitgn.ac.in/faculty/cse/fac-mayank', + }, + ], + publications: [ + { + title: 'Streaming Coresets for Symmetric Tensor Factorization', + detail: 'ICML 2020 - scalable coresets and tensor factorization.', + }, + { + title: + 'Spatially Regularized Graph Attention Autoencoder Framework for Detecting Rainfall Extremes', + detail: '2024 preprint - graph learning for climate extremes.', + }, + { + title: + 'Vartalaap: What Drives #AirQuality Discussions: Politics, Pollution or Pseudo-science?', + detail: 'PACM HCI 2021 - public discourse and air-quality analytics.', + }, + { + title: + 'Physics-guided Emulators Reveal Resilience and Fragility under Operational Latencies and Outages', + detail: '2025 preprint - physics-guided models for resilience.', + }, + ], + projects: [ + { + title: + 'AI Resilience and Command Centre for data-driven climate-risk management', + detail: 'IITGN centre focused on anticipatory urban flood and climate-risk management.', + }, + { + title: 'Automated Crop Mapping using time-series satellite and ancillary data', + detail: 'ISRO-sponsored project led by Nipun Batra.', + }, + { + title: + 'Network-of-Network Lens to quantify resilience of coupled infrastructure systems', + detail: 'ANRF/SERB-supported project led by Udit Bhatia.', + }, + { + title: + 'Development of Large Language Models based chat plugin for website-specific queries', + detail: 'Consultancy project led by Mayank Singh.', + }, + ], + sources: [ + { + title: 'Data Science Lab', + detail: 'Algorithms, ML pipelines, sketching, and social-network dynamics.', + href: 'https://labs.iitgn.ac.in/datascience/', + }, + { + title: 'Sustainability Lab', + detail: 'AI, sensing, sustainability, energy, health, and air quality.', + href: 'https://sustainability-lab.github.io/members.html', + }, + { + title: 'Udit Bhatia IITGN profile', + detail: 'Physics-guided ML, urban flooding, and climate resilience.', + href: 'https://iitgn.ac.in/faculty/earths/fac-udit', + }, + { + title: 'ARC Centre news', + detail: 'Data-driven climate-risk management and resilient cities.', + href: 'https://news.iitgn.ac.in/iit-gandhinagar-launches-ai-resilience-and-command-centre-for-data-driven-climate-risk-management/', + }, + ], + }, + systems: { + slug: 'systems', + title: 'Systems & Architecture', + shortTitle: 'Systems', + description: + 'Systems research covers computer architecture, memory and storage systems, cloud and edge platforms, networked systems, software engineering, embedded systems, and deployment-oriented computing.', + accent: { + foreground: '#987247', + soft: '#f3eadc', + background: '#fbf8f2', + header: '#fdfcf9', + border: '#e6d8c4', + }, + heroImage: { + src: '/images/facilities/singularity/server2.jpg', + alt: 'Department GPU server rack', + caption: 'Systems, architecture, infrastructure, and performance at scale.', + }, + featuredVideo: { + title: 'Systems and architecture at IIT Gandhinagar', + href: 'https://www.youtube.com/watch?v=JHoRJQz2N5o', + embedUrl: 'https://www.youtube.com/embed/JHoRJQz2N5o', + }, + themes: [ + 'Computer architecture, memory, storage, and accelerators', + 'Network function virtualization, SDN, edge, and cloud systems', + 'Software testing, evolution, maintenance, and repositories', + 'Sensing systems and deployed computing for sustainability', + 'Embedded systems, VLSI, operating systems, and public-scale infrastructure', + ], + faculty: [ + { + name: 'Manu Awasthi', + title: 'Associate Professor of Practice', + focus: + 'Computer architecture, memory and storage, cloud systems, performance optimization, and RISC-V pedagogy.', + profile: 'https://manuawasthi.in/', + }, + { + name: 'Sameer G Kulkarni', + title: 'Assistant Professor', + focus: + 'NFV, SDN, edge/cloud platforms, distributed systems, network security, and resource management.', + profile: 'https://iitgn.ac.in/faculty/cse/fac-sameer', + }, + { + name: 'Shouvick Mondal', + title: 'Assistant Professor', + focus: + 'Software testing, evolution, maintenance, mining repositories, logging, and empirical software engineering.', + profile: 'https://iitgn.ac.in/faculty/cse/fac-shouvick', + }, + { + name: 'Rajat Moona', + title: 'Professor and Director', + focus: + 'Computer architecture, VLSI, operating systems, embedded systems, smart cards, and RFID.', + profile: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + }, + { + name: 'Nipun Batra', + title: 'Associate Professor', + focus: + 'Scalable sensing systems, sustainable computing, health sensing, and deployed AI systems.', + profile: 'https://nipunbatra.github.io/', + }, + ], + publications: [ + { + title: 'MCP-Diag: A Deterministic, Protocol-Driven Architecture for AI-Native Network Diagnostics', + detail: 'COMSNETS 2026 - AI-native network diagnostics.', + }, + { + title: + 'Memory Bottlenecks in Quantum Simulation: Cache Contention and Adaptive Allocation Policy', + detail: 'COMSNETS 2026 - memory and cache behavior in simulation.', + }, + { + title: + 'Hardware-Software Co-Design of a Collaborative DNN Accelerator for 3D Stacked Memories with Multi-Channel Data', + detail: 'ASP-DAC 2024 - accelerator architecture and memory systems.', + }, + { + title: 'VulNet: Towards Improving Vulnerability Management in the Maven Ecosystem', + detail: 'EMSE 2024 - software engineering and vulnerability management.', + }, + ], + projects: [ + { + title: 'Development of Quantum Machine Learning Use Cases and Applications', + detail: 'MeitY-sponsored project led by Sameer G Kulkarni.', + }, + { + title: + 'Specialized language models deployable on endpoints with low compute resources', + detail: 'ISRO-sponsored project led by Anirban Dasgupta with systems relevance.', + }, + { + title: 'Project Madhava', + detail: + 'Hands-on computer systems pedagogy and RISC-V based microcontroller development led by Manu Awasthi.', + }, + { + title: 'Department compute infrastructure', + detail: + 'GPU-based department servers and HPC resources supporting systems and AI experiments.', + }, + ], + sources: [ + { + title: 'Manu Awasthi homepage', + detail: 'Computer architecture, cloud systems, and Project Madhava.', + href: 'https://manuawasthi.in/', + }, + { + title: 'Sameer Kulkarni CSE research summary', + detail: 'NFV, SDN, distributed systems, and data reliability.', + href: 'https://cs.iitgn.ac.in/research', + }, + { + title: 'Shouvick Mondal IITGN profile', + detail: 'Software testing, evolution, and maintenance.', + href: 'https://beta.iitgn.ac.in/faculty/cse/shouvick', + }, + { + title: 'Rajat Moona IITGN profile', + detail: 'Computer architecture, VLSI, operating systems, embedded systems.', + href: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + }, + ], + }, + hci: { + slug: 'hci', + title: 'HCI & Cognitive Science', + shortTitle: 'HCI', + description: + 'HCI and cognitive-science work brings together human-AI interaction, brain-computer interfaces, eye tracking, accessibility, multimodal systems, neuroscience, and community health.', + accent: { + foreground: '#4e7b78', + soft: '#e4f1f0', + background: '#f5faf9', + header: '#fbfdfd', + border: '#cde3e1', + }, + heroImage: { + src: '/images/course-resources/probabilistic-machine-learning.png', + alt: 'Probabilistic machine learning visual used for HCI and cognitive systems', + caption: 'Human-centred intelligent systems for interaction, health, and access.', + }, + themes: [ + 'Human-AI interaction and explainable interfaces', + 'Brain-computer interfaces, EEG, EMG, and eye tracking', + 'Assistive technologies for disability, aging, and dyslexia', + 'Cognitive modelling and neural decoding', + 'Multimodal, multilingual, and accessible interaction design', + ], + faculty: [ + { + name: 'Yogesh Kumar Meena', + title: 'Assistant Professor', + focus: + 'HCI, BCI, eye tracking, motor rehabilitation, assistive systems, user experience, and community health.', + profile: 'https://yogeshmeena.com/', + }, + { + name: 'Krishna Prasad Miyapuram', + title: 'Affiliated Faculty', + focus: + 'Cognitive science, computational neuroscience, EEG, brain decoding, and cognition-aware AI.', + profile: 'https://cogs.iitgn.ac.in/faculty/', + }, + { + name: 'Shanmuganathan Raman', + title: 'Professor', + focus: + 'Vision, EEG-to-text collaborations, deep learning, image understanding, and multimodal perception.', + profile: 'https://shanmuga.people.iitgn.ac.in/', + }, + { + name: 'Samit Bhattacharya', + title: 'Visiting Associate Professor', + focus: + 'Human-computer interaction and user-centred computing.', + }, + ], + publications: [ + { + title: + 'Operationalizing Self-Perceptions of Aging Using Reflection Probe and SPA Design Cards with HCI Practitioners', + detail: 'CHI Extended Abstracts 2026 - HCI methods for aging and design.', + }, + { + title: + 'Design and Evaluation of a Multimodal Elevator System with Gaze and Multilingual Voice Controls', + detail: 'IndiaHCI 2025 - accessible multimodal interaction.', + }, + { + title: + 'Explainable artificial intelligence approaches for brain-computer interfaces: a review and design space', + detail: 'Journal of Neural Engineering 2024 - XAI for BCI.', + }, + { + title: + 'Hierarchic-EEG2Text: Assessing EEG-To-Text Decoding across Hierarchical Abstraction Levels', + detail: '2026 preprint - neural decoding and language abstraction.', + }, + ], + projects: [ + { + title: + 'A Brain-Computer Interface Driven Mental Fatigue Monitoring System to Improve Stroke Rehabilitation Therapy', + detail: + 'International project with Department for the Economy, Northern Ireland.', + }, + { + title: + 'iGazeBuddy: Multimodal Gaze-Controlled On-Screen Assisted Learning System for Dyslexia Detection and Intervention in Regional Indian Languages', + detail: 'ANRF PMECRG project led by Yogesh Kumar Meena.', + }, + { + title: + 'System for augmentative and alternative communication for people with severe speech and motor disabilities', + detail: 'Indian patent involving Yogesh Kumar Meena.', + }, + { + title: 'HAIx Lab', + detail: + 'Lab focused on intelligent technologies and transforming community health and care.', + }, + ], + sources: [ + { + title: 'Yogesh Kumar Meena homepage', + detail: 'HAIx Lab, HCI, BCI, eye tracking, and assistive technology.', + href: 'https://yogeshmeena.com/', + }, + { + title: 'HAIx Lab team page', + detail: 'Human-AI Interaction Lab people and directions.', + href: 'https://labs.iitgn.ac.in/haix/team/', + }, + { + title: 'Cognitive Science research facilities', + detail: 'HAIx Lab and Brain Lab context at IIT Gandhinagar.', + href: 'https://cogs.iitgn.ac.in/research-2/research-facilities/', + }, + { + title: 'Postdoctoral position description', + detail: 'Hybrid BCI and HAIx Lab project description.', + href: 'https://cse.noticebard.com/wp-content/uploads/sites/23/2025/01/Post-Doctoral-Fellow-at-Computer-Science-Dept.-IIT-Gandhinagar.pdf', + }, + ], + }, +}; + +export const RESEARCH_AREA_ORDER: ResearchAreaSlug[] = [ + 'ai', + 'theory', + 'security', + 'data-science', + 'systems', + 'hci', +]; diff --git a/src/data/visitors.ts b/src/data/visitors.ts new file mode 100644 index 0000000..71ac3ef --- /dev/null +++ b/src/data/visitors.ts @@ -0,0 +1,198 @@ +export interface VisitorEntry { + date: string; + speaker: string; + affiliation: string; + title: string; +} + +export const VISITORS: VisitorEntry[] = [ + { + date: '2026-03-27', + speaker: 'Dr. VenkataKeerthy', + affiliation: 'Microsoft Research', + title: 'ML4Code: Learning to Represent, Optimize, and Understand Programs', + }, + { + date: '2026-03-25', + speaker: 'Dr. Anik Paul', + affiliation: 'IISc', + title: + 'Almost Sure Convergence Analysis of Stochastic First and Zeroth-Order Mirror Descent Algorithm: A Projected Dynamical Systems Viewpoint', + }, + { + date: '2026-03-24', + speaker: 'Mr. Aditya Anand', + affiliation: 'IIT Bombay', + title: + 'Precision without Regret: Sound and Efficient Memory Optimization in Managed Runtimes', + }, + { + date: '2026-03-23', + speaker: 'Dr. Utsav Singh', + affiliation: 'IIT Kanpur', + title: 'Learning Hierarchical Control via Feasible Subgoal Prediction', + }, + { + date: '2026-03-13', + speaker: 'Dr. Janki Bhimani', + affiliation: 'Florida International University', + title: 'Advancing System Design: Classical and Quantum', + }, + { + date: '2026-03-12', + speaker: 'Prof. Rajeev Shorey', + affiliation: 'IIIT Surat', + title: + 'Recent Investigations in the Intersection of ML and Edge Computing', + }, + { + date: '2026-02-20', + speaker: 'Dr. Tameesh Suri', + affiliation: 'Nvidia', + title: + 'Enabling the Next 1000× in AI: Co-Design from Materials to Systems', + }, + { + date: '2026-02-19', + speaker: 'Dr. Biswabandan Panda', + affiliation: 'IIT Bombay', + title: 'Architecture Security: The Good, the Bad, and the Ugly', + }, + { + date: '2026-02-18', + speaker: 'Dr. Biswabandan Panda', + affiliation: 'IIT Bombay', + title: 'Microarchitecture Mysteries in Datacenter Processors', + }, + { + date: '2026-02-18', + speaker: 'Dr. Niket Tandon', + affiliation: 'Microsoft Research', + title: 'Building language models that learn, remember and reason', + }, + { + date: '2026-02-06', + speaker: 'Dr. Utkarsh Mall', + affiliation: 'MBZUAI', + title: 'Visual Discovery for Science', + }, + { + date: '2026-01-29', + speaker: 'Dr. Nisarg Shah', + affiliation: 'University of Toronto', + title: 'Democratic Foundations of Fair AI via Social Choice', + }, + { + date: '2026-01-09', + speaker: 'Mr. Ambarish Ojha', + affiliation: 'Actyv.ai', + title: + 'AI in Regulated Worlds: How to Build Systems That Banks and Boards Can Trust', + }, + { + date: '2025-12-01', + speaker: 'Dr. Naresh Manwani', + affiliation: 'IIIT Hyderabad', + title: + 'Trustworthy Graph Learning: Integrating Abstention in Static and Dynamic GNNs', + }, + { + date: '2025-12-01', + speaker: 'Dr. Sujit Gujar', + affiliation: 'IIIT Hyderabad', + title: + 'Fair distribution of MEV in blockchains through Shapley Value', + }, + { + date: '2025-11-27', + speaker: 'Dr. Arkaprava Basu', + affiliation: 'IISc', + title: 'Improving the Quality of GPU-accelerated Software', + }, + { + date: '2025-11-25', + speaker: 'Dr. Dagash Mehta', + affiliation: 'Blackrock Inc.', + title: 'Similarity Learning in Finance', + }, + { + date: '2025-08-21', + speaker: 'Mr. Anup Kalbalia', + affiliation: 'Justuju', + title: 'Rethinking CS101 with Flowcharts in the age of AI', + }, + { + date: '2025-08-13', + speaker: 'Mr. Sushim Shrivastava', + affiliation: 'Qualcomm', + title: 'Challenges of Deploying AI at the Edge', + }, + { + date: '2025-08-12', + speaker: 'Mr. Shreyas Gupta', + affiliation: 'IISc', + title: 'Secure Vickrey Auctions with Rational Parties', + }, + { + date: '2025-07-04', + speaker: 'Mr. Aditya Subramaniam', + affiliation: 'IISc', + title: 'Online and Dynamic Geometric Set Cover', + }, + { + date: '2025-04-21', + speaker: 'Prof. John Augustine', + affiliation: 'IIT Madras', + title: 'Foundations of Distributed Trust and Blockchain Oracle Networks', + }, + { + date: '2025-04-11', + speaker: 'Dr. Indrajit Bhattacharya', + affiliation: 'KnowDis.AI', + title: 'Knowledge Base Question Answering in the Age of LLMs', + }, + { + date: '2025-04-02', + speaker: 'Dr. Mythili Vutukuru', + affiliation: 'IIT Bombay', + title: 'Understanding the internals of the Linux network stack', + }, + { + date: '2025-03-21', + speaker: 'Dr. Pankaj Thorat', + affiliation: 'IBM Research', + title: + 'Code Data Profiler - A Customizable Concept-Driven Data Analysis Tool For Multi-Lingual Code Data Sets', + }, + { + date: '2025-03-21', + speaker: 'Prof. Arpita Patra', + affiliation: 'IISc', + title: 'Secure Multi-party Computation: The holy grail of Cryptography', + }, + { + date: '2025-03-04', + speaker: 'Dr. K. C. Sivaramakrishnan', + affiliation: 'IIT Madras', + title: 'Concurrent and Parallel Programming with OCaml 5', + }, + { + date: '2025-02-13', + speaker: 'Mr. Pratheek B', + affiliation: 'IISc', + title: 'Improving Memory Management in GPGPUs', + }, + { + date: '2025-02-05', + speaker: 'Dr. Sri AravindaKrishnan Thyagarajan', + affiliation: 'University of Sydney', + title: 'Cryptography Meets Game Theory: A Match For Fair Exchange', + }, + { + date: '2025-01-21', + speaker: 'Dr. Biswabandan Panda', + affiliation: 'IIT Bombay', + title: + 'Pushing the Limits of Hardware Prefetchers for Performance, Energy, Scalability, and Security; One Step at a Time', + }, +]; diff --git a/src/layouts/DefaultLayout.astro b/src/layouts/DefaultLayout.astro index af394a8..9f81c35 100644 --- a/src/layouts/DefaultLayout.astro +++ b/src/layouts/DefaultLayout.astro @@ -7,14 +7,19 @@ import Banner from '@/components/layout/banner'; import Footer from '@/components/layout/footer'; import Navbar from '@/components/layout/navbar'; -const { title, description } = Astro.props; +const { title, description, image, imageAlt } = Astro.props; const currentPath = Astro.url.pathname; --- - + diff --git a/src/pages/about/facilities.astro b/src/pages/about/facilities.astro index 425cc2f..8e9ed8a 100644 --- a/src/pages/about/facilities.astro +++ b/src/pages/about/facilities.astro @@ -1,6 +1,8 @@ --- import DefaultLayout from '@/layouts/DefaultLayout.astro'; +const isExternalUrl = (url: string) => url.startsWith('http'); + const hpcFacilities = [ { title: 'PARAM Ananta', @@ -39,7 +41,7 @@ const hpcFacilities = [ '172 TB usable PFS storage', '100 Gbps EDR InfiniBand', ], - link: 'https://cs.iitgn.ac.in/hpc/', + link: '/facilities/singularity', }, { title: 'Turing and Hamilton', @@ -69,7 +71,7 @@ const hpcLinks = [ }, { label: 'CSE Singularity cluster', - href: 'https://cs.iitgn.ac.in/hpc/', + href: '/facilities/singularity', }, ]; --- @@ -129,7 +131,10 @@ const hpcLinks = [
{ - hpcFacilities.map((facility) => ( + hpcFacilities.map((facility) => { + const isExternal = facility.link ? isExternalUrl(facility.link) : false; + + return (
)} - )) + ); + }) }
@@ -168,16 +174,20 @@ const hpcLinks = [

More HPC information

{ - hpcLinks.map((link) => ( + hpcLinks.map((link) => { + const isExternal = isExternalUrl(link.href); + + return ( {link.label} - )) + ); + }) }
diff --git a/src/pages/academics/mtech.astro b/src/pages/academics/mtech.astro index 645e882..521d42a 100644 --- a/src/pages/academics/mtech.astro +++ b/src/pages/academics/mtech.astro @@ -5,12 +5,13 @@ import DefaultLayout from '@/layouts/DefaultLayout.astro'; - - -
-
-
+
+
+

+ Department of Computer Science & Engineering, IIT Gandhinagar +

+
-

Interview preparation

-

- Preparing for the PhD interview -

-

- Prospective PhD applicants can use this playlist to prepare for the - CSE PhD interview process and refresh core ideas before the - interaction. +

+ PhD Program +

+

+ A research-focused doctoral program for creative, independent, and + interdisciplinary inquiry.

+ +
+ + +
+ +
+
+
+
+

Recent Graduates

+

+ Recent CSE PhD defenses +

+

+ Defense announcements from the last six months, matched with public + research-scholar profiles from the IITGN CSE student directory. +

+
+ +
+ + {RECENT_PHD_GRADUATES.length} profiles + + + + +
+
+ +
+ { + RECENT_PHD_GRADUATES.map((graduate) => ( +
+
+ {`${graduate.name} +
+ +
+
+
+

+ {graduate.name} +

+

+ {graduate.program} +

+
+ + +
+ +
+
Thesis
+
{graduate.thesisTitle}
+
Defense
+
{graduate.defenseDate}
+
Supervisor
+
{graduate.supervisor}
+
Joined
+
{graduate.joined}
+
+ +

+ {graduate.summary} +

+
+
+ )) + } +
+
+
+ + + + diff --git a/src/pages/blog/[...slug].astro b/src/pages/blog/[...slug].astro index 86c1df7..131b238 100644 --- a/src/pages/blog/[...slug].astro +++ b/src/pages/blog/[...slug].astro @@ -26,7 +26,12 @@ const relatedPosts = allPosts .slice(0, 3); --- - + diff --git a/src/pages/blog/index.astro b/src/pages/blog/index.astro index 77c1e7d..66d76df 100644 --- a/src/pages/blog/index.astro +++ b/src/pages/blog/index.astro @@ -2,14 +2,13 @@ import { getCollection } from 'astro:content'; import BlogPosts from '@/components/sections/blog-posts'; -import { SITE_TITLE, SITE_DESCRIPTION } from '@/consts'; import DefaultLayout from '@/layouts/DefaultLayout.astro'; const posts = (await getCollection('blog')).sort( (a, b) => b.data.date.valueOf() - a.data.date.valueOf(), ); --- - +
diff --git a/src/pages/facilities/singularity.astro b/src/pages/facilities/singularity.astro new file mode 100644 index 0000000..4d735c7 --- /dev/null +++ b/src/pages/facilities/singularity.astro @@ -0,0 +1,446 @@ +--- +import DefaultLayout from '@/layouts/DefaultLayout.astro'; + +const applyUrl = + 'https://docs.google.com/forms/d/e/1FAIpQLSd8YMqqE_Nwk4Tm75UfnS8wAp7LFIMT6x1_aZWxRh4kuBEw0A/viewform?usp=dialog'; + +const navItems = [ + { label: 'Overview', href: '#overview' }, + { label: 'Specification', href: '#specification' }, + { label: 'Software', href: '#software' }, + { label: 'Access', href: '#access' }, + { label: 'Funding', href: '#funding' }, + { label: 'Contact', href: '#contact' }, +]; + +const heroStats = [ + { label: 'Commissioned', value: 'April 2025' }, + { label: 'CPU cores', value: '128' }, + { label: 'GPU cards', value: '8 NVIDIA L40S' }, + { label: 'Usable PFS storage', value: '172 TB' }, +]; + +const specifications = [ + { + title: 'CPU', + value: 'Intel Xeon Gold 6548Y+', + description: 'CPU compute capacity for scheduled research workloads.', + }, + { + title: 'GPU', + value: 'NVIDIA L40S', + description: 'GPU acceleration for AI, ML, DL, and related workloads.', + }, + { + title: 'Storage', + value: '172 TB usable PFS storage', + description: 'Shared parallel file system storage available to users.', + }, + { + title: 'Interconnect', + value: '100 Gbps EDR InfiniBand', + description: 'High-speed interconnect for cluster jobs.', + }, + { + title: 'Network', + value: '1 Gbps network switch', + description: 'Network switching for cluster access and management.', + }, +]; + +const softwareRows = [ + { + domain: 'AI / ML / DL', + applications: 'TensorFlow, pandas, NumPy, Anaconda', + }, + { + domain: 'Compilers', + applications: 'MPI, OpenMPI, GCC', + }, + { + domain: 'Other', + applications: 'JupyterHub, GitLab', + }, +]; + +const accessFaqs = [ + { + question: 'How do I request a Singularity HPC account?', + answer: + 'Submit the access request form, then email raviraj.s@iitgn.ac.in with a copy to your supervisor. Include the required account duration and the software list you plan to run.', + }, + { + question: 'What is the home-directory quota?', + answer: 'Each user receives 500 GB of quota in the home directory.', + }, + { + question: 'How is scheduling implemented?', + answer: + 'Jobs are handled through the SLURM scheduler. The scheduler automatically finds the required processing cores from available nodes, including partially used nodes. Users should not explicitly specify node numbers or number of nodes in job scripts. Priority-based queueing uses factors such as job size, queue priority, past and present usage, and time spent in the queue.', + }, + { + question: 'What is the data backup policy?', + answer: + 'Users should back up files and folders periodically. The support team does not provide a backup mechanism for user data. Automatic email alerts are sent when home usage reaches 75% and 85%; administrator deletion may begin within 24 hours of the second alert. Files in the home directory are automatically deleted 21 days after the last timestamp or update.', + }, + { + question: 'Can I run jobs interactively on the master node or other nodes?', + answer: + 'No. Users are strictly not allowed to run jobs on master nodes or other nodes interactively. Jobs must be run only through scheduler scripts.', + }, +]; +--- + + +
+
+
+
+

+ CSE high-performance computing +

+

+ Singularity Cluster +

+

+ The Singularity HPC Cluster was commissioned in April 2025. It + provides 128 CPU cores, 8 NVIDIA L40S GPU cards, and 172 TB of + usable PFS storage space for departmental research workloads. +

+ +
+ +
+ Singularity cluster rack + Singularity cluster server +
+
+ +
+ { + heroStats.map((stat) => ( +
+

{stat.label}

+

{stat.value}

+
+ )) + } +
+
+
+ + + +
+
+
+
+

Overview

+

+ A departmental cluster for GPU-accelerated research +

+

+ Singularity complements institute-scale HPC resources by providing + CSE-managed compute capacity for departmental users. Jobs are run + through SLURM, with shared storage and a priority queueing model for + fair access across users. +

+
+ + +
+ +
+
+ Singularity cluster layout +
+ Singularity layout +
+
+
+ Singularity queueing system +
+ Singularity queueing system +
+
+
+
+
+ +
+
+
+

Specification

+

+ Hardware and interconnect +

+

+ The cluster combines CPU compute, NVIDIA L40S GPU acceleration, + parallel file-system storage, and InfiniBand connectivity for + scheduled HPC workloads. +

+
+ +
+
+ { + specifications.map((spec) => ( +
+

{spec.title}

+

{spec.value}

+

+ {spec.description} +

+
+ )) + } +
+ +
+ Singularity cluster details +
+ Singularity details +
+
+
+
+
+ +
+
+
+

Software

+

+ Available software domains +

+

+ The legacy software listing groups applications into the following + domains. +

+
+ +
+ + + + + + + + + { + softwareRows.map((row) => ( + + + + + )) + } + +
DomainApplications
{row.domain} + {row.applications} +
+
+
+
+ +
+
+
+
+

Access and policy

+

+ Account requests, quotas, scheduling, and data handling +

+

+ Use the access form and email workflow for new accounts. Cluster + use is scheduler-based, and users are responsible for backing up + their own files. +

+ + Open access form + +
+ +
+ { + accessFaqs.map((faq) => ( +
+

{faq.question}

+

+ {faq.answer} +

+
+ )) + } +
+
+
+
+ +
+
+
+
+

Funding

+

+ Funding acknowledgement +

+

+ The Singularity funding page identifies the Science and Engineering + Research Board as the funding agency. +

+ + Visit SERB + +
+ + Science and Engineering Research Board funding acknowledgement + +
+
+
+ +
+
+
+

Contact

+

+ CSE office contact details +

+
+ +
+ +
+

Address

+

+ AB13-403A, CSE Office, Computer Sci. & Engg. Department, IIT + Gandhinagar, Palaj +

+
+ +
+
+
+
diff --git a/src/pages/hpc/[...path].astro b/src/pages/hpc/[...path].astro new file mode 100644 index 0000000..f952322 --- /dev/null +++ b/src/pages/hpc/[...path].astro @@ -0,0 +1,35 @@ +--- +export function getStaticPaths() { + return [ + { params: { path: 'index' }, props: { target: '/facilities/singularity' } }, + { params: { path: 'index.php' }, props: { target: '/facilities/singularity' } }, + { params: { path: 'Software' }, props: { target: '/facilities/singularity#software' } }, + { params: { path: 'Software.html' }, props: { target: '/facilities/singularity#software' } }, + { params: { path: 'Funding' }, props: { target: '/facilities/singularity#funding' } }, + { params: { path: 'Funding.html' }, props: { target: '/facilities/singularity#funding' } }, + { params: { path: 'ContactUs' }, props: { target: '/facilities/singularity#contact' } }, + { params: { path: 'ContactUs.html' }, props: { target: '/facilities/singularity#contact' } }, + ]; +} + +const { target } = Astro.props; +--- + + + + + + + + + Redirecting to Singularity Cluster + + + +

+ Redirecting to Singularity Cluster. +

+ + diff --git a/src/pages/hpc/index.astro b/src/pages/hpc/index.astro new file mode 100644 index 0000000..fff38aa --- /dev/null +++ b/src/pages/hpc/index.astro @@ -0,0 +1,22 @@ +--- +const target = '/facilities/singularity'; +--- + + + + + + + + + Redirecting to Singularity Cluster + + + +

+ Redirecting to Singularity Cluster. +

+ + diff --git a/src/pages/index.astro b/src/pages/index.astro index f8c2b29..7f664c7 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -8,9 +8,9 @@ import DefaultLayout from '@/layouts/DefaultLayout.astro'; --- - +
- +
diff --git a/src/pages/people/alumni.astro b/src/pages/people/alumni.astro index 9b6ecbe..c8da9b4 100644 --- a/src/pages/people/alumni.astro +++ b/src/pages/people/alumni.astro @@ -1,7 +1,395 @@ --- +import { + ArrowUpRight, + Award, + GraduationCap, + MapPin, +} from 'lucide-react'; + import DefaultLayout from '@/layouts/DefaultLayout.astro'; + +type AlumniLink = { + label: string; + href: string; +}; + +type FeaturedAlum = { + name: string; + credential: string; + current: string; + summary: string; + tags: string[]; + links: AlumniLink[]; +}; + +type DoctoralAlum = { + name: string; + joined: string; + year: string; +}; + +type PathwayGroup = { + title: string; + description: string; + people: string[]; +}; + +const officialAlumniSource = 'https://iitgn.ac.in/people/student_alumni/cse'; + +const featuredAlumni: FeaturedAlum[] = [ + { + name: 'Vinu Sankar Sadasivan', + credential: 'BTech CSE 2020', + current: 'AI Research Scientist, Meta SuperIntelligence Labs', + summary: + 'Works on AI safety, multimodal robustness, and trustworthy models, with earlier research appointments at Google DeepMind and Meta FAIR.', + tags: ['AI safety', 'research labs', 'BTech'], + links: [ + { label: 'Profile', href: 'https://vinusankars.github.io/' }, + ], + }, + { + name: 'Sachin Yadav', + credential: 'BTech CS 2022', + current: 'Pre-Doctoral Researcher, Google DeepMind', + summary: + 'Works on generative models and efficient language models, after research roles with Microsoft Research India and IITGN.', + tags: ['generative AI', 'research labs', 'BTech'], + links: [ + { label: 'Profile', href: 'https://yadav-sachin.github.io/' }, + ], + }, + { + name: 'Rishiraj Adhikary', + credential: 'PhD CSE 2025', + current: 'Research Associate, University of Cambridge', + summary: + 'Researches mobile sensing and health AI. Public profiles note Fulbright-Nehru, PMRF, Amazon internship, and student innovation recognition.', + tags: ['health AI', 'ubiquitous computing', 'PhD'], + links: [ + { label: 'Profile', href: 'https://rishi-a.github.io/' }, + { label: 'CVIG alumni', href: 'https://shanmuga.people.iitgn.ac.in/team.html' }, + ], + }, + { + name: 'Supratim Shit', + credential: 'PhD CSE 2021', + current: 'Assistant Professor, CSE, IIIT Delhi', + summary: + 'Works in algorithms for data science, including coresets, clustering, and large-scale optimization.', + tags: ['faculty', 'algorithms', 'data science'], + links: [ + { label: 'Faculty profile', href: 'https://iiitd.ac.in/supratim' }, + ], + }, + { + name: 'Indra Deep Mastan', + credential: 'PhD CSE 2021', + current: 'Assistant Professor, CSE, IIT BHU', + summary: + 'Researches computer vision, deep learning, unsupervised learning, and vision-language models.', + tags: ['faculty', 'computer vision', 'PhD'], + links: [ + { label: 'Faculty profile', href: 'https://www.iitbhu.ac.in/dept/cse/people/indracse' }, + { label: 'CVIG alumni', href: 'https://shanmuga.people.iitgn.ac.in/team.html' }, + ], + }, + { + name: 'Sudhakar Kumawat', + credential: 'PhD CSE alumnus', + current: 'Assistant Professor, IIT(ISM) Dhanbad', + summary: + 'Computer-vision researcher whose public alumni profile lists PMRF, BRICS Young Scientist, JSPS, Qualcomm Innovation Fellowship, patent, and CVPR-workshop recognition.', + tags: ['faculty', 'computer vision', 'awards'], + links: [ + { label: 'Faculty profile', href: 'https://www.iitism.ac.in/faculty-details?faculty=sudhakar' }, + { label: 'CVIG alumni', href: 'https://shanmuga.people.iitgn.ac.in/team.html' }, + ], + }, + { + name: 'Rachit Chhaya', + credential: 'PhD CSE 2022', + current: 'Assistant Professor, DA-IICT / DAU Gandhinagar', + summary: + 'Works on streaming and randomized algorithms, coresets, and scalable methods for clustering and graph problems.', + tags: ['faculty', 'theory', 'coresets'], + links: [ + { label: 'Faculty profile', href: 'https://www.daiict.ac.in/faculty/rachit-chhaya' }, + ], + }, + { + name: 'Akash Pareek', + credential: 'PhD CSE 2025', + current: 'Postdoctoral researcher, Universite libre de Bruxelles', + summary: + 'Works in theoretical computer science, algorithms, and data structures after completing doctoral work at IITGN.', + tags: ['postdoc', 'theory', 'PhD'], + links: [ + { label: 'Profile', href: 'https://sites.google.com/view/akashpareek/home' }, + ], + }, + { + name: 'Pankaj Pandey', + credential: 'PhD CSE 2023', + current: 'Postdoctoral researcher, St. Jude Children\'s Research Hospital', + summary: + 'Researches machine learning for imaging and neurotechnology, with prior postdoctoral work at the University of Rhode Island.', + tags: ['postdoc', 'machine learning', 'health'], + links: [ + { label: 'Profile', href: 'https://openreview.net/profile?id=~Pankaj_Pandey1' }, + ], + }, + { + name: 'Dharaben R. Thakkar', + credential: 'PhD CSE 2025', + current: 'Assistant Professor, Nagoya University', + summary: + 'Recognized by ACM India Doctoral Dissertation Award 2025 mentions for her work on parameterized complexity and structural graph parameters.', + tags: ['faculty', 'theory', 'award'], + links: [ + { label: 'Award mention', href: 'https://iitgn.ac.in/assets/pdfs/connections/v18i3.pdf' }, + { label: 'Talk profile', href: 'https://event.india.acm.org/arcs/' }, + ], + }, + { + name: 'Jayesh Choudhari', + credential: 'PhD CSE 2020', + current: 'Postdoctoral researcher, University of Warwick', + summary: + 'Works on dynamic algorithms, streaming and sublinear algorithms, graph analytics, and fair representation.', + tags: ['postdoc', 'algorithms', 'graphs'], + links: [ + { label: 'Profile', href: 'https://jayeshchoudhari.github.io/' }, + ], + }, + { + name: 'Murali Krishna Enduri', + credential: 'PhD CSE 2018', + current: 'Faculty member, SRM University-AP', + summary: + 'Works on graph algorithms, complex networks, data mining, machine learning, and systems with patents and journal publications listed publicly.', + tags: ['faculty', 'networks', 'PhD'], + links: [ + { label: 'Faculty profile', href: 'https://www.srmap.edu.in/faculty/dr-murali-krishna-enduri/' }, + ], + }, +]; + +const pathwayGroups: PathwayGroup[] = [ + { + title: 'Faculty and postdoctoral paths', + description: + 'CSE doctoral alumni have moved into faculty and postdoctoral roles across IITs, IIITs, international universities, and research centers.', + people: [ + 'Supratim Shit - IIIT Delhi', + 'Indra Deep Mastan - IIT BHU', + 'Sudhakar Kumawat - IIT(ISM) Dhanbad', + 'Rachit Chhaya - DA-IICT / DAU', + 'Akash Pareek - Universite libre de Bruxelles', + 'Jayesh Choudhari - University of Warwick', + ], + }, + { + title: 'Research labs and applied AI', + description: + 'Undergraduate, masters, and lab alumni are visible in AI research, applied science, and engineering roles at major research and product organizations.', + people: [ + 'Vinu Sankar Sadasivan - Meta', + 'Sachin Yadav - Google DeepMind', + 'Aditi Agarwal - Google DeepMind', + 'Progyan Das - Microsoft India', + 'Prasoon Kumar Karn - Google', + 'Anshuman Dash - Meta', + ], + }, + { + title: 'Recognition and public impact', + description: + 'Public alumni profiles list awards, fellowships, patents, open-source work, and research contributions across AI, theory, systems, and HCI.', + people: [ + 'Dharaben R. Thakkar - ACM India Doctoral Dissertation Award mention', + 'Rishiraj Adhikary - Fulbright-Nehru and PMRF', + 'Sudhakar Kumawat - PMRF, JSPS, Qualcomm Innovation Fellowship', + 'Darshita Jain - TCS Research and Innovation', + 'Ram Singh - computer-vision research in industry', + ], + }, +]; + +const doctoralAlumni: DoctoralAlum[] = [ + { name: 'Murali Krishna Enduri', joined: '2011', year: '2018' }, + { name: 'Vinod Kumar Reddy I', joined: '2011', year: '2018' }, + { name: 'Choudhari Jayesh Tulsidas', joined: '2015', year: '2020' }, + { name: 'Sudhakar Kumawat', joined: '2015', year: '2021' }, + { name: 'Ananya Shrivastava', joined: '2016', year: '2021' }, + { name: 'Indra Deep Mastan', joined: '2016', year: '2021' }, + { name: 'Shiv Dutt Sharma', joined: '2016', year: '2021' }, + { name: 'Supratim Shit', joined: '2016', year: '2021' }, + { name: 'Chhaya Rachit Chandravadan', joined: '2017', year: '2022' }, + { name: 'Pankaj Pandey', joined: '2017', year: '2023' }, + { name: 'Tom Glint Issac', joined: '2018', year: '2024' }, + { name: 'Akash Pareek', joined: '2019', year: '2025' }, + { name: 'Dharaben Rameshbhai Thakkar', joined: '2019', year: '2025' }, + { name: 'Rishiraj Adhikary', joined: '2019', year: '2025' }, + { name: 'Shruti Singh', joined: '2019', year: '2025' }, + { name: 'Dipan Dey', joined: '2020', year: '2025' }, + { name: 'Harshil Mittal', joined: '2020', year: '2025' }, + { name: 'Sawant Shriraj Pramod', joined: '2020', year: '2025' }, +]; + --- - - + +
+
+
+

+ People +

+

Alumni

+

+ IITGN CSE alumni are building careers in academia, research labs, + product engineering, graduate programs, startups, and public-interest + technology. +

+
+
+
+ +
+
+
+
+

+

+

Featured Alumni Profiles

+
+
+ +
+ {featuredAlumni.map((alum) => ( +
+
+
+

{alum.name}

+

+ {alum.credential} +

+
+
+ +

{alum.current}

+

+ {alum.summary} +

+ +
+ {alum.tags.map((tag) => ( + + {tag} + + ))} +
+ +
+ {alum.links.map((link) => ( + + {link.label} + + ))} +
+
+ ))} +
+
+
+ +
+
+
+

+

+

Alumni Careers

+

+ We are delighted to share the versatile trajectories that our alumni + are pursuing. +

+
+ +
+ {pathwayGroups.map((group) => ( +
+

{group.title}

+

+ {group.description} +

+
    + {group.people.map((person) => ( +
  • + {person} +
  • + ))} +
+
+ ))} +
+
+
+ +
+
+
+
+

+

+

CSE PhD Alumni

+
+
+ +
+
+ Name + Joined + PhD year +
+
+ {doctoralAlumni.map((alum) => ( +
+ {alum.name} + {alum.joined} + {alum.year} +
+ ))} +
+
+ + +
+
+
diff --git a/src/pages/people/visitors.astro b/src/pages/people/visitors.astro index e423101..30c6535 100644 --- a/src/pages/people/visitors.astro +++ b/src/pages/people/visitors.astro @@ -1,7 +1,116 @@ --- +import { Building2, CalendarDays, Mic2 } from 'lucide-react'; + +import { VISITORS, type VisitorEntry } from '@/data/visitors'; import DefaultLayout from '@/layouts/DefaultLayout.astro'; + +const monthNames = [ + 'Jan', + 'Feb', + 'Mar', + 'Apr', + 'May', + 'Jun', + 'Jul', + 'Aug', + 'Sep', + 'Oct', + 'Nov', + 'Dec', +]; + +const formatDate = (date: string) => { + const [year, month, day] = date.split('-'); + return `${Number(day)} ${monthNames[Number(month) - 1]} ${year}`; +}; + +const byYear = VISITORS.reduce>((groups, visitor) => { + const year = visitor.date.slice(0, 4); + groups[year] = [...(groups[year] ?? []), visitor]; + return groups; +}, {}); + +const yearGroups = Object.entries(byYear).sort( + ([yearA], [yearB]) => Number(yearB) - Number(yearA), +); --- - - + +
+
+

+ People +

+
+

+ Visitors +

+

+ Recent seminar visitors and invited speakers hosted by the + department. +

+
+
+
+ +
+
+
+ { + yearGroups.map(([year, visitors]) => ( +
+
+
+

{year}

+

+ {visitors.length} {visitors.length === 1 ? 'visitor' : 'visitors'} +

+
+
+ +
+ +
+ {visitors.map((visitor) => ( +
+
+
+ +
+
+
+
+ +

+ {visitor.title} +

+
+ ))} +
+
+
+ )) + } +
+
+
diff --git a/src/pages/research/ai.astro b/src/pages/research/ai.astro index 16332e7..de82b45 100644 --- a/src/pages/research/ai.astro +++ b/src/pages/research/ai.astro @@ -1,11 +1,11 @@ --- -import PlaceholderPage from '@/components/sections/placeholder-page'; +import ResearchAreaProfile from '@/components/sections/research-area-profile.astro'; +import { RESEARCH_AREAS } from '@/data/research-area-pages'; import DefaultLayout from '@/layouts/DefaultLayout.astro'; + +const area = RESEARCH_AREAS.ai; --- - + diff --git a/src/pages/research/data-science.astro b/src/pages/research/data-science.astro index e825add..2530eab 100644 --- a/src/pages/research/data-science.astro +++ b/src/pages/research/data-science.astro @@ -1,11 +1,11 @@ --- -import PlaceholderPage from '@/components/sections/placeholder-page'; +import ResearchAreaProfile from '@/components/sections/research-area-profile.astro'; +import { RESEARCH_AREAS } from '@/data/research-area-pages'; import DefaultLayout from '@/layouts/DefaultLayout.astro'; + +const area = RESEARCH_AREAS['data-science']; --- - + diff --git a/src/pages/research/hci.astro b/src/pages/research/hci.astro index b3ed524..9d52807 100644 --- a/src/pages/research/hci.astro +++ b/src/pages/research/hci.astro @@ -1,11 +1,11 @@ --- -import PlaceholderPage from '@/components/sections/placeholder-page'; +import ResearchAreaProfile from '@/components/sections/research-area-profile.astro'; +import { RESEARCH_AREAS } from '@/data/research-area-pages'; import DefaultLayout from '@/layouts/DefaultLayout.astro'; + +const area = RESEARCH_AREAS.hci; --- - + diff --git a/src/pages/research/patents.astro b/src/pages/research/patents.astro index 61b5305..15758fc 100644 --- a/src/pages/research/patents.astro +++ b/src/pages/research/patents.astro @@ -1,5 +1,6 @@ --- import DefaultLayout from '@/layouts/DefaultLayout.astro'; +import { Globe } from 'lucide-react'; type Patent = { title: string; @@ -7,6 +8,7 @@ type Patent = { status: string; jurisdiction: string; source: string; + patentUrl?: string; }; const patents: Patent[] = [ @@ -18,12 +20,110 @@ const patents: Patent[] = [ source: 'https://iitgn.ac.in/faculty/cogs/fac-yogesh', }, { - title: 'Electronic Voting Machine (EVM)', + title: 'Prismatic Lens', faculty: 'Rajat Moona', - status: 'Granted, application no. 201841002146, January 2022', + status: 'Design Patent, applied, Application No. 332180-001, August 2020', jurisdiction: 'India', source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', }, + { + title: 'System and Method for Estimating Life and Health of a Battery', + faculty: 'Rajat Moona', + status: 'Applied, Application No. 201941035486, September 2019', + jurisdiction: 'India', + source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + }, + { + title: 'Method and System for Detecting Troughs and Peaks in an Input Waveform', + faculty: 'Rajat Moona', + status: 'Applied, Application No. 201941035489, September 2019', + jurisdiction: 'India', + source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + }, + { + title: 'System and Device to Detect Fall of Printed Paper Slip in an Electronic Voting Machine', + faculty: 'Rajat Moona', + status: 'Applied, Application No. 201941035492, September 2019', + jurisdiction: 'India', + source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + }, + { + title: 'Optical Sensor for Detection of Movement of Media or Object', + faculty: 'Rajat Moona', + status: 'Applied, Application No. 201941033574, August 2019', + jurisdiction: 'India', + source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + }, + { + title: 'Temperature Sensitive Laser-based Photo Reflective Sensor and Compensation Method thereof', + faculty: 'Rajat Moona', + status: 'Applied, Application No. 201941033570, August 2019', + jurisdiction: 'India', + source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + }, + { + title: 'Unauthorized Access Detection Device, System and Method thereof', + faculty: 'Rajat Moona', + status: 'Applied, Application No. 201941033571, August 2019', + jurisdiction: 'India', + source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + }, + { + title: 'Optical System for Contrast Estimation During Gray-scale printing', + faculty: 'Rajat Moona', + status: 'Applied, Application No. 201941033572, August 2019', + jurisdiction: 'India', + source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + }, + { + title: 'Voter Verified Paper Audit Trail (VVPAT) System', + faculty: 'Rajat Moona', + status: 'Applied, Application No. 201841010850, March 2018', + jurisdiction: 'India', + source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + }, + { + title: 'Electronic Voting Machine (EEVM)', + faculty: 'Rajat Moona', + status: 'Granted January 27, 2022, Application No. 201841002146', + jurisdiction: 'India', + source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + }, + { + title: 'Repartitioning performance estimation in a hardware-software system', + faculty: 'Rajat Moona', + status: 'Applied for Indian Patent, Application No. 878/DELNP/2004, April 2004', + jurisdiction: 'India', + source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + }, + { + title: 'Authentication using non-biometric and biometric information', + faculty: 'Rajat Moona', + status: 'Indian Patent, Application No. 1967/CHE/2005, December 2005', + jurisdiction: 'India', + source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + }, + { + title: 'Using personal devices for authentication and service access at offline service outlets', + faculty: 'Rajat Moona', + status: 'Applied for Indian Patent, application no. 1018/DEL/2008, April 2008', + jurisdiction: 'India', + source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + }, + { + title: 'Repartitioning performance estimation in a hardware-software system', + faculty: 'Rajat Moona', + status: 'US Patent No. 6856951, February 2005', + jurisdiction: 'US', + source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + }, + { + title: 'Area optimization of hardware for algorithms by optimizing sizes of variables of the algorithm', + faculty: 'Rajat Moona', + status: 'US Patent pre-grant Publication 20060020574, January 2006', + jurisdiction: 'US', + source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + }, { title: 'Portable computer printer', faculty: 'Rajat Moona', @@ -34,39 +134,157 @@ const patents: Patent[] = [ { title: 'Compiling memory dereferencing instructions from software to hardware in an electronic design', faculty: 'Rajat Moona', - status: 'US Patent No. 7203912, April 2007; Indian Patent No. 242517, August 2010', - jurisdiction: 'US / India', + status: 'US Patent No. 7203912, April 2007', + jurisdiction: 'US', source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', }, { - title: 'Methods and systems for secured access to devices and systems', + title: 'Compiling memory dereferencing instructions from software to hardware in an electronic design', + faculty: 'Rajat Moona', + status: 'Indian Patent No. 242517, August 2010', + jurisdiction: 'India', + source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + }, + { + title: 'Methods and Systems for secured access to devices and systems', faculty: 'Rajat Moona', status: 'US Patent No. 7864987, January 2011', jurisdiction: 'US', source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', }, { - title: 'Method and system for using personal devices for authentication and service access at service outlets', + title: 'Method and System for using personal devices for authentication and service access at service outlets', faculty: 'Rajat Moona', status: 'US Patent No. 8713655, April 2014', jurisdiction: 'US', source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', }, { - title: 'Using personal devices for authentication and service access at offline service outlets', - faculty: 'Rajat Moona', - status: 'Applied for Indian Patent, application no. 1018/DEL/2008, April 2008', - jurisdiction: 'India', - source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + title: 'Mail compression scheme with individual message decompressability', + faculty: 'Anirban Dasgupta', + status: 'US Patent No. US7836099B2', + jurisdiction: 'US', + source: 'https://labs.iitgn.ac.in/datascience/anirban-dasgupta/', }, { - title: 'Voter Verified Paper Audit Trail (VVPAT) System', - faculty: 'Rajat Moona', - status: 'Applied, application no. 201841010850, March 2018', - jurisdiction: 'India', - source: 'https://iitgn.ac.in/faculty/cse/fac-rajat-moona', + title: 'Feature selection for text classification using subspace sampling', + faculty: 'Anirban Dasgupta', + status: 'US Patent No. US8046317', + jurisdiction: 'US', + source: 'https://labs.iitgn.ac.in/datascience/anirban-dasgupta/', + }, + { + title: 'Data management scheme in virtualized hyperscale environments', + faculty: 'Manu Awasthi', + status: 'US-10725663-B2, granted', + jurisdiction: 'US', + source: 'https://manuawasthi.in/pubs/misc/MAwasthi_CV.pdf', + }, + { + title: 'Memory device having a translation layer with multiple associative sectors', + faculty: 'Manu Awasthi', + status: 'US-9898200-B2, granted', + jurisdiction: 'US', + source: 'https://manuawasthi.in/pubs/misc/MAwasthi_CV.pdf', + }, + { + title: 'Intelligent controller for containerized applications', + faculty: 'Manu Awasthi', + status: 'US-10210024-B2, granted', + jurisdiction: 'US', + source: 'https://manuawasthi.in/pubs/misc/MAwasthi_CV.pdf', + }, + { + title: 'Rack-level scheduling for reducing the long tail latency using high performance SSDs', + faculty: 'Manu Awasthi', + status: 'US-10628233-B2, granted', + jurisdiction: 'US', + source: 'https://manuawasthi.in/pubs/misc/MAwasthi_CV.pdf', + }, + { + title: 'High bandwidth peer-to-peer switched key-value caching', + faculty: 'Manu Awasthi', + status: 'US-9723071-B2, granted', + jurisdiction: 'US', + source: 'https://manuawasthi.in/pubs/misc/MAwasthi_CV.pdf', + }, + { + title: 'Online flash resource migration, allocation, retire and replacement manager based on a cost of ownership model', + faculty: 'Manu Awasthi', + status: 'US-10248348-B2, granted', + jurisdiction: 'US', + source: 'https://manuawasthi.in/pubs/misc/MAwasthi_CV.pdf', + }, + { + title: 'I/O workload scheduling manager for RAID/non-RAID flash based storage systems for TCO and WAF optimizations', + faculty: 'Manu Awasthi', + status: 'US-10282140-B2, granted', + jurisdiction: 'US', + source: 'https://manuawasthi.in/pubs/misc/MAwasthi_CV.pdf', + }, + { + title: 'Multi-bit data representation framework to enable dual program operation on solid-state flash devices', + faculty: 'Manu Awasthi', + status: 'US-10474567-B2, granted', + jurisdiction: 'US', + source: 'https://manuawasthi.in/pubs/misc/MAwasthi_CV.pdf', + }, + { + title: 'Address translation in memory', + faculty: 'Manu Awasthi', + status: 'US-2016147667-A1, application', + jurisdiction: 'US', + source: 'https://manuawasthi.in/pubs/misc/MAwasthi_CV.pdf', + }, + { + title: 'Block cleanup: page reclamation process to reduce garbage collection overhead in dual-programmable NAND flash devices', + faculty: 'Manu Awasthi', + status: 'US-2020278805-A1, application', + jurisdiction: 'US', + source: 'https://manuawasthi.in/pubs/misc/MAwasthi_CV.pdf', + }, + { + title: 'Computing system with parallel mechanism and method of operation thereof', + faculty: 'Manu Awasthi', + status: 'US-2016188534-A1, application', + jurisdiction: 'US', + source: 'https://manuawasthi.in/pubs/misc/MAwasthi_CV.pdf', }, ]; + +function getPatentPageUrl(status: string) { + const hyphenatedUsPublication = status.match(/\bUS-(\d{4})(\d{6})-([A-Z]\d)\b/); + if (hyphenatedUsPublication) { + const [, year, serial, kind] = hyphenatedUsPublication; + return `https://patents.google.com/patent/US${year}0${serial}${kind}`; + } + + const hyphenatedUsPatent = status.match(/\bUS-(\d+)-([A-Z]\d)\b/); + if (hyphenatedUsPatent) { + const [, number, kind] = hyphenatedUsPatent; + return `https://patents.google.com/patent/US${number}${kind}`; + } + + const usPatentNumber = status.match(/\bUS Patent No\. (?:US)?(\d+)([A-Z]\d)?\b/i); + if (usPatentNumber) { + const [, number, kind = ''] = usPatentNumber; + return `https://patents.google.com/patent/US${number}${kind}`; + } + + const usPublication = status.match(/\bPublication (\d{11})\b/i); + if (usPublication) { + return `https://patents.google.com/patent/US${usPublication[1]}A1`; + } + + return undefined; +} + +const patentsWithPages = patents.map((patent) => ({ + ...patent, + patentUrl: patent.patentUrl ?? getPatentPageUrl(patent.status), +})); + +const jurisdictionFilters = ['India', 'US']; --- @@ -80,9 +298,10 @@ const patents: Patent[] = [ Patents

- Selected publicly listed patents and patent applications involving CSE - faculty. Entries link back to the faculty profile pages where the - patent information is listed. + Publicly listed patents and patent applications involving CSE faculty. +

+

+ Collaborators are not listed on this page.

@@ -90,16 +309,68 @@ const patents: Patent[] = [
+
+
+ + { + jurisdictionFilters.map((jurisdiction) => ( + + )) + } +
+

+ {patentsWithPages.length} patents and applications +

+
+
{ - patents.map((patent) => ( -
+ patentsWithPages.map((patent) => ( +
{patent.jurisdiction}
-

{patent.title}

+
+

{patent.title}

+ {patent.patentUrl && ( + + + + )} +
Faculty
@@ -110,18 +381,43 @@ const patents: Patent[] = [
{patent.status}
- - Source profile -> -
)) }
+ + diff --git a/src/pages/research/projects.astro b/src/pages/research/projects.astro index cffa5f5..20f78de 100644 --- a/src/pages/research/projects.astro +++ b/src/pages/research/projects.astro @@ -13,8 +13,8 @@ type Project = { type GrantAnnouncement = { scheme: string; faculty: string; - note: string; - source: string; + title: string; + coPi?: string; }; const projects: Project[] = [ @@ -152,22 +152,57 @@ const categories = ['ANRF/SERB', 'International', 'Sponsored', 'Industry/Researc const recentGrantAnnouncements: GrantAnnouncement[] = [ { - scheme: 'ANRF Prime Minister Early Career Research Grant', - faculty: 'Manisha Padala, Shouvick Mondal, Yogesh Kumar Meena', - note: 'Recent CSE announcement listing department awardees under PMECRG.', - source: 'https://www.linkedin.com/posts/cse-iitgn_anusandhan-national-research-foundation-activity-7419330427775115265-v86v', + scheme: 'Prime Minister Early Career Research Grant (PMECRG)', + faculty: 'Manisha Padala', + title: + 'Fair Federated Learning Framework in the Presence of Heterogeneous, Strategic, and Malicious Clients', }, { - scheme: 'ANRF Advanced Research Grant', - faculty: 'Mayank Singh, Nipun Batra, Abhishek Bichhawat', - note: 'Recent CSE announcement listing department awardees under ARG.', - source: 'https://www.linkedin.com/posts/cse-iitgn_anusandhan-national-research-foundation-activity-7419330427775115265-v86v', + scheme: 'Prime Minister Early Career Research Grant (PMECRG)', + faculty: 'Shouvick Mondal', + title: + 'Testing of Pre-trained Large Language Models for Zero-shot Software Engineering Tasks', }, { - scheme: 'ANRF ARG MATRICS', - faculty: 'Bireswar Das, Manoj Gupta, Balagopal Komarath', - note: 'Recent CSE announcement listing department awardees under ARG MATRICS.', - source: 'https://www.linkedin.com/posts/cse-iitgn_anusandhan-national-research-foundation-activity-7419330427775115265-v86v', + scheme: 'Advanced Research Grant (ARG)', + faculty: 'Mayank Singh', + title: + 'Chitrabhasha: Developing India\'s Largest Dataset and Foundation Models for Multimodal AI', + }, + { + scheme: 'Prime Minister Early Career Research Grant (PMECRG)', + faculty: 'Yogesh Kumar Meena', + title: + 'iGazeBuddy: Multimodal Gaze-Controlled On-Screen Assisted Learning System for Dyslexia Detection and Intervention in Regional Indian Languages', + }, + { + scheme: 'Advanced Research Grant (ARG)', + faculty: 'Nipun Batra', + title: + 'Scalable Detection of Brick Kilns from Low-Resolution Satellite Imagery for Environmental Compliance', + }, + { + scheme: 'Advanced Research Grant (ARG) MATRICS', + faculty: 'Bireswar Das', + title: 'Quantum Algorithms for Group Theoretic Problems', + }, + { + scheme: 'Advanced Research Grant (ARG) MATRICS', + faculty: 'Balagopal Komarath', + title: + 'On the Role of Multilinearity and Monotonicity in Algebraic Computation', + }, + { + scheme: 'Advanced Research Grant (ARG)', + faculty: 'Abhishek Bichhawat', + coPi: 'Co-PI: Mainak Mondal, IIT Kharagpur', + title: + 'Towards a Private yet Functional Web: Designing a Usable and Privacy-compliant Consent Management Framework for Online Browsing', + }, + { + scheme: 'Advanced Research Grant (ARG) MATRICS', + faculty: 'Manoj Gupta', + title: 'Approximate Shortest Paths in Graphs', }, ]; --- @@ -193,55 +228,73 @@ const recentGrantAnnouncements: GrantAnnouncement[] = [
-
- { - categories.map((category) => ( - - {category} - - )) - } -
- -
+
-

Recent ANRF announcements

+

Recent ANRF grants

- Department faculty have secured multiple recent ANRF grants + CSE faculty members have secured multiple recent ANRF grants in the latest cycle

-

- Recent public announcements list CSE faculty awardees across ANRF - PMECRG, Advanced Research Grant, and ARG MATRICS schemes. Project - titles are included below where they are publicly available. -

{ recentGrantAnnouncements.map((grant) => (
-

{grant.scheme}

-

{grant.faculty}

-

{grant.note}

- - Announcement -> - +

{grant.scheme}

+

{grant.title}

+

PI: {grant.faculty}

+ {grant.coPi && ( +

{grant.coPi}

+ )}
)) }
-

Selected project listings

+
+ + { + categories.map((category) => ( + + )) + } +
+ +
+

Selected project listings

+

+ {projects.length} selected projects +

+
{ projects.map((project) => ( -
+
{project.category} @@ -259,18 +312,43 @@ const recentGrantAnnouncements: GrantAnnouncement[] = [
{project.sponsor}
- - Source listing -> -
)) }
+ + diff --git a/src/pages/research/security.astro b/src/pages/research/security.astro index 073eff6..ca6eefc 100644 --- a/src/pages/research/security.astro +++ b/src/pages/research/security.astro @@ -1,11 +1,11 @@ --- -import PlaceholderPage from '@/components/sections/placeholder-page'; +import ResearchAreaProfile from '@/components/sections/research-area-profile.astro'; +import { RESEARCH_AREAS } from '@/data/research-area-pages'; import DefaultLayout from '@/layouts/DefaultLayout.astro'; + +const area = RESEARCH_AREAS.security; --- - + diff --git a/src/pages/research/systems.astro b/src/pages/research/systems.astro index 319bd2b..3a91bab 100644 --- a/src/pages/research/systems.astro +++ b/src/pages/research/systems.astro @@ -1,11 +1,11 @@ --- -import PlaceholderPage from '@/components/sections/placeholder-page'; +import ResearchAreaProfile from '@/components/sections/research-area-profile.astro'; +import { RESEARCH_AREAS } from '@/data/research-area-pages'; import DefaultLayout from '@/layouts/DefaultLayout.astro'; + +const area = RESEARCH_AREAS.systems; --- - + diff --git a/src/pages/research/theory.astro b/src/pages/research/theory.astro index 80becf2..a11d9ab 100644 --- a/src/pages/research/theory.astro +++ b/src/pages/research/theory.astro @@ -1,11 +1,11 @@ --- -import PlaceholderPage from '@/components/sections/placeholder-page'; +import ResearchAreaProfile from '@/components/sections/research-area-profile.astro'; +import { RESEARCH_AREAS } from '@/data/research-area-pages'; import DefaultLayout from '@/layouts/DefaultLayout.astro'; + +const area = RESEARCH_AREAS.theory; --- - + diff --git a/src/pages/updates/blog.astro b/src/pages/updates/blog.astro index d2227dd..69a97ca 100644 --- a/src/pages/updates/blog.astro +++ b/src/pages/updates/blog.astro @@ -1,11 +1,14 @@ --- -import PlaceholderPage from '@/components/sections/placeholder-page'; +import { getCollection } from 'astro:content'; + +import BlogPosts from '@/components/sections/blog-posts'; import DefaultLayout from '@/layouts/DefaultLayout.astro'; + +const posts = (await getCollection('blog')).sort( + (a, b) => b.data.date.valueOf() - a.data.date.valueOf(), +); --- - + diff --git a/src/pages/updates/deadlines.astro b/src/pages/updates/deadlines.astro index 5a1d7aa..8fc8ad0 100644 --- a/src/pages/updates/deadlines.astro +++ b/src/pages/updates/deadlines.astro @@ -1,11 +1,24 @@ --- -import PlaceholderPage from '@/components/sections/placeholder-page'; +import JeeOpenHousePromo from '@/components/sections/jee-open-house-promo.astro'; import DefaultLayout from '@/layouts/DefaultLayout.astro'; --- - - + +
+
+

+ Updates +

+

Deadlines

+

+ Upcoming important dates, information sessions, and application-related + announcements. +

+
+
+ +
diff --git a/src/pages/updates/events.astro b/src/pages/updates/events.astro index 9da133a..2e9fe32 100644 --- a/src/pages/updates/events.astro +++ b/src/pages/updates/events.astro @@ -209,7 +209,7 @@ const groupedPastEvents = Object.entries(
{ diff --git a/src/pages/updates/outreach.astro b/src/pages/updates/outreach.astro index 2adff46..86b2178 100644 --- a/src/pages/updates/outreach.astro +++ b/src/pages/updates/outreach.astro @@ -113,14 +113,13 @@ const publicPrograms = [ const mediaItems = [ { - title: "Conversation with Neeldhara Misra", - person: "Neeldhara Misra", - type: "Podcast", + title: "Frontiers of Graph Algorithms invited talk", + person: "Manoj D Gupta", + type: "Invited talk", summary: - "A long-form conversation on her path into algorithms, computational social choice, games, and science communication.", - sourceLabel: "VISMAYA", - sourceUrl: - "https://historyofscience.in/2024/01/03/conversation-with-neeldhara-misra/", + "Manoj Gupta was listed as an invited speaker at the Frontiers of Graph Algorithms workshop at IISc Bangalore, held from 8-12 December 2025, and spoke on improved 2-approximate shortest paths for close vertex pairs.", + sourceLabel: "Workshop schedule", + sourceUrl: "https://algo.csa.iisc.ac.in/graphworkshop/schedule.html", }, { title: "IITGN Podcast: AI, Academia, and Student Opportunities", @@ -172,6 +171,62 @@ const mediaItems = [ sourceUrl: "https://news.iitgn.ac.in/iit-gandhinagar-launches-ai-resilience-and-command-centre-for-data-driven-climate-risk-management/", }, + { + title: "Coresets for Machine Learning", + person: "Anirban Dasgupta", + type: "YouTube talk", + summary: + "A Centre for Networked Intelligence seminar on coresets for tensor factorization, Bregman clustering, and efficient data summarization.", + sourceLabel: "CNI / YouTube", + sourceUrl: "https://cni.iisc.ac.in/seminars/2022-11-17/", + }, + { + title: "Controlled Spatial Sharing of GPUs", + person: "Sameer G. Kulkarni", + type: "YouTube talk", + summary: + "A CNI seminar on GSLICE, GPU virtualization, and scalable inference at the edge.", + sourceLabel: "CNI / YouTube", + sourceUrl: "https://cni.iisc.ac.in/seminars/2021-07-06/", + }, + { + title: "DY*: Symbolic Verification for Cryptographic Protocol Code", + person: "Abhishek Bichhawat", + type: "YouTube talk", + summary: + "A F* PoP Up Seminar talk on modular symbolic verification for executable cryptographic protocol code.", + sourceLabel: "F* PoP Up Seminar", + sourceUrl: "https://fstar-lang.org/popup/seminar.html", + }, + { + title: "Minecraft: Automated Mining of Software Bug Fixes", + person: "Shouvick Mondal", + type: "YouTube presentation", + summary: + "An ASE 2023 presentation on mining multilingual bug-fix datasets with precise code context.", + sourceLabel: "ASE 2023", + sourceUrl: + "https://conf.researchr.org/details/ase-2023/ase-2023-industry-challenge/2/Minecraft-Automated-Mining-of-Software-Bug-Fixes-with-Precise-Code-Context", + }, + { + title: "3-Minute ML and public teaching videos", + person: "Nipun Batra", + type: "YouTube series", + summary: + "A public YouTube-linked teaching page with bite-sized machine-learning explainers and recorded course material.", + sourceLabel: "Teaching videos", + sourceUrl: "https://nipunbatra.github.io/teaching.html", + }, + { + title: "Conversation with Neeldhara Misra", + person: "Neeldhara Misra", + type: "Podcast", + summary: + "A long-form conversation on her path into algorithms, computational social choice, games, and science communication.", + sourceLabel: "VISMAYA", + sourceUrl: + "https://historyofscience.in/2024/01/03/conversation-with-neeldhara-misra/", + }, ]; const educationEventIds = new Set([