Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,8 @@
.claude
.idea
.venv/
__pycache__/
*.pyc
test/exports/
test/out/
test/out/
*_raw
38 changes: 21 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# WebResume 🌐 💻 📄

A modern, interactive web-based resume — dynamic content loading, dark mode, live editing, and print-ready layout.
A modern, interactive web-based resume - dynamic content loading, dark mode, live editing, and print-ready layout.

[![Live Site](https://img.shields.io/badge/🔗_Live_Site-hellosaumil.github.io/WebResume-blue)](https://hellosaumil.github.io/WebResume)
[![Latest Version](https://img.shields.io/badge/📌_Latest-/v4-purple)](https://hellosaumil.github.io/WebResume/v4/)
Expand All @@ -17,48 +17,50 @@ A modern, interactive web-based resume — dynamic content loading, dark mode, l

### The Why?
On the onset of 2026, I wanted to revamp my resume since I last updated it in 2020 after my post-graduation.
My resume lived in an `Apple Pages` template I hand-crafted in 2017 — custom fonts, pixel-perfect spacing, the best I could do at the time. Five years of "just one more tweak" later, spending 20 mins fixing a single bullet point or adding a new project URL was taking more time than it should.
My resume lived in an `Apple Pages` template I hand-crafted in 2017 - custom fonts, pixel-perfect spacing, the best I could do at the time. Five years of "just one more tweak" later, spending 20 mins fixing a single bullet point or adding a new project URL was taking more time than it should.
**I wanted something local, easy to edit, maintain, and version control. 💭**
`Google Docs`? Been there, done that, moving text-boxes is not fun. `LaTeX`? Great until you want `_italic-bold-link_` on the same line without selling your soul. `MS Word`? ...let's not.

### The When?
Over the holidays of Christmas 2025, I got my hands on Google's Project Antigravity and vibe-coded a Solar System Android XR app from scratch for my all-new Galaxy XR headset — in a weekend.
Over the holidays of Christmas 2025, I got my hands on Google's Project Antigravity and vibe-coded a Solar System Android XR app from scratch for my all-new Galaxy XR headset - in a weekend.
As a backend engineer, I've been using AI pair-programming at work to build delightful websites. I thought: why can't I just make a `WebResume` to complement my limited front-end skills?

### The How?
A resume I actually *enjoy* updating — write content in `Markdown`, watch it `render live`, toggle `dark mode` for ✨vibes✨, and hit `Ctrl+P` when a recruiter inevitably asks for a `PDF`.
A resume I actually *enjoy* updating - write content in `Markdown`, watch it `render live`, toggle `dark mode` for ✨vibes✨, and hit `Ctrl+P` when a recruiter inevitably asks for a `PDF`.
**No frameworks, no build step, just `HTML + CSS + JS` and a little bit of audacity.**

### Some Design Choices
- **Markdown-first content** — I've been living in `.md` files thanks to LLMs; it's the easiest way to add highlights, links, and formatting without drowning in HTML tags. So I made it the data layer.
- **Versioned deployments** — Because past-me and future-me deserve their own URLs. GitHub Pages + Actions auto-deploy `main`, `demo`, `PR previews`, and `tagged version snapshots` — so every iteration is a living, linkable artifact.
- **Markdown-first content** - I've been living in `.md` files thanks to LLMs; it's the easiest way to add highlights, links, and formatting without drowning in HTML tags. So I made it the data layer.
- **Versioned deployments** - Because past-me and future-me deserve their own URLs. GitHub Pages + Actions auto-deploy `main`, `demo`, `PR previews`, and `tagged version snapshots` - so every iteration is a living, linkable artifact.

### Closing Notes
I hope this saves time for people who are looking for a simple, local, and easy-to-edit resume template. I hope you enjoy using this resume template as much as I enjoyed building it!

## ✨ Features

- **CSS Inspector** — Hover to inspect font properties
- **CSS Inspector** - Hover to inspect font properties

<p>
<img src="docs/assets/Feature_Highlight-CSS_Inspector1-Light_Mode-Demo.png" alt="CSS Inspector 1" width="400">
<img src="docs/assets/Feature_Highlight-CSS_Inspector2-Light_Mode-Demo.png" alt="CSS Inspector 2" width="400">
</p>
- **Dark Mode** — Auto-detects device theme with manual toggle
- **Dark Mode** - Auto-detects device theme with manual toggle

<img src="docs/assets/Feature_Highlight-Dark_Mode-Demo.png" alt="Dark Mode" width="400">
- **Dynamic Content Loading** — Resume data from easy-to-edit Markdown files <!-- ![](docs/assets/feature-dynamic.png) -->
- **Live Edit Mode** — All content editable in-browser <!-- ![](docs/assets/feature-edit.png) -->
- **Section Reordering** — Drag & drop section titles <!-- ![](docs/assets/feature-reorder.png) -->
- **Page Preview** — US Letter page constraints & guides <!-- ![](docs/assets/feature-pagepreview.png) -->
- **Print Ready** — Optimized for PDF export <!-- ![](docs/assets/feature-print.png) -->
- **Dynamic Content Loading** - Resume data from easy-to-edit Markdown files <!-- ![](docs/assets/feature-dynamic.png) -->
- **Dynamic LaTeX & PDF Export** - Instant 1-page classic LaTeX (Jake's Resume / Computer Modern) generation directly from markdown with one-click Overleaf launch and native `pdfTeX` compilation
- **Live Edit Mode** - All content editable in-browser <!-- ![](docs/assets/feature-edit.png) -->
- **Section Reordering** - Drag & drop section titles <!-- ![](docs/assets/feature-reorder.png) -->
- **Page Preview** - US Letter page constraints & guides <!-- ![](docs/assets/feature-pagepreview.png) -->
- **Print Ready** - Optimized for PDF export <!-- ![](docs/assets/feature-print.png) -->

> See [Controls & Features](docs/controls.md) for detailed usage.

## 🚀 Quick Start

```bash
npx serve . # start local server → open http://127.0.0.1:3000
npx serve . # start local server → open http://127.0.0.1:3000
python3 scripts/generate_latex.py # generate dynamic LaTeX & 1-page PDF
```

Edit any `.md` file in `data/`, refresh to see changes. See [Data Format](docs/data-format.md) for schemas.
Expand All @@ -67,10 +69,12 @@ Edit any `.md` file in `data/`, refresh to see changes. See [Data Format](docs/d

```
WebResume/
├── index.html # Main HTML structure
├── index.html # Main HTML structure with LaTeX export modal
├── styles.css # Styling with dark mode support
├── script.js # Dynamic loading & interactive features
├── script.js # Dynamic loading, interactive features & TeX generator
├── DESIGN_SYSTEM.md # Typography & spacing style guide
├── scripts/
│ └── generate_latex.py # Dynamic LaTeX & 1-page PDF generator (Jake's Resume template)
├── data/ # Resume content in Markdown
│ ├── header.md
│ ├── summary.md
Expand Down Expand Up @@ -152,4 +156,4 @@ Thanks to [![Google Antigravity](https://img.shields.io/badge/Google_Antigravity

## 📄 License

MIT License — feel free to use this template for your own resume!
MIT License - feel free to use this template for your own resume!
32 changes: 21 additions & 11 deletions data/experience.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,32 @@
## Senior Software Engineer, Graphics Software Infrastructure
### [Qualcomm](https://www.qualcomm.com/snapdragon/overview) - San Diego, CA · (prev: Boulder, CO; Toronto, ON)
#### 2021 - Present

### [Qualcomm](https://www.qualcomm.com/snapdragon/overview) — San Diego, CA
##### Distributed Pre-Silicon GPU Driver Validation Platform

#### 2021 - Present
- `Designed and led` end-to-end `pre-silicon` GPU validation platform from concept to production, catching regressions and protecting pass rates on proprietary GPU driver code across `5 generations` of `Snapdragon 8 Elite Extreme` (mobile) and `X Elite Extreme` (PC) series chipsets.
- Scaled validation to `300K+ containers/week` on Windows/Linux across an on-prem `HPC` farm through a fault-tolerant runner harness, covering `Vulkan`/`OpenCL`/`OpenGLES` - `CTS`, `VKPerf`, `GFXReconstruct`, and device-capture replay with `billions of tests` in sandboxed, reproducible runtimes.
- Parallelized `1100+ days` of serial `CPU-based Adreno emulation` into a `24-hour` nightly cycle (`1100x`) with `Docker`/`Singularity` on `IBM Spectrum LSF`.
- Built `FastAPI` observability backend on `RedisJSON`/`RediSearch`, powering custom `web dashboards` with `sub-second` live queries over `2M+` records.
- Architected async `RabbitMQ` pipelines into `Postgres` and a `DuckDB` data lake, offloading raw driver logs to `Artifactory` to keep databases lean.
- Standardized `Pydantic` result schemas across `10+` Khronos suites that the `on-device benchmark` team adopted directly and extended for KPIs.

##### Automated Regression Triage System

- `Engineered` a cron-scheduled `CI/CD` pipeline that diffs non-passing rows across consecutive nightly logs, builds `Gerrit` commit DAGs, and dispatches multi-stage `Jenkins` bisection workflows, eliminating operational toil from nightly builds with overlapping test failures.
- Implemented stateful `multi-bisection engine` on a crash-recoverable `JSONL` state loop inspired by [`Karpathy's autoresearch`](https://github.com/karpathy/autoresearch), sharing midpoint builds across failing tests and partitioning commit ranges, isolating C culprits in `O(C log N)` runs instead of `O(K log N)`, cutting compute by `80%`.
- `Left-shifted` driver validation by compressing the failure-to-fix loop, from detection and `root-cause commit` identification to author notification, enabling `rapid fix iteration` and a sustained `99%` pass rate `week over week`.

##### Agentic Developer Infrastructure

- `Architected and own` an in-house pre-silicon `GPU validation` `end-to-end automation framework` dispatching `500K+ jobs/week` on `LSF` on-prem, catching driver regressions on flagship `Snapdragon Adreno GPUs`.
- Parallelized `Docker`/`Singularity` containerized workloads, cutting nightly driver validation cycles from `240 days to 1 day` to support higher throughput.
- Delivered a `FastAPI` + `RedisJSON`/`RediSearch` backend with `TTL`-based expiry, providing `sub-second` access to live test metrics with `2M+ rows/month`.
- Designed `web dashboards`, on-demand `Excel` reports, and automated regression `email alerts` to `meet each stakeholder group's reporting needs`.
- Eliminated reporting bottlenecks via async `RabbitMQ` routing to `Postgres` and `Artifactory`, enabling independent scaling of each layer.
- Standardized `Pydantic` canonical schemas across `10+` Khronos test suites; adopted by the benchmarking team, `saving months of engineering effort`.
- Introduced `MCP servers` wrapping live `API` backends, making `LLM-queryable operational infra`; drove org-wide adoption of `agentic coding` (`Cline`).
- `Shipped` `MCP` server with `OAuth2` over live infra APIs plus a `LangGraph`/`ChromaDB` RAG over internal docs, making operational data LLM-queryable.
- Drove org-wide adoption of agentic coding with `Cline`, `Codex CLI`, delivering talks on MCP-based developer workflows and writing custom Skills.

---

## Data Science Developer, Applied ML

### [KORE Wireless](https://www.korewireless.com/) — Blue Ash, OH
### [KORE Wireless](https://www.korewireless.com/) - Blue Ash, OH

#### 2020 - 2021

Expand All @@ -27,7 +37,7 @@

## Assistant Researcher, Deep Learning

### [Marine Bio-acoustics Research Collaborative (MBARC)](https://acoustics.ucsd.edu), [SDSU](https://roch.sdsu.edu/index.php/research-overview) — San Diego, CA
### [Marine Bio-acoustics Research Collaborative (MBARC)](https://acoustics.ucsd.edu), [SDSU](https://roch.sdsu.edu/index.php/research-overview) - San Diego, CA

#### 2019 - 2020

Expand Down
17 changes: 2 additions & 15 deletions data/projects.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,6 @@
### [JobPostHighlightsExtension — Chrome Extension for Job-Resume Matching](https://github.com/hellosaumil/JobPostHighlightsExtension)

##### Chrome MV3, 2-Stage Pipeline, Hybrid Refinement, Prompt API, Summarizer API, Gemini Nano, Gemini Cloud, Ollama

- Developed `Chrome MV3` extension with `2-stage LLM pipeline` (extract → score) + `hybrid refinement` pass to detect and fill missing fields.
- Engineered `multi-provider AI` architecture supporting `Gemini Cloud`, `Ollama`, and `on-device Gemini Nano` via Chrome's `Prompt API`.
- Optimized inference latency with `pre-warmed model sessions` at startup; subsequent evaluations use `clone()` for `sub-second` response times.
- Designed dual-mode UI (`sidepanel` + `pop-out window`) with dark/light themes and `Cmd+J`/`Ctrl+J` shortcut via `Chrome Commands API`.

---

### [Satellite Terrain Classification — Distributed ML on AWS EMR](https://github.com/hellosaumil/deepsat-aws-emr-pyspark)
### [Satellite Terrain Classification - Distributed ML on AWS EMR](https://github.com/hellosaumil/deepsat-aws-emr-pyspark)

##### Distributed ML, Image Classification, PCA, Random Forests, PySpark, AWS EMR, S3

- Deployed distributed `PySpark ML` pipeline on `AWS EMR` to classify `405K satellite images` across `6 terrain categories`; achieved `92% accuracy`.
- Reduced training time by `~85%` via `PCA dimensionality reduction` while preserving classification performance on high-dimensional image features.
- Architected scalable `S3` + `Spark ML` pipelines processing `5.6 GB` at `<$0.20/run` on `m5.xlarge` clusters for cost-efficient batch inference.
- Structured `dual-mode framework` enabling seamless `local-to-cloud transition`; same codebase runs on local Spark for dev and EMR for production.
- Architected `S3` + Spark ML pipelines processing `5.6 GB` at `<$0.20/run`, cutting training time `~85%` via PCA dimensionality reduction.
4 changes: 2 additions & 2 deletions data/skills.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
- **Infrastructure:** Python, Bash, FastAPI, Pydantic, Redis, RabbitMQ, Docker, Singularity, Kubernetes (Rancher, GKE), LSF (HPC), Postgres, Jenkins
- **ML & Data:** PyTorch, TensorFlow, PySpark, Pandas, LangGraph, FastMCP, ChromaDB
- **Infrastructure:** Python, Bash/Shell, Docker, Kubernetes (Rancher, GKE - Google Cloud), IBM LSF (HPC), Git/Gerrit, HTML/CSS/JS, Jenkins CI/CD
- **Data:** FastAPI, RabbitMQ, Pydantic, Pandas, Redis, DuckDB, Parquet, PostgreSQL - **ML:** PyTorch, TensorFlow, PySpark, LangGraph, FastMCP
4 changes: 3 additions & 1 deletion data/summary.md
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
Senior Software Engineer specializing in `distributed infrastructure` and `applied ML systems`, with `5+ years` building test `automation frameworks`, high-performance backends, and developer tooling. At Qualcomm, `architect and own` an end-to-end GPU validation platform orchestrating containerized execution of `500K+ jobs/week` across HPC clusters with real-time reporting handling `~2M rows/month`. Background in `ML research` (GANs, anomaly detection) and `agentic infrastructure` (`MCP servers`, `LLM`-queryable APIs).
Built the large-scale infrastructure that validates Snapdragon Adreno GPU drivers before the silicon exists, cutting nightly cycles `1100x`.
Previously, deep learning research in computer vision and speech processing.
Interested in building tools for the next frontier of compute and agentic infrastructure.
2 changes: 1 addition & 1 deletion docs/controls.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ The floating control panel (bottom-right) includes:
| ✏️ Edit Mode | Toggle in-browser editing of all resume content |
| 📄 Page Preview | Toggle US Letter page constraints and guides (default: ON) |
| ✖️ Reset | Reload all content from Markdown files and clear edits |
| 🧊 CSS Inspector | Toggle CSS property inspection on hover (default: ON) — auto-disables when Edit Mode is active |
| 🧊 CSS Inspector | Toggle CSS property inspection on hover (default: ON) - auto-disables when Edit Mode is active |

## CSS Inspector

Expand Down
9 changes: 5 additions & 4 deletions docs/data-format.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,10 @@ One or two sentence professional summary paragraph.
## Experience & Projects (`experience.md`, `projects.md`)
```markdown
## Job Title
### [Company Name](https://example.com) — Location
### [Company Name](https://example.com) - Location
#### Date Range
##### *Tech Stack: Python, JavaScript, AWS*
##### Subsection Title (or **Subsection Title**)
- Bullet point with `code formatting`
- Another bullet with **bold text**

Expand All @@ -45,11 +46,11 @@ Degree: Bachelor of Technology...
## Skills (`skills.md`)
```markdown
- **Programming:** Python, JavaScript, TypeScript
- **Tools & Frameworks:** React, Node.js, Docker
- **Data:** PyTorch, Pandas, PostgreSQL - **ML:** TensorFlow, LangGraph, ChromaDB
```

## Lists (`publications.md`, `leadership.md`, `certificates.md`)
```markdown
- `[Publication Title](https://doi.org/example)` — Conference Name
- **Role** — Organization/Event Details
- `[Publication Title](https://doi.org/example)` - Conference Name
- **Role** - Organization/Event Details
```
21 changes: 18 additions & 3 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,18 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Saumil Shah - Senior Infrastructure Software Engineer Resume">
<title>Saumil Shah - Resume</title>
<link rel="stylesheet" href="styles.css?v=6">
<script>
(function () {
try {
var s = JSON.parse(localStorage.getItem('resume-settings'));
var isDark = s && typeof s.darkMode === 'boolean' ? s.darkMode : window.matchMedia('(prefers-color-scheme: dark)').matches;
if (isDark) {
document.documentElement.classList.add('dark-mode');
}
} catch (e) {}
})();
</script>
<link rel="stylesheet" href="styles.css?v=23">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link
Expand All @@ -15,6 +26,11 @@
</head>

<body>
<script>
if (document.documentElement.classList.contains('dark-mode')) {
document.body.classList.add('dark-mode');
}
</script>
<div class="controls no-print">
<div class="controls-buttons">
<button id="themeToggle" class="theme-toggle-btn" title="Toggle Light/Dark Mode">
Expand Down Expand Up @@ -161,8 +177,7 @@ <h2 class="section-title header-2">Publications & Awards</h2>
</div>
</div>


<script src="script.js?v=6"></script>
<script src="script.js?v=23"></script>
</body>

</html>
Loading
Loading