From 2914f8dc0244c8dee1474baebe1782ba5b756b17 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 16 Jul 2026 15:14:30 +0000 Subject: [PATCH] =?UTF-8?q?Drive=20plain=20r=C3=A9sum=C3=A9=20page=20from?= =?UTF-8?q?=20resume.json=20+=20global=20search=20(redesign=20phase=203)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make the plain page (public/resume.html) a generated declared mirror so it and the terminal share one source, and enrich that source to the superset both need. - resume.org: merged to the superset — richer achievement-oriented bullets, per-item subtitle/location/tech tags, all projects (adds Terrapin Rocket, Robotics@UMD) and the full course list. - org-to-json parser: optional subtitle/location fields + `- tech :: X` tagged bullets; `list` flag so education stays bullet-free; empty tag arrays dropped. - scripts/build-resume-html.mjs + resume.template.html: the template owns the design (unchanged look); content is rendered from resume.json. Adds a global search box that filters every card and course pill across sections, with a no-results empty state. HTML-escaped; arXiv ids linkified. - resume:build now generates both mirrors; resume:check + CI canary verify both. Verified: yarn build + tsc clean; both canaries green; driven headless — design preserved, 17 cards render, search isolates by keyword/tech/course, no errors. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nt6ycjAMdUMqGTGtbKocrs --- .github/workflows/resume-canary.yml | 22 +- package.json | 4 +- public/resume.html | 1165 ++++++++++++--------------- resume.json | 195 +++-- resume.org | 204 +++-- resume.template.html | 450 +++++++++++ scripts/build-resume-html.mjs | 248 ++++++ scripts/org-to-json.mjs | 33 +- src/utils/resume.ts | 6 + 9 files changed, 1582 insertions(+), 745 deletions(-) create mode 100644 resume.template.html create mode 100644 scripts/build-resume-html.mjs diff --git a/.github/workflows/resume-canary.yml b/.github/workflows/resume-canary.yml index fa0084b..fab660d 100644 --- a/.github/workflows/resume-canary.yml +++ b/.github/workflows/resume-canary.yml @@ -1,12 +1,24 @@ -# Drift canary for the résumé declared mirror (praxis: Mirrors and Canaries). -# Fails if resume.json is out of sync with its canonical source resume.org. +# Drift canary for the résumé declared mirrors (praxis: Mirrors and Canaries). +# Fails if resume.json or public/resume.html is out of sync with resume.org. name: resume-canary on: push: - paths: ['resume.org', 'resume.json', 'scripts/org-to-json.mjs'] + paths: + - 'resume.org' + - 'resume.json' + - 'public/resume.html' + - 'resume.template.html' + - 'scripts/org-to-json.mjs' + - 'scripts/build-resume-html.mjs' pull_request: - paths: ['resume.org', 'resume.json', 'scripts/org-to-json.mjs'] + paths: + - 'resume.org' + - 'resume.json' + - 'public/resume.html' + - 'resume.template.html' + - 'scripts/org-to-json.mjs' + - 'scripts/build-resume-html.mjs' jobs: check: @@ -18,3 +30,5 @@ jobs: node-version: '20' - name: Verify resume.json matches resume.org run: node scripts/org-to-json.mjs resume.org resume.json --check + - name: Verify public/resume.html matches resume.json + run: node scripts/build-resume-html.mjs --check diff --git a/package.json b/package.json index 5fe5e4c..575d2f4 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,8 @@ "email": "contact@wensenwu.com" }, "scripts": { - "resume:build": "node scripts/org-to-json.mjs resume.org resume.json", - "resume:check": "node scripts/org-to-json.mjs resume.org resume.json --check", + "resume:build": "node scripts/org-to-json.mjs resume.org resume.json && node scripts/build-resume-html.mjs", + "resume:check": "node scripts/org-to-json.mjs resume.org resume.json --check && node scripts/build-resume-html.mjs --check", "prebuild": "yarn resume:build", "predev": "yarn resume:build", "dev": "next dev", diff --git a/public/resume.html b/public/resume.html index 48ed10e..d144d8a 100644 --- a/public/resume.html +++ b/public/resume.html @@ -1,776 +1,685 @@ - - - - Mihir Talati – Resume - - - -
-
-

Mihir Talati

-

Dual Degree · B.S. Computer Science (Honors) & B.S. Physics (Honors) · GPA 3.974

-
- -
+ display: grid; + grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); + gap: 14px; + margin-top: 26px; + position: relative; + z-index: 1; + } + + .course-pill { + background: rgba(6, 28, 14, 0.9); + border-radius: 16px; + padding: 12px 16px; + border: 1px solid rgba(146, 255, 197, 0.4); + font-weight: 500; + color: var(--primary-text); + box-shadow: inset 0 0 12px rgba(146, 255, 197, 0.08), + 0 16px 32px rgba(6, 40, 18, 0.45); + transition: transform 0.15s ease, box-shadow 0.15s ease, + border-color 0.15s ease; + } + + .course-pill:hover { + transform: translateY(-2px); + border-color: rgba(154, 205, 50, 0.65); + box-shadow: inset 0 0 14px rgba(146, 255, 197, 0.12), + 0 18px 36px rgba(10, 60, 30, 0.55); + } + + .course-pill.hidden { + display: none; + } + + .empty-state { + display: none; + margin-top: 24px; + padding: 18px; + border-radius: 14px; + background: rgba(4, 20, 10, 0.75); + border: 1px dashed rgba(146, 255, 197, 0.5); + color: rgba(212, 255, 225, 0.82); + text-align: center; + font-weight: 500; + position: relative; + z-index: 1; + } + + a { + color: var(--accent); + } + + @media (max-width: 720px) { + header h1 { + font-size: 2.1rem; + } + + .card { + padding: 26px; + } + + .card-header { + flex-direction: column; + align-items: flex-start; + } + + .card-meta { + text-align: left; + } + + .courses-grid { + grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); + } + } + + + + + +
+
+

Mihir Talati

+

Dual Degree · B.S. Computer Science (Honors) & B.S. Physics (Honors) · GPA 3.974

+
+ +
+ + +
+ +

Education

-
-
-
-

University of Maryland – College Park

-

Computer Science (Honors) · Physics (Honors)

-
-
- Expected Graduation · May 2027 - Dean’s List · Every Semester -
-
-
-

Scholarships & Distinctions

-
    -
  • Angelo Bardasis Scholarship (Physics)
  • -
  • John D. Gannon Scholarship (Computer Science)
  • -
+
+
+
+

University of Maryland — College Park

+

Computer Science (Honors) · Physics (Honors)

-
+
Expected Graduation · May 2027GPA · 3.974
+
+
+

Scholarships & Distinctions

+
  • Angelo Bardasis Scholarship — Physics
  • John D. Gannon Scholarship — Computer Science
  • Dean's List — Every Semester
+
+

Work Experience

-
+

Researcher · CAAR REU

Combinatorics, Algorithms, and AI for Real Problems

-
- Jun 2025 – Aug 2025 - QuICS · University of Maryland -
+
Jun 2025 – Aug 2025QuICS · University of Maryland
-
    -
  • Python
  • -
  • Galois
  • -
  • NumPy
  • -
  • Magma Math
  • -
  • SageMath
  • -
