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/people/mega-menu-group.jpeg b/public/images/people/mega-menu-group.jpeg new file mode 100644 index 0000000..40471bd Binary files /dev/null and b/public/images/people/mega-menu-group.jpeg differ diff --git a/public/images/people/zeel-phd-jrfs-mtech.jpeg b/public/images/people/zeel-phd-jrfs-mtech.jpeg new file mode 100644 index 0000000..4bbcd7e Binary files /dev/null and b/public/images/people/zeel-phd-jrfs-mtech.jpeg 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..06c7e67 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', @@ -1006,10 +1030,17 @@ const PEOPLE_LINKS = [ }, ]; -const PEOPLE_IMAGES = [ - 'https://images.unsplash.com/photo-1523580494863-6f3031224c94?w=600&h=340&fit=crop', - 'https://images.unsplash.com/photo-1522202176988-66273c2fd55f?w=600&h=340&fit=crop', - 'https://images.unsplash.com/photo-1517486808906-6ca8b3f04846?w=600&h=340&fit=crop', +const PEOPLE_MENU_IMAGES = [ + { + src: '/images/people/mega-menu-group.jpeg', + alt: 'CSE students and faculty at IIT Gandhinagar', + objectPosition: 'center', + }, + { + src: '/images/people/zeel-phd-jrfs-mtech.jpeg', + alt: 'Sustainability Lab group with students and researchers at IIT Gandhinagar', + objectPosition: 'center 55%', + }, ]; function PeopleMegaMenu() { @@ -1017,7 +1048,7 @@ function PeopleMegaMenu() { useEffect(() => { const interval = setInterval(() => { - setCurrentImage((i) => (i + 1) % PEOPLE_IMAGES.length); + setCurrentImage((i) => (i + 1) % PEOPLE_MENU_IMAGES.length); }, 3500); return () => clearInterval(interval); }, []); @@ -1047,34 +1078,35 @@ function PeopleMegaMenu() { ))}
- {/* Right: image carousel */} + {/* Right: featured image slider */}
- {PEOPLE_IMAGES.map((src, i) => ( + {PEOPLE_MENU_IMAGES.map((image, i) => ( {`Department ))} - {/* First image static for sizing */} - {/* Dots */}
- {PEOPLE_IMAGES.map((_, i) => ( + {PEOPLE_MENU_IMAGES.map((image, i) => (
-
+
@@ -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/announcements.tsx b/src/components/sections/announcements.tsx index 6f67317..3b39323 100644 --- a/src/components/sections/announcements.tsx +++ b/src/components/sections/announcements.tsx @@ -14,6 +14,19 @@ const parseSeminarDate = (date: string) => new Date(`${date}T00:00:00`); const formatSeminarMeta = (displayDate: string, time?: string) => time ? `${displayDate} · ${time}` : displayDate; +const homepageEventAnnouncements = [ + { + id: "theory-day-2026", + categoryLabel: "Event", + displayDate: "17 Jun 2026", + title: "Theory Day: Foundations of Computer Science", + href: "/events/theory-day-2026", + summary: + "Registration is open for Theory Day on 17 June 2026. Schedule, talk titles, and abstracts will be announced soon.", + isExternal: false, + }, +]; + export default function Announcements() { const [seminarView, setSeminarView] = useState<"upcoming" | "recent">( "upcoming", @@ -52,6 +65,18 @@ export default function Announcements() { ); const activeSeminars = seminarView === "upcoming" ? upcomingSeminars : recentSeminars; + const homepageAnnouncements = [ + ...homepageEventAnnouncements, + ...homepageNewsItems.slice(0, 2).map((item) => ({ + id: item.id, + categoryLabel: CATEGORY_LABELS[item.category], + displayDate: item.displayDate, + title: item.title, + href: item.sourceUrl, + summary: item.summary, + isExternal: true, + })), + ]; return (
@@ -71,11 +96,11 @@ export default function Announcements() {
- {homepageNewsItems.slice(0, 3).map((item) => ( + {homepageAnnouncements.map((item) => (
- {CATEGORY_LABELS[item.category]} + {item.categoryLabel} @@ -83,9 +108,9 @@ export default function Announcements() {
{item.title} 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..1bdac26 100644 --- a/src/components/sections/hero.tsx +++ b/src/components/sections/hero.tsx @@ -6,26 +6,36 @@ import { AnimatePresence, motion } from 'motion/react'; import { ArrowRight } from 'lucide-react'; import { Button } from '@/components/ui/button'; -import { cn } from '@/lib/utils'; -const slides = [ +type HeroSlide = { + src: string; + alt: string; + title: string; + description?: string; + ctaLabel: string; + ctaHref: string; + objectPosition?: React.CSSProperties['objectPosition']; +}; + +const slides: HeroSlide[] = [ { - 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/course-resources/theory-of-computing.png', + alt: 'Foundations of computer science visual with automata, stacks, and computation diagrams', + title: 'Theory Day 2026', + description: + 'Foundations of Computer Science. 17 June 2026; registration is open.', + ctaLabel: 'View Details', + ctaHref: '/events/theory-day-2026', }, { - 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', + objectPosition: 'center bottom', }, ]; @@ -118,7 +128,7 @@ export default function Hero() { useEffect(() => { const timer = setTimeout(() => { setCurrentIndex((prevIndex) => (prevIndex + 1) % slides.length); - }, 2500); + }, 5000); return () => clearTimeout(timer); }, [currentIndex]); @@ -155,6 +165,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 +219,11 @@ export default function Hero() {

{slides[currentIndex].title}

-

- {slides[currentIndex].description} -

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

+ {slides[currentIndex].description} +

+ )}
@@ -218,8 +233,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/recent-wins.tsx b/src/components/sections/recent-wins.tsx index 4f53c00..494f61c 100644 --- a/src/components/sections/recent-wins.tsx +++ b/src/components/sections/recent-wins.tsx @@ -5,6 +5,12 @@ import { homepageAwardItems } from '@/data/news'; const colors = ['bg-amber-400', 'bg-blue-500', 'bg-emerald-500']; export default function RecentWins() { + const featuredAward = + homepageAwardItems.find((award) => award.featured) ?? homepageAwardItems[0]; + const listedAwards = homepageAwardItems.filter( + (award) => award.id !== featuredAward?.id, + ); + return (
@@ -13,48 +19,75 @@ export default function RecentWins() { Recognitions & Awards

- - - - - - - - - - - - - - - {homepageAwardItems.map((award, index) => ( - + {featuredAward && ( +
+
+ + Featured + + + {featuredAward.displayDate} + +
+ -
- - + {featuredAward.title} + +

+ {featuredAward.summary} +

+ + )} + +
NameDescriptionYear
- - - {award.summary} - - {award.displayDate} -
+ + + + + + + + + + - ))} - -
Name + Description + Year
+ + + {listedAwards.map((award, index) => ( + + + + + + {award.summary} + + + {award.displayDate} + + + ))} + + +
); 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.config.ts b/src/content.config.ts index 797cba4..4df5cf0 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -23,6 +23,7 @@ const blog = defineCollection({ }), tags: z.array(z.string()).optional(), coverImage: z.string().optional(), + draft: z.boolean().optional().default(false), }), }); 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..4d0d96a --- /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"] +draft: true +--- + +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..2ad14b9 --- /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"] +draft: true +--- + +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..1dd378f --- /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"] +draft: true +--- + +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..26a5908 --- /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"] +draft: true +--- + +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..250fd69 --- /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"] +draft: true +--- + +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..c95b3e9 --- /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"] +draft: true +--- + +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..eb027d4 --- /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"] +draft: true +--- + +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..2e67efa --- /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"] +draft: true +--- + +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..3ef4724 --- /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"] +draft: true +--- + +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..a519d2d --- /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"] +draft: true +--- + +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..87e95c4 --- /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"] +draft: true +--- + +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..2090bb7 --- /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"] +draft: true +--- + +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..f021463 --- /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"] +draft: true +--- + +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..d382b0b --- /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"] +draft: true +--- + +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..ba2ad87 --- /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"] +draft: true +--- + +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..344e75f --- /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"] +draft: true +--- + +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..6c0b29b --- /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"] +draft: true +--- + +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..550dc11 --- /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"] +draft: true +--- + +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..86a5a7b --- /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"] +draft: true +--- + +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..5747262 --- /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"] +draft: true +--- + +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..8ae97bf --- /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"] +draft: true +--- + +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..4b674d9 --- /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"] +draft: true +--- + +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..c541752 --- /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"] +draft: true +--- + +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..64d31cf --- /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"] +draft: true +--- + +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..1e63a68 --- /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"] +draft: true +--- + +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..04b249e --- /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"] +draft: true +--- + +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..0207c1e --- /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"] +draft: true +--- + +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..cc9d9bc --- /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"] +draft: true +--- + +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..12970ae --- /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"] +draft: true +--- + +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..cbdfeda --- /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"] +draft: true +--- + +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..86fb2e7 --- /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"] +draft: true +--- + +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..9e58820 --- /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"] +draft: true +--- + +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..c057631 --- /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"] +draft: true +--- + +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..68a96fe --- /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"] +draft: true +--- + +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..fb74c8b --- /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"] +draft: true +--- + +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..480642c --- /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"] +draft: true +--- + +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..518a919 --- /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"] +draft: true +--- + +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..c495151 --- /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"] +draft: true +--- + +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..47f5d39 --- /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"] +draft: true +--- + +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..01772b9 --- /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"] +draft: true +--- + +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..190c72b --- /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"] +draft: true +--- + +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..d0c509d --- /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"] +draft: true +--- + +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..d7091b7 --- /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"] +draft: true +--- + +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/events.ts b/src/data/events.ts index c99cb04..303c686 100644 --- a/src/data/events.ts +++ b/src/data/events.ts @@ -39,6 +39,21 @@ export const EVENT_CATEGORY_STYLES: Record = { }; export const departmentEvents: DepartmentEvent[] = [ + { + id: "theory-day-foundations-cs-2026", + title: "Theory Day: Foundations of Computer Science", + category: "symposium", + year: 2026, + displayDate: "17 Jun 2026", + startDate: "2026-06-17", + organizer: "Department of Computer Science & Engineering, IIT Gandhinagar", + description: + "A one-day Theory Day focused on foundations of computer science. The schedule, talk titles, and abstracts will be announced soon.", + source: "CSE archive", + sourceLabel: "Event page", + sourceUrl: "/events/theory-day-2026", + featured: true, + }, { id: "ai-day-2026", title: "AI Day", 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..0d83d88 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"; @@ -19,6 +20,7 @@ export interface DepartmentNewsItem { sourceLabel: string; sourceUrl: string; homepage?: boolean; + featured?: boolean; } export const CATEGORY_LABELS: Record = { @@ -27,6 +29,7 @@ export const CATEGORY_LABELS: Record = { award: "Award", event: "Event", infrastructure: "Infrastructure", + service: "Service", }; export const STATUS_LABELS: Record = { @@ -35,6 +38,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 +282,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", @@ -206,6 +410,22 @@ export const departmentNews: DepartmentNewsItem[] = [ sourceLabel: "IITGN Technical Council", sourceUrl: "https://technical-council.iitgn.tech/achievements", }, + { + id: "anirban-stoc-test-of-time-2024", + title: "Anirban Dasgupta receives ACM STOC 10-year Test of Time Award", + summary: + "The STOC 2024 award recognizes the lasting impact of the paper “A Sparse Johnson-Lindenstrauss Transform,” co-authored with Ravi Kumar and Tamás Sarlós.", + people: "Anirban Dasgupta, Ravi Kumar, and Tamás Sarlós", + displayDate: "2024", + date: "2024-06-21", + category: "award", + status: "confirmed", + sourceLabel: "Cornell Bowers CIS", + sourceUrl: + "https://bowers.cornell.edu/news-stories/faculty-and-alumni-receive-test-time-awards-stoc-2024", + homepage: true, + featured: true, + }, { id: "chitrabhasha-anrf", title: "Chitrabhasha receives ANRF Advanced Research Grant support", @@ -266,7 +486,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", @@ -401,4 +621,6 @@ export const homepageNewsItems = sortByDateDesc( export const homepageAwardItems = sortByDateDesc( departmentNews.filter((item) => item.homepage && item.category === "award"), -).slice(0, 4); +) + .sort((a, b) => Number(Boolean(b.featured)) - Number(Boolean(a.featured))) + .slice(0, 5); 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/seminars.ts b/src/data/seminars.ts index a5fd6a5..aacbac0 100644 --- a/src/data/seminars.ts +++ b/src/data/seminars.ts @@ -34,6 +34,23 @@ const aninditaMaitiBio = 'Dr. Anindita Maiti is a Postdoctoral Fellow at the Perimeter Institute for Theoretical Physics, cross-affiliated with Prof. Roger Melko’s group Perimeter Institute Quantum Intelligence Lab (PIQuIL) since September 2023. Previously, Anindita held a short postdoctoral appointment in physics for ML foundations, supervised by Prof. Cengiz Pehlevan, at Harvard Applied Math (May-August 2023). She earned her PhD in theoretical high-energy physics (string theory and particle theory division) at Northeastern University and the NSF AI Institute for Artificial Intelligence and Fundamental Interactions (IAIFI) in May 2023, under the supervision of Prof. James Halverson. Anindita received her Integrated Bachelors and Masters in Engineering Physics at IIT Bombay in Aug 2017, supervised by Prof. Urjit Yajnik. Anindita’s research lies at the intersection of AI/ML, quantum, and statistical physics. In short, she works on Physics of Learning and ML for Quantum. Broadly, Anindita uses theoretical physics concepts: such as Feynman path integrals, renormalization group flow, computational statistics, and random matrix theory, to develop a physics-informed theoretical foundation for ML and to guide the principled design of AI systems. Anindita applies this framework to construct interpretable and trustworthy AI- and ML-based simulation strategies for quantum field theory and quantum many-body physics.'; const rawSeminarEntries = [ + { + id: 'sunil-chandran-graph-theory-quantum-physics-2026', + type: 'CS theory seminar', + title: 'Graph Theory in Quantum Physics!', + speaker: 'Prof. L. Sunil Chandran', + affiliation: 'Indian Institute of Science, Bangalore', + date: '2026-06-10', + displayDate: '10 Jun 2026', + time: '11:00 am IST', + venue: 'AB 7/208', + summary: + 'This CS theory seminar connects graph perfect matchings and colourings with constructability questions in photonic quantum technologies. Refreshments will be served before the talk.', + abstract: + "In 2018, Krenn reported that certain problems related to the perfect matchings and colourings of graphs emerge out of studying constructability of general quantum states using modern photonic technologies.\n\nHe realized that if we can prove that the weighted matching index of a graph, a parameter defined in terms of perfect matchings and colourings of the graph is at most 2, that could lead to exciting insights on the potential of resources of quantum inference. Motivated by this, he conjectured that the weighted matching index of any graph is at most 2. The first result on this conjecture was by Bogdanov, who proved that the unweighted matching index is at most 2, thus classifying graphs non-isomorphic to K_4 into Type 0, Type 1 and Type 2. By definition, the weighted matching index of Type 0 graphs is 0. We give a structural characterization for Type 2 graphs, using which we settle Krenn's conjecture for Type 2 graphs.\n\nWe also present several other results regarding Krenn's conjecture: (1) Krenn's conjecture is true for multi-graphs whose underlying simple graph is of maximum degree at most 3. Also we show that Krenn's conjecture is true when the underlying simple graph has vertex connectivity at most 2. We also show some non-constructability results when the experiment graph is assumed to be simple.\n\nRefreshments will be served before the talk.", + bio: + 'Prof. L. Sunil Chandran is a Professor in the Department of Computer Science and Automation at the Indian Institute of Science, Bangalore. He received his PhD from the Indian Institute of Science, Bangalore, and was a postdoctoral fellow at the Max Planck Institute for Informatics, Saarbruecken, Germany. His research areas are graph theory, combinatorics, and graph algorithms. He is a fellow of the Indian National Science Academy and the Indian National Academy of Engineering.', + }, { id: 'anindita-maiti-research-proposal-session-2026', type: 'Research proposal session', 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/contact.astro b/src/pages/about/contact.astro index 5e93d21..2547e1d 100644 --- a/src/pages/about/contact.astro +++ b/src/pages/about/contact.astro @@ -21,10 +21,10 @@ import DefaultLayout from '@/layouts/DefaultLayout.astro';