-
    -
  • Designed novel fault-tolerant CSS quantum error-correcting codes for qudits inspired by quadratic residue codes.
  • -
  • Established code families with transversal Clifford and T gate support through finite field and QEC theory proofs.
  • -
  • Implemented parallel Python tooling to validate self-orthogonality and distance properties across large search spaces.
  • -
+
  • Python
  • Galois
  • NumPy
  • Magma Math
  • SageMath
+
  • Designed novel fault-tolerant CSS quantum error-correcting codes for qudits inspired by quadratic residue codes.
  • Established code families with transversal Clifford and T gate support through finite field and QEC theory proofs.
  • Implemented parallel Python tooling to validate self-orthogonality and distance properties across large search spaces.
-
+

Undergraduate Researcher · Bright Beams Collective

IREAP Research Experience for Undergraduates

-
- Sep 2023 – Dec 2024 - Institute for Research in Electronics and Applied Physics -
+
Sep 2023 – Dec 2024Institute for Research in Electronics and Applied Physics
-
    -
  • MAD-X
  • -
  • Elegant
  • -
  • Fusion 360
  • -
  • MATLAB
  • -
  • Ansys Workbench
  • -
-
    -
  • Built custom machine learning and gradient-based optimizers to derive design parameters for a planned beamline.
  • -
  • Ran accelerator simulations to analyze lattice stability and beam quality under varied operating configurations.
  • -
  • Produced animations of betatron motion for outreach presentations and technical discussions.
  • -
+
  • MAD-X
  • Elegant
  • Fusion 360
  • MATLAB
  • Ansys Workbench
+
  • Built custom machine learning and gradient-based optimizers to derive design parameters for a planned beamline.
  • Ran accelerator simulations to analyze lattice stability and beam quality under varied operating configurations.
  • Produced animations of betatron motion for outreach presentations and technical discussions.
-
+

Software Engineering Intern · JODO PAY

Invoicing System Automation

-
- Jun 2022 – Jul 2022 -
+
Jun 2022 – Jul 2022
-
    -
  • JavaScript
  • -
  • TypeScript
  • -
  • Google Apps Script
  • -
-
    -
  • Automated invoice generation and dispatch for clients, reducing manual processing by 40 staff hours each week.
  • -
  • Integrated Google Workspace APIs to manage templates, customer data, and error handling workflows.
  • -
+
  • JavaScript
  • TypeScript
  • Google Apps Script
+
  • Automated invoice generation and dispatch for clients, reducing manual processing by 40 staff hours each week.
  • Integrated Google Workspace APIs to manage templates, customer data, and error handling workflows.

Projects

-
+

Quantum State Tomography via QML

GitHub · github.com/Mihir-Null

-
- Sep 2024 – Jul 2025 -
+
Sep 2024 – Jul 2025
-
    -
  • Python
  • -
  • Qiskit
  • -
  • Aer
  • -
  • MPI
  • -
  • Numba
  • -
  • PyTorch
  • -
-
    -
  • Co-developed a variational circuit tomography approach, exploring loss landscapes, embedding strategies, and optimizers.
  • -
  • Executed 2,000+ experiments across multi-GPU clusters with a custom orchestrator for reproducible benchmarking.
  • -
  • Co-authored Quantum state reconstruction with variational quantum circuit (arXiv:2507.01246).
  • -
+
  • Python
  • Qiskit
  • Aer
  • MPI
  • Numba
  • PyTorch
+
  • Co-developed a variational circuit tomography approach, exploring loss landscapes, embedding strategies, and optimizers.
  • Executed 2,000+ experiments across multi-GPU clusters with a custom orchestrator for reproducible benchmarking.
  • Co-authored "Quantum state reconstruction with variational quantum circuit" (arXiv:2507.01246).
-
+
-

MIT iQuHack · QuEra Challenge

+

MIT iQuHack — QuEra Challenge

Honorable Mention

-
- Feb 2025 -
+
Feb 2025
-
    -
  • Python
  • -
  • Qiskit
  • -
  • Cirq
  • -
  • Bloqade
  • -
  • PyTorch
  • -
  • TensorFlow Quantum
  • -
-
    -
  • Designed a compilation pipeline mapping diverse quantum circuits—including QAOA and Steane codes—to QuEra hardware.
  • -
  • Optimized pulse sequences for neutral atom instruction sets, contributing to the team’s honorable mention finish.
  • -
+
  • Python
  • Qiskit
  • Cirq
  • Bloqade
  • PyTorch
  • TensorFlow Quantum
+
  • Designed a compilation pipeline mapping diverse quantum circuits — including QAOA and Steane codes — to QuEra hardware.
  • Optimized pulse sequences for neutral atom instruction sets, contributing to the team's honorable mention finish.
-
+

Quantum Machine Learning Research

Undergraduate Research Portfolio

-
- Aug 2023 – Dec 2024 -
+
Aug 2023 – Dec 2024
-
    -
  • Python
  • -
  • Qiskit
  • -
  • Cirq
  • -
  • PennyLane
  • -
  • Q#
  • -
-
    -
  • Implemented quantum image processing with parameterized circuit kernels integrated into CNN architectures.
  • -
  • Created a hybrid transitional optimizer to mitigate barren plateaus in QAOA, presented at the FYIRE Summit 2024.
  • -
+
  • Python
  • Qiskit
  • Cirq
  • PennyLane
  • Q#
+
  • Implemented quantum image processing with parameterized circuit kernels integrated into CNN architectures.
  • Created a hybrid transitional optimizer to mitigate barren plateaus in QAOA, presented at the FYIRE Summit 2024.
-
+
-

Terrapin Rocket Team · Kalman Filters

+

Terrapin Rocket Team — Kalman Filters

Guidance, Navigation, and Control

-
- Aug 2023 – Jan 2024 -
+
Aug 2023 – Jan 2024
-
    -
  • C
  • -
  • C++
  • -
  • MATLAB
  • -
-
    -
  • Developed six- and nine-state Kalman filters fusing multi-sensor telemetry for rocket position estimation.
  • -
  • Supported the team’s winning entry at the 2024 Spaceport America Cup.
  • -
+
  • C
  • C++
  • MATLAB
+
  • Developed six- and nine-state Kalman filters fusing multi-sensor telemetry for rocket position estimation.
  • Supported the team's winning entry at the 2024 Spaceport America Cup.
-
+
-

Robotics @ UMD · Computer Vision

+

Robotics @ UMD — Computer Vision

Testudog Automation

-
- Aug 2023 – Jan 2024 -
+
Aug 2023 – Jan 2024
-
    -
  • Python
  • -
  • OpenCV
  • -
  • scikit-learn
  • -
-
    -
  • Developed Haar cascade pipelines for the Testudog robotics platform deployed on a Jetson-powered Boston Dynamics Spot.
  • -
+
  • Python
  • OpenCV
  • scikit-learn
+
  • Developed Haar cascade pipelines for the Testudog robotics platform deployed on a Jetson-powered Boston Dynamics Spot.
-
+

Club Administration Automation

Workflow Automation Suite

-
- Nov 2024 – Feb 2025 -
+
Nov 2024 – Feb 2025
-
    -
  • Python
  • -
  • Selenium
  • -
  • Discord.py
  • -
  • REST APIs
  • -
  • OAuth 2.0
  • -
-
    -
  • Automated Discord announcements, email campaigns, Instagram publishing, and room reservations for university clubs.
  • -
  • Currently deployed across multiple organizations to streamline administrative overhead.
  • -
+
  • Python
  • Selenium
  • Discord.py
  • REST APIs
  • OAuth 2.0
+
  • Automated Discord announcements, email campaigns, Instagram publishing, and room reservations for university clubs.
  • Currently deployed across multiple organizations to streamline administrative overhead.
-
+

Housing Market Analysis

Predictive Pricing Models

-
- Jun 2024 – Jul 2024 -
+
Jun 2024 – Jul 2024
-
    -
  • Python
  • -
  • Pandas
  • -
  • SciPy
  • -
  • NumPy
  • -
  • scikit-learn
  • -
  • SQL
  • -
-
    -
  • Trained feedforward neural networks for price prediction using engineered features derived from public listings and census data.
  • -
  • Applied PCA and statistical analysis to identify high-signal attributes and reduce overfitting.
  • -
+
  • Python
  • Pandas
  • SciPy
  • NumPy
  • scikit-learn
  • SQL
+
  • Trained feedforward neural networks for price prediction using engineered features derived from public listings and census data.
  • Applied PCA and statistical analysis to identify high-signal attributes and reduce overfitting.
-
+

Independent Game Development

National Game Jam Winner

-
- 2020 – 2023 -
-
-
    -
  • C#
  • -
  • C++
  • -
  • Unity
  • -
  • Unreal Engine
  • -
  • Blender
  • -
  • Adobe Suite
  • -
-
    -
  • Published two action platformers, including a custom 2D soft-body simulation available via Two Guys Studios on itch.io.
  • -
  • Placed second in the 2021 Mindbox National Design Championship; finalist in 2020 edition.
  • -
  • Built a procedural map generation toolkit leveraging noise algorithms and custom pathfinding.
  • -
-
- -
-
-
-

Author · A Very Quick Guide to Special Relativity

-

Educational Publication

-
-
- Sep 2020 – Jun 2021 -
+
2020 – 2023
-
    -
  • Authored and published an accessible introduction to special relativity covering time dilation through mass–energy equivalence.
  • -
+
  • C#
  • C++
  • Unity
  • Unreal Engine
  • Blender
  • Adobe Suite
+
  • Published two action platformers, including a custom 2D soft-body simulation available via Two Guys Studios on itch.io.
  • Placed second in the 2021 Mindbox National Design Championship; finalist in the 2020 edition.
  • Built a procedural map generation toolkit leveraging noise algorithms and custom pathfinding.

Organizations

-
+

Industry Chair · Quantum Coalition

-
- Jan 2024 – Present -
+
Jan 2024 – Present
-
    -
  • Co-organized the QRISE research competition with 200+ international participants.
  • -
  • Partnered with the UN and ITU to deliver the QC-FLIQ hackathon for the International Year of Quantum (500+ attendees).
  • -
+
  • Co-organized the QRISE research competition with 200+ international participants.
  • Partnered with the UN and ITU to deliver the QC-FLIQ hackathon for the International Year of Quantum (500+ attendees).
-
+

President · Undergraduate Quantum Association

-
- Jan 2024 – Present -
+
Jan 2025 – Present
-
    -
  • Led organizational strategy, programming, and outreach after serving as officer since 2020.
  • -
  • Produced the Quantum Leap Career Nexus with 240+ attendees and partners including IBM, Microsoft, and IonQ.
  • -
+
  • Led organizational strategy, programming, and outreach after serving as an officer since 2020.
  • Produced the Quantum Leap Career Nexus with 240+ attendees and partners including IBM, Microsoft, and IonQ.
-
+

Co-President · ACM@UMD

-
- Sep 2023 – Present +
Sep 2023 – Present
+
+
  • Restarted the university chapter, launched a new website, and grew membership beyond 145 students.
  • Led workshops focused on shell scripting, AI, quantum computing, and heuristic search techniques.
+
+
+ +
+

Publications

+ +
+
+
+

Quantum state reconstruction with variational quantum circuit

+

Preprint — arXiv:2507.01246

+
+
+
  • Introduces a quantum machine learning approach to tomography for high-dimensional states.
  • Benchmarks loss landscapes, embedding strategies, and optimizer behavior across noise models.
  • Highlights scalability results enabled by custom experiment orchestration.
+
+ +
+
+
+

A Very Quick Guide to Special Relativity

+

Published — 2021

-
    -
  • Restarted the university chapter, launched a new website, and grew membership beyond 145 students.
  • -
  • Led workshops focused on shell scripting, AI, quantum computing, and heuristic search techniques.
  • -
+
  • Authored and published an accessible primer covering time dilation through mass–energy equivalence.
  • Focused on first-principles explanations for students exploring modern physics.

Relevant Courses

- -
- Graduate Quantum Computing (CMSC657) - Computer Science Honors Seminar - Differentiable Programming for Agentic AI (CMSC498Z) - Natural Language Processing (CMSC470) - Data Science (CMSC320) - Design & Analysis of Algorithms (CMSC451) - Object-Oriented Programming in Java (CMSC132) - Applied Probability & Statistics (STAT400) - Honors Advanced Modern Physics (PHYS400) - Quantum Mechanics II (PHYS402) - Multivariate Calculus - Differential Equations + Graduate Quantum Computing (CMSC657) + Computer Science Honors Seminar + Differentiable Programming for Agentic AI (CMSC498Z) + Natural Language Processing (CMSC470) + Data Science (CMSC320) + Design & Analysis of Algorithms (CMSC451) + Object-Oriented Programming in Java (CMSC132) + Applied Probability & Statistics (STAT400) + Honors Advanced Modern Physics (PHYS400) + Quantum Mechanics II (PHYS402) + Multivariate Calculus + Differential Equations
-
No courses match that search. Try a broader keyword.
-
- - - + +
+ No entries match that search. Try a broader keyword. +
+
+ + + diff --git a/resume.json b/resume.json index 8e43b7e..7476bde 100644 --- a/resume.json +++ b/resume.json @@ -13,23 +13,41 @@ { "id": "809dd6f7-7700-43ae-ac87-ae2ec79ab4ef", "role": "Researcher", - "company": "CAAR REU (QuICS)", + "company": "CAAR REU", "dates": "Jun 2025 – Aug 2025", + "subtitle": "Combinatorics, Algorithms, and AI for Real Problems", + "location": "QuICS · University of Maryland", + "tech": [ + "Python", + "Galois", + "NumPy", + "Magma Math", + "SageMath" + ], "bullets": [ - "Created families of fault-tolerant CSS quantum error-correcting codes for qudits.", - "Proved transversal Clifford and T gate support using finite field and QEC theory.", - "Built parallel Python tooling (Galois, NumPy, Magma, SageMath) to test self-orthogonality and distance." + "Designed novel fault-tolerant CSS quantum error-correcting codes for qudits inspired by quadratic residue codes.", + "Established code families with transversal Clifford and T gate support through finite field and QEC theory proofs.", + "Implemented parallel Python tooling to validate self-orthogonality and distance properties across large search spaces." ] }, { "id": "4ee96812-4a42-4fce-ab41-223dc3237ed1", "role": "Undergraduate Researcher", - "company": "Bright Beams Collective (IREAP)", + "company": "Bright Beams Collective", "dates": "Sep 2023 – Dec 2024", + "subtitle": "IREAP Research Experience for Undergraduates", + "location": "Institute for Research in Electronics and Applied Physics", + "tech": [ + "MAD-X", + "Elegant", + "Fusion 360", + "MATLAB", + "Ansys Workbench" + ], "bullets": [ - "Designed machine learning and gradient optimizers for particle accelerator beamline tuning.", - "Ran MAD-X and Elegant simulations to evaluate lattice stability and beam quality.", - "Produced Fusion 360 and Ansys visualizations for educational and technical presentations." + "Built custom machine learning and gradient-based optimizers to derive design parameters for a planned beamline.", + "Ran accelerator simulations to analyze lattice stability and beam quality under varied operating configurations.", + "Produced animations of betatron motion for outreach presentations and technical discussions." ] }, { @@ -37,10 +55,15 @@ "role": "Software Engineering Intern", "company": "JODO PAY", "dates": "Jun 2022 – Jul 2022", + "subtitle": "Invoicing System Automation", + "tech": [ + "JavaScript", + "TypeScript", + "Google Apps Script" + ], "bullets": [ - "Automated invoice generation and delivery via Google Workspace APIs.", - "Reduced manual processing by approximately 40 staff hours each week.", - "Hardened error handling and template management with TypeScript and Apps Script." + "Automated invoice generation and dispatch for clients, reducing manual processing by 40 staff hours each week.", + "Integrated Google Workspace APIs to manage templates, customer data, and error handling workflows." ] } ], @@ -49,61 +72,137 @@ "id": "28f564fa-8ac8-4720-bf5c-cf999186cf6d", "name": "Quantum State Tomography via QML", "timeline": "Sep 2024 – Jul 2025", + "subtitle": "GitHub · github.com/Mihir-Null", + "tech": [ + "Python", + "Qiskit", + "Aer", + "MPI", + "Numba", + "PyTorch" + ], "bullets": [ - "Co-developed variational circuit tomography with custom losses and embeddings.", - "Launched 2,000+ experiments across multi-GPU clusters via bespoke orchestration tools.", - "Co-author on \"Quantum state reconstruction with variational quantum circuit\" (arXiv:2507.01246)." + "Co-developed a variational circuit tomography approach, exploring loss landscapes, embedding strategies, and optimizers.", + "Executed 2,000+ experiments across multi-GPU clusters with a custom orchestrator for reproducible benchmarking.", + "Co-authored \"Quantum state reconstruction with variational quantum circuit\" (arXiv:2507.01246)." ] }, { "id": "25c4d9b7-ea24-4af7-8cac-f1855743abc6", "name": "MIT iQuHack — QuEra Challenge", "timeline": "Feb 2025", + "subtitle": "Honorable Mention", + "tech": [ + "Python", + "Qiskit", + "Cirq", + "Bloqade", + "PyTorch", + "TensorFlow Quantum" + ], "bullets": [ - "Built a compilation pipeline translating QAOA and error-correcting circuits into neutral atom instructions.", - "Optimized pulse schedules using Qiskit, Cirq, Bloqade, PyTorch, and TensorFlow Quantum.", - "Team earned an Honorable Mention from QuEra." + "Designed a compilation pipeline mapping diverse quantum circuits — including QAOA and Steane codes — to QuEra hardware.", + "Optimized pulse sequences for neutral atom instruction sets, contributing to the team's honorable mention finish." ] }, { - "id": "e00b83aa-277b-4379-96aa-989754fefbcb", - "name": "Club Administration Automation", - "timeline": "Nov 2024 – Feb 2025", + "id": "5a0897f1-4b2c-4dd4-a68e-8a324822f425", + "name": "Quantum Machine Learning Research", + "timeline": "Aug 2023 – Dec 2024", + "subtitle": "Undergraduate Research Portfolio", + "tech": [ + "Python", + "Qiskit", + "Cirq", + "PennyLane", + "Q#" + ], "bullets": [ - "Automated Discord announcements, email campaigns, Instagram posts, and room reservations.", - "Integrated Google APIs, Discord.py, Selenium, and OAuth2 for end-to-end workflows.", - "Adopted by multiple university clubs to reduce administrative effort." + "Implemented quantum image processing with parameterized circuit kernels integrated into CNN architectures.", + "Created a hybrid transitional optimizer to mitigate barren plateaus in QAOA, presented at the FYIRE Summit 2024." ] }, { - "id": "5a0897f1-4b2c-4dd4-a68e-8a324822f425", - "name": "Quantum ML Research Collection", - "timeline": "Aug 2023 – Dec 2024", + "id": "81fadb40-43da-4f62-805a-686b65bdf5f8", + "name": "Terrapin Rocket Team — Kalman Filters", + "timeline": "Aug 2023 – Jan 2024", + "subtitle": "Guidance, Navigation, and Control", + "tech": [ + "C", + "C++", + "MATLAB" + ], "bullets": [ - "Crafted quantum image processing pipelines with parameterized kernels inside CNNs.", - "Designed a hybrid transitional optimizer that mitigates barren plateaus in QAOA.", - "Presented findings at the 2024 First Year Innovation & Research Experience Summit." + "Developed six- and nine-state Kalman filters fusing multi-sensor telemetry for rocket position estimation.", + "Supported the team's winning entry at the 2024 Spaceport America Cup." + ] + }, + { + "id": "6fd996da-74d7-4e3c-9ac0-dc6a23d484d4", + "name": "Robotics @ UMD — Computer Vision", + "timeline": "Aug 2023 – Jan 2024", + "subtitle": "Testudog Automation", + "tech": [ + "Python", + "OpenCV", + "scikit-learn" + ], + "bullets": [ + "Developed Haar cascade pipelines for the Testudog robotics platform deployed on a Jetson-powered Boston Dynamics Spot." + ] + }, + { + "id": "e00b83aa-277b-4379-96aa-989754fefbcb", + "name": "Club Administration Automation", + "timeline": "Nov 2024 – Feb 2025", + "subtitle": "Workflow Automation Suite", + "tech": [ + "Python", + "Selenium", + "Discord.py", + "REST APIs", + "OAuth 2.0" + ], + "bullets": [ + "Automated Discord announcements, email campaigns, Instagram publishing, and room reservations for university clubs.", + "Currently deployed across multiple organizations to streamline administrative overhead." ] }, { "id": "25053703-72e2-492d-bf8b-4a5953b6160e", "name": "Housing Market Analysis", "timeline": "Jun 2024 – Jul 2024", + "subtitle": "Predictive Pricing Models", + "tech": [ + "Python", + "Pandas", + "SciPy", + "NumPy", + "scikit-learn", + "SQL" + ], "bullets": [ - "Built feedforward neural networks to predict housing prices from public datasets.", - "Applied PCA and statistical analysis to surface high-signal features.", - "Combined web-scraped listings with census data to improve model robustness." + "Trained feedforward neural networks for price prediction using engineered features derived from public listings and census data.", + "Applied PCA and statistical analysis to identify high-signal attributes and reduce overfitting." ] }, { "id": "bdf83287-24aa-4f55-9a07-e11d6e08e319", - "name": "Indie Game Development", + "name": "Independent Game Development", "timeline": "2020 – 2023", + "subtitle": "National Game Jam Winner", + "tech": [ + "C#", + "C++", + "Unity", + "Unreal Engine", + "Blender", + "Adobe Suite" + ], "bullets": [ - "Shipped two action platformers with custom soft-body simulation via Unity/Unreal.", - "2nd place, 2021 Mindbox National Design Championship (Game Design).", - "National finalist, 2020 Mindbox Design Championship (Game Development).", - "Authored a procedural map generation toolkit for arbitrary tilemaps." + "Published two action platformers, including a custom 2D soft-body simulation available via Two Guys Studios on itch.io.", + "Placed second in the 2021 Mindbox National Design Championship; finalist in the 2020 edition.", + "Built a procedural map generation toolkit leveraging noise algorithms and custom pathfinding." ] } ], @@ -113,6 +212,7 @@ "school": "University of Maryland — College Park", "gpa": "3.974", "graduation": "May 2027", + "subtitle": "Computer Science (Honors) · Physics (Honors)", "degrees": [ "B.S. Computer Science (Honors)", "B.S. Physics (Honors)" @@ -124,12 +224,17 @@ ], "coursework": [ "Graduate Quantum Computing (CMSC657)", + "Computer Science Honors Seminar", "Differentiable Programming for Agentic AI (CMSC498Z)", "Natural Language Processing (CMSC470)", "Data Science (CMSC320)", "Design & Analysis of Algorithms (CMSC451)", + "Object-Oriented Programming in Java (CMSC132)", + "Applied Probability & Statistics (STAT400)", "Honors Advanced Modern Physics (PHYS400)", - "Quantum Mechanics II (PHYS402)" + "Quantum Mechanics II (PHYS402)", + "Multivariate Calculus", + "Differential Equations" ] } ], @@ -140,8 +245,8 @@ "org": "Quantum Coalition", "dates": "Jan 2024 – Present", "bullets": [ - "Co-organized the QRISE research competition with 200+ global participants.", - "Partnered with the UN and ITU to deliver the QC-FLIQ hackathon (500+ attendees)." + "Co-organized the QRISE research competition with 200+ international participants.", + "Partnered with the UN and ITU to deliver the QC-FLIQ hackathon for the International Year of Quantum (500+ attendees)." ] }, { @@ -150,8 +255,8 @@ "org": "Undergraduate Quantum Association", "dates": "Jan 2025 – Present", "bullets": [ - "Led programming, partnerships, and outreach after four years as an officer.", - "Hosted the Quantum Leap Career Nexus with 240+ attendees across IBM, Microsoft, Amazon Braket, IonQ, and more." + "Led organizational strategy, programming, and outreach after serving as an officer since 2020.", + "Produced the Quantum Leap Career Nexus with 240+ attendees and partners including IBM, Microsoft, and IonQ." ] }, { @@ -160,8 +265,8 @@ "org": "ACM@UMD", "dates": "Sep 2023 – Present", "bullets": [ - "Restarted the official student chapter and launched a new web presence.", - "Grew membership to 145+ students with workshops on shell scripting, AI, and quantum computing." + "Restarted the university chapter, launched a new website, and grew membership beyond 145 students.", + "Led workshops focused on shell scripting, AI, quantum computing, and heuristic search techniques." ] } ], @@ -181,7 +286,7 @@ "title": "A Very Quick Guide to Special Relativity", "status": "Published — 2021", "bullets": [ - "Wrote and published an accessible primer covering time dilation through mass-energy equivalence.", + "Authored and published an accessible primer covering time dilation through mass–energy equivalence.", "Focused on first-principles explanations for students exploring modern physics." ] } diff --git a/resume.org b/resume.org index b380668..81e4809 100644 --- a/resume.org +++ b/resume.org @@ -9,23 +9,24 @@ # CANONICAL RESUME SOURCE — SINGLE SOURCE OF TRUTH # # This file is the one authoritative home for every résumé fact. The terminal -# (ls / sumfetch / summary) and the plain résumé page both read `resume.json`, -# which is a DECLARED MIRROR generated from this file by: +# (ls / sumfetch / summary) and the plain résumé page (resume.html) are both +# generated from `resume.json`, which is a DECLARED MIRROR of this file: # -# node scripts/org-to-json.mjs resume.org resume.json +# node scripts/org-to-json.mjs resume.org resume.json (org -> json) +# node scripts/build-resume-html.mjs (json -> resume.html) # -# Flow is one-way: org -> json. Never hand-edit resume.json; edit THIS file and -# regenerate. CI re-runs the parser and fails on any diff (the canary). +# Flow is one-way. Never hand-edit resume.json or public/resume.html; edit THIS +# file and regenerate. CI re-runs the parser and fails on any diff (the canary). # -# SCHEMA the parser expects (RESUME_SCHEMA: 1): -# * Section top-level headings name the sections below. -# ** Item each item is a roam node: it carries its own :ID: and -# typed scalar fields in a :PROPERTIES: drawer. -# - bullet plain list items become the item's `bullets` array. -# - tag :: value tagged bullets route into named arrays (education uses -# `degree`, `honor`, `course`). -# Add a new experience/project/etc. by copying an item heading, minting a fresh -# :ID: (`org-id-get-create` in Emacs, or `uuidgen`), and filling the drawer. +# SCHEMA (RESUME_SCHEMA: 1): +# * Section top-level headings name the sections below. +# ** Item each item is a roam node: its own :ID: + scalar fields in +# a :PROPERTIES: drawer (role/company/dates/subtitle/…). +# - bullet plain list items become the item's `bullets` array. +# - tech :: X tech tags for a card (experience/projects). +# - degree/honor/course :: X education sub-lists. +# Add an item by copying an item heading, minting a fresh :ID: (org-id-get-create +# or uuidgen), and filling the drawer + bullets. # ============================================================================ * Profile @@ -48,102 +49,180 @@ hardware, game development and literature. :PROPERTIES: :ID: 809dd6f7-7700-43ae-ac87-ae2ec79ab4ef :ROLE: Researcher -:COMPANY: CAAR REU (QuICS) +:COMPANY: CAAR REU +:SUBTITLE: Combinatorics, Algorithms, and AI for Real Problems +:LOCATION: QuICS · University of Maryland :DATES: Jun 2025 – Aug 2025 :END: -- Created families of fault-tolerant CSS quantum error-correcting codes for qudits. -- Proved transversal Clifford and T gate support using finite field and QEC theory. -- Built parallel Python tooling (Galois, NumPy, Magma, SageMath) to test self-orthogonality and distance. +- tech :: Python +- tech :: Galois +- tech :: NumPy +- tech :: Magma Math +- tech :: SageMath +- Designed novel fault-tolerant CSS quantum error-correcting codes for qudits inspired by quadratic residue codes. +- Established code families with transversal Clifford and T gate support through finite field and QEC theory proofs. +- Implemented parallel Python tooling to validate self-orthogonality and distance properties across large search spaces. ** Undergraduate Researcher — Bright Beams Collective (IREAP) :PROPERTIES: :ID: 4ee96812-4a42-4fce-ab41-223dc3237ed1 :ROLE: Undergraduate Researcher -:COMPANY: Bright Beams Collective (IREAP) +:COMPANY: Bright Beams Collective +:SUBTITLE: IREAP Research Experience for Undergraduates +:LOCATION: Institute for Research in Electronics and Applied Physics :DATES: Sep 2023 – Dec 2024 :END: -- Designed machine learning and gradient optimizers for particle accelerator beamline tuning. -- Ran MAD-X and Elegant simulations to evaluate lattice stability and beam quality. -- Produced Fusion 360 and Ansys visualizations for educational and technical presentations. +- tech :: MAD-X +- tech :: Elegant +- tech :: Fusion 360 +- tech :: MATLAB +- tech :: Ansys Workbench +- Built custom machine learning and gradient-based optimizers to derive design parameters for a planned beamline. +- Ran accelerator simulations to analyze lattice stability and beam quality under varied operating configurations. +- Produced animations of betatron motion for outreach presentations and technical discussions. ** Software Engineering Intern — JODO PAY :PROPERTIES: :ID: 9ca345ca-c318-4d70-aa4d-8542bc322589 :ROLE: Software Engineering Intern :COMPANY: JODO PAY +:SUBTITLE: Invoicing System Automation :DATES: Jun 2022 – Jul 2022 :END: -- Automated invoice generation and delivery via Google Workspace APIs. -- Reduced manual processing by approximately 40 staff hours each week. -- Hardened error handling and template management with TypeScript and Apps Script. +- tech :: JavaScript +- tech :: TypeScript +- tech :: Google Apps Script +- Automated invoice generation and dispatch for clients, reducing manual processing by 40 staff hours each week. +- Integrated Google Workspace APIs to manage templates, customer data, and error handling workflows. * Projects ** Quantum State Tomography via QML :PROPERTIES: :ID: 28f564fa-8ac8-4720-bf5c-cf999186cf6d :NAME: Quantum State Tomography via QML +:SUBTITLE: GitHub · github.com/Mihir-Null :TIMELINE: Sep 2024 – Jul 2025 :END: -- Co-developed variational circuit tomography with custom losses and embeddings. -- Launched 2,000+ experiments across multi-GPU clusters via bespoke orchestration tools. -- Co-author on "Quantum state reconstruction with variational quantum circuit" (arXiv:2507.01246). +- tech :: Python +- tech :: Qiskit +- tech :: Aer +- tech :: MPI +- tech :: Numba +- tech :: PyTorch +- Co-developed a variational circuit tomography approach, exploring loss landscapes, embedding strategies, and optimizers. +- Executed 2,000+ experiments across multi-GPU clusters with a custom orchestrator for reproducible benchmarking. +- Co-authored "Quantum state reconstruction with variational quantum circuit" (arXiv:2507.01246). ** MIT iQuHack — QuEra Challenge :PROPERTIES: :ID: 25c4d9b7-ea24-4af7-8cac-f1855743abc6 :NAME: MIT iQuHack — QuEra Challenge +:SUBTITLE: Honorable Mention :TIMELINE: Feb 2025 :END: -- Built a compilation pipeline translating QAOA and error-correcting circuits into neutral atom instructions. -- Optimized pulse schedules using Qiskit, Cirq, Bloqade, PyTorch, and TensorFlow Quantum. -- Team earned an Honorable Mention from QuEra. +- tech :: Python +- tech :: Qiskit +- tech :: Cirq +- tech :: Bloqade +- tech :: PyTorch +- tech :: TensorFlow Quantum +- Designed a compilation pipeline mapping diverse quantum circuits — including QAOA and Steane codes — to QuEra hardware. +- Optimized pulse sequences for neutral atom instruction sets, contributing to the team's honorable mention finish. + +** Quantum Machine Learning Research +:PROPERTIES: +:ID: 5a0897f1-4b2c-4dd4-a68e-8a324822f425 +:NAME: Quantum Machine Learning Research +:SUBTITLE: Undergraduate Research Portfolio +:TIMELINE: Aug 2023 – Dec 2024 +:END: +- tech :: Python +- tech :: Qiskit +- tech :: Cirq +- tech :: PennyLane +- tech :: Q# +- Implemented quantum image processing with parameterized circuit kernels integrated into CNN architectures. +- Created a hybrid transitional optimizer to mitigate barren plateaus in QAOA, presented at the FYIRE Summit 2024. + +** Terrapin Rocket Team — Kalman Filters +:PROPERTIES: +:ID: 81fadb40-43da-4f62-805a-686b65bdf5f8 +:NAME: Terrapin Rocket Team — Kalman Filters +:SUBTITLE: Guidance, Navigation, and Control +:TIMELINE: Aug 2023 – Jan 2024 +:END: +- tech :: C +- tech :: C++ +- tech :: MATLAB +- Developed six- and nine-state Kalman filters fusing multi-sensor telemetry for rocket position estimation. +- Supported the team's winning entry at the 2024 Spaceport America Cup. + +** Robotics @ UMD — Computer Vision +:PROPERTIES: +:ID: 6fd996da-74d7-4e3c-9ac0-dc6a23d484d4 +:NAME: Robotics @ UMD — Computer Vision +:SUBTITLE: Testudog Automation +:TIMELINE: Aug 2023 – Jan 2024 +:END: +- tech :: Python +- tech :: OpenCV +- tech :: scikit-learn +- Developed Haar cascade pipelines for the Testudog robotics platform deployed on a Jetson-powered Boston Dynamics Spot. ** Club Administration Automation :PROPERTIES: :ID: e00b83aa-277b-4379-96aa-989754fefbcb :NAME: Club Administration Automation +:SUBTITLE: Workflow Automation Suite :TIMELINE: Nov 2024 – Feb 2025 :END: -- Automated Discord announcements, email campaigns, Instagram posts, and room reservations. -- Integrated Google APIs, Discord.py, Selenium, and OAuth2 for end-to-end workflows. -- Adopted by multiple university clubs to reduce administrative effort. - -** Quantum ML Research Collection -:PROPERTIES: -:ID: 5a0897f1-4b2c-4dd4-a68e-8a324822f425 -:NAME: Quantum ML Research Collection -:TIMELINE: Aug 2023 – Dec 2024 -:END: -- Crafted quantum image processing pipelines with parameterized kernels inside CNNs. -- Designed a hybrid transitional optimizer that mitigates barren plateaus in QAOA. -- Presented findings at the 2024 First Year Innovation & Research Experience Summit. +- tech :: Python +- tech :: Selenium +- tech :: Discord.py +- tech :: REST APIs +- tech :: OAuth 2.0 +- Automated Discord announcements, email campaigns, Instagram publishing, and room reservations for university clubs. +- Currently deployed across multiple organizations to streamline administrative overhead. ** Housing Market Analysis :PROPERTIES: :ID: 25053703-72e2-492d-bf8b-4a5953b6160e :NAME: Housing Market Analysis +:SUBTITLE: Predictive Pricing Models :TIMELINE: Jun 2024 – Jul 2024 :END: -- Built feedforward neural networks to predict housing prices from public datasets. -- Applied PCA and statistical analysis to surface high-signal features. -- Combined web-scraped listings with census data to improve model robustness. +- tech :: Python +- tech :: Pandas +- tech :: SciPy +- tech :: NumPy +- tech :: scikit-learn +- tech :: SQL +- Trained feedforward neural networks for price prediction using engineered features derived from public listings and census data. +- Applied PCA and statistical analysis to identify high-signal attributes and reduce overfitting. -** Indie Game Development +** Independent Game Development :PROPERTIES: :ID: bdf83287-24aa-4f55-9a07-e11d6e08e319 -:NAME: Indie Game Development +:NAME: Independent Game Development +:SUBTITLE: National Game Jam Winner :TIMELINE: 2020 – 2023 :END: -- Shipped two action platformers with custom soft-body simulation via Unity/Unreal. -- 2nd place, 2021 Mindbox National Design Championship (Game Design). -- National finalist, 2020 Mindbox Design Championship (Game Development). -- Authored a procedural map generation toolkit for arbitrary tilemaps. +- tech :: C# +- tech :: C++ +- tech :: Unity +- tech :: Unreal Engine +- tech :: Blender +- tech :: Adobe Suite +- Published two action platformers, including a custom 2D soft-body simulation available via Two Guys Studios on itch.io. +- Placed second in the 2021 Mindbox National Design Championship; finalist in the 2020 edition. +- Built a procedural map generation toolkit leveraging noise algorithms and custom pathfinding. * Education ** University of Maryland — College Park :PROPERTIES: :ID: 86d31d81-d7e2-4035-9441-54badb1724a7 :SCHOOL: University of Maryland — College Park +:SUBTITLE: Computer Science (Honors) · Physics (Honors) :GPA: 3.974 :GRADUATION: May 2027 :END: @@ -153,12 +232,17 @@ hardware, game development and literature. - honor :: John D. Gannon Scholarship — Computer Science - honor :: Dean's List — Every Semester - course :: Graduate Quantum Computing (CMSC657) +- course :: Computer Science Honors Seminar - course :: Differentiable Programming for Agentic AI (CMSC498Z) - course :: Natural Language Processing (CMSC470) - course :: Data Science (CMSC320) - course :: Design & Analysis of Algorithms (CMSC451) +- course :: Object-Oriented Programming in Java (CMSC132) +- course :: Applied Probability & Statistics (STAT400) - course :: Honors Advanced Modern Physics (PHYS400) - course :: Quantum Mechanics II (PHYS402) +- course :: Multivariate Calculus +- course :: Differential Equations * Organizations ** Industry Chair — Quantum Coalition @@ -168,8 +252,8 @@ hardware, game development and literature. :ORG: Quantum Coalition :DATES: Jan 2024 – Present :END: -- Co-organized the QRISE research competition with 200+ global participants. -- Partnered with the UN and ITU to deliver the QC-FLIQ hackathon (500+ attendees). +- Co-organized the QRISE research competition with 200+ international participants. +- Partnered with the UN and ITU to deliver the QC-FLIQ hackathon for the International Year of Quantum (500+ attendees). ** President — Undergraduate Quantum Association :PROPERTIES: @@ -178,8 +262,8 @@ hardware, game development and literature. :ORG: Undergraduate Quantum Association :DATES: Jan 2025 – Present :END: -- Led programming, partnerships, and outreach after four years as an officer. -- Hosted the Quantum Leap Career Nexus with 240+ attendees across IBM, Microsoft, Amazon Braket, IonQ, and more. +- Led organizational strategy, programming, and outreach after serving as an officer since 2020. +- Produced the Quantum Leap Career Nexus with 240+ attendees and partners including IBM, Microsoft, and IonQ. ** Co-President — ACM@UMD :PROPERTIES: @@ -188,8 +272,8 @@ hardware, game development and literature. :ORG: ACM@UMD :DATES: Sep 2023 – Present :END: -- Restarted the official student chapter and launched a new web presence. -- Grew membership to 145+ students with workshops on shell scripting, AI, and quantum computing. +- Restarted the university chapter, launched a new website, and grew membership beyond 145 students. +- Led workshops focused on shell scripting, AI, quantum computing, and heuristic search techniques. * Publications ** Quantum state reconstruction with variational quantum circuit @@ -208,7 +292,7 @@ hardware, game development and literature. :TITLE: A Very Quick Guide to Special Relativity :STATUS: Published — 2021 :END: -- Wrote and published an accessible primer covering time dilation through mass-energy equivalence. +- Authored and published an accessible primer covering time dilation through mass–energy equivalence. - Focused on first-principles explanations for students exploring modern physics. * Skills diff --git a/resume.template.html b/resume.template.html new file mode 100644 index 0000000..bb4eee8 --- /dev/null +++ b/resume.template.html @@ -0,0 +1,450 @@ + + + + + + Mihir Talati – Resume + + + + + +
+
+

{{NAME}}

+

{{HEADER_SUB}}

+
+ +
+ + +
+ + {{SECTIONS}} + +
+ No entries match that search. Try a broader keyword. +
+
+ + + + diff --git a/scripts/build-resume-html.mjs b/scripts/build-resume-html.mjs new file mode 100644 index 0000000..5be6b82 --- /dev/null +++ b/scripts/build-resume-html.mjs @@ -0,0 +1,248 @@ +#!/usr/bin/env node +// ============================================================================= +// Module contract (praxis: Contract-First Modules · Tangle Discipline) +// +// provides — render the plain résumé page (public/resume.html) from the +// resume.json mirror + resume.template.html. One concern: json -> +// styled HTML. The template owns the design (hand-maintained); the +// content is generated so the plain page and terminal share one +// source (Single Source of Truth). +// requires — resume.json (generated from resume.org), resume.template.html. +// tests must show — +// * every section renders one card per item with its bullets/tech/meta; +// * courses render as filterable pills; each card/pill has data-search; +// * output is byte-stable so the CI canary (regen + diff) only trips on +// real drift; text is HTML-escaped; arXiv ids linkify. +// +// Flow is ONE-WAY: resume.json -> public/resume.html. Never hand-edit the +// generated page; edit resume.org (content) or resume.template.html (design). +// Usage: node scripts/build-resume-html.mjs [--check] +// ============================================================================= + +import { readFileSync, writeFileSync } from 'node:fs'; + +const SRC = 'resume.json'; +const TEMPLATE = 'resume.template.html'; +const OUT = 'public/resume.html'; + +const esc = (s = '') => + String(s) + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"'); + +// arXiv ids become links; run after escaping (ids are digits/dots, escape-safe). +const linkifyArxiv = (s) => + s.replace( + /arXiv:(\d{4}\.\d{4,5})/gi, + (_m, id) => `arXiv:${id}`, + ); + +const searchKey = (...parts) => + esc( + parts.flat().filter(Boolean).join(' ').toLowerCase().replace(/\s+/g, ' '), + ); + +const tagList = (tech) => + tech && tech.length + ? `\n ` + : ''; + +const bulletList = (bullets) => + bullets && bullets.length + ? `\n ` + : ''; + +const metaBlock = (lines) => { + const kept = lines.filter(Boolean); + if (!kept.length) return ''; + return `\n
${kept + .map((l) => `${esc(l)}`) + .join('')}
`; +}; + +const card = ({ title, subtitle, meta = [], tech, bullets, search }) => ` +
+
+
+

${esc(title)}

${ + subtitle ? `\n

${esc(subtitle)}

` : '' +} +
${metaBlock(meta)} +
${tagList(tech)}${bulletList(bullets)} +
`; + +const section = (id, heading, inner) => + `
\n

${esc( + heading, + )}

\n${inner}\n
`; + +function render(data) { + const { + profile, + experience, + projects, + organizations, + publications, + education, + } = data; + const edu = education[0] || {}; + + const eduCard = card({ + title: edu.school, + subtitle: edu.subtitle, + meta: [`Expected Graduation · ${edu.graduation}`, `GPA · ${edu.gpa}`], + bullets: null, + search: searchKey(edu.school, edu.subtitle, edu.degrees, edu.honors), + }); + const eduScholar = + edu.honors && edu.honors.length + ? `\n
\n

Scholarships & Distinctions

\n
    ${edu.honors + .map((h) => `
  • ${esc(h)}
  • `) + .join('')}
\n
` + : ''; + // inject scholarships before the closing of the education card + const eduHtml = eduCard.replace( + '\n ', + `${eduScholar}\n `, + ); + const educationSection = section( + 'education', + 'Education', + `
${eduHtml}\n
`, + ); + + const experienceSection = section( + 'work', + 'Work Experience', + experience + .map((e) => + card({ + title: `${e.role} · ${e.company}`, + subtitle: e.subtitle, + meta: [e.dates, e.location], + tech: e.tech, + bullets: e.bullets, + search: searchKey( + e.role, + e.company, + e.subtitle, + e.location, + e.tech, + e.bullets, + ), + }), + ) + .join('\n'), + ); + + const projectsSection = section( + 'projects', + 'Projects', + projects + .map((p) => + card({ + title: p.name, + subtitle: p.subtitle, + meta: [p.timeline], + tech: p.tech, + bullets: p.bullets, + search: searchKey(p.name, p.subtitle, p.tech, p.bullets), + }), + ) + .join('\n'), + ); + + const orgsSection = section( + 'organizations', + 'Organizations', + organizations + .map((o) => + card({ + title: `${o.role} · ${o.org}`, + meta: [o.dates], + bullets: o.bullets, + search: searchKey(o.role, o.org, o.bullets), + }), + ) + .join('\n'), + ); + + const pubsSection = section( + 'publications', + 'Publications', + publications + .map((p) => + card({ + title: p.title, + subtitle: p.status, + bullets: p.bullets, + search: searchKey(p.title, p.status, p.bullets), + }), + ) + .join('\n'), + ); + + const pills = (edu.coursework || []) + .map( + (c) => + ` ${esc(c)}`, + ) + .join('\n'); + const coursesSection = section( + 'courses', + 'Relevant Courses', + `
\n
\n${pills}\n
\n
`, + ); + + const sections = [ + educationSection, + experienceSection, + projectsSection, + orgsSection, + pubsSection, + coursesSection, + ].join('\n\n'); + + const headerSub = `Dual Degree · ${(edu.degrees || []).join(' & ')} · GPA ${ + edu.gpa + }`; + + return readFileSync(TEMPLATE, 'utf8') + .replace('{{NAME}}', esc(profile.name)) + .replace('{{HEADER_SUB}}', esc(headerSub)) + .replace('{{SECTIONS}}', sections); +} + +function main() { + const check = process.argv.includes('--check'); + const html = render(JSON.parse(readFileSync(SRC, 'utf8'))); + + if (check) { + let current = ''; + try { + current = readFileSync(OUT, 'utf8'); + } catch { + /* missing counts as drift */ + } + if (current !== html) { + process.stderr.write( + `DRIFT: ${OUT} is out of sync. Run: node scripts/build-resume-html.mjs\n`, + ); + process.exit(1); + } + process.stdout.write(`ok: ${OUT} matches ${SRC}\n`); + return; + } + writeFileSync(OUT, html); + process.stdout.write(`wrote ${OUT} from ${SRC}\n`); +} + +main(); diff --git a/scripts/org-to-json.mjs b/scripts/org-to-json.mjs index b97010c..93f4f65 100644 --- a/scripts/org-to-json.mjs +++ b/scripts/org-to-json.mjs @@ -28,17 +28,35 @@ const GENERATED_NOTE = 'Regenerate: node scripts/org-to-json.mjs'; // Section registry — the fixed schema the parser understands. +// `fields` are optional scalar drawer props (included only when present); +// `tagged` routes `- k :: v` bullets into named arrays; `list: false` means +// the item has no free-form bullets array (education is all tagged). const SECTIONS = { profile: { kind: 'profile' }, - experience: { kind: 'items', fields: ['role', 'company', 'dates'] }, - projects: { kind: 'items', fields: ['name', 'timeline'] }, + experience: { + kind: 'items', + fields: ['role', 'company', 'dates', 'subtitle', 'location'], + tagged: { tech: 'tech' }, + list: true, + }, + projects: { + kind: 'items', + fields: ['name', 'timeline', 'subtitle'], + tagged: { tech: 'tech' }, + list: true, + }, education: { kind: 'items', - fields: ['school', 'gpa', 'graduation'], + fields: ['school', 'gpa', 'graduation', 'subtitle'], tagged: { degree: 'degrees', honor: 'honors', course: 'coursework' }, + list: false, + }, + organizations: { + kind: 'items', + fields: ['role', 'org', 'dates'], + list: true, }, - organizations: { kind: 'items', fields: ['role', 'org', 'dates'] }, - publications: { kind: 'items', fields: ['title', 'status'] }, + publications: { kind: 'items', fields: ['title', 'status'], list: true }, skills: { kind: 'skills' }, }; @@ -76,7 +94,10 @@ function makeItem(cfg, props, bullets) { plain.push(raw); } } - if (!cfg.tagged) item.bullets = plain; + // Drop empty tagged arrays so optional groups (e.g. tech) don't add noise. + for (const key of Object.values(tagged)) + if (item[key].length === 0) delete item[key]; + if (cfg.list) item.bullets = plain; return item; } diff --git a/src/utils/resume.ts b/src/utils/resume.ts index c43b351..a5fdf7e 100644 --- a/src/utils/resume.ts +++ b/src/utils/resume.ts @@ -17,12 +17,17 @@ export type Experience = { role: string; company: string; dates: string; + subtitle?: string; + location?: string; + tech?: string[]; bullets: string[]; }; export type Project = { id?: string; name: string; timeline: string; + subtitle?: string; + tech?: string[]; bullets: string[]; }; export type Education = { @@ -30,6 +35,7 @@ export type Education = { school: string; gpa: string; graduation: string; + subtitle?: string; degrees: string[]; honors: string[]; coursework: string[];