Software Engineer — Washington, US

Gurkirat Singh

Full-stack developer with a B.S. in Math & CS. I write clean, testable code across the stack — from low-level Win32 telemetry to React/Node web apps. Strong testing mindset, comfortable in Agile teams.

About

Associate Software Engineer with a B.S. in Mathematics & Computer Science from Western Washington University. Full-stack project experience building web applications with Java, JavaScript, Node, React, and SQL — backed by a solid foundation in data structures, algorithms, and software design. Collaborative team member with a strong testing mindset; focused on delivering clean, maintainable code in an Agile environment.

Skills

Languages

Java, JavaScript, Python, Go, React, Node.js, HTML/CSS

Databases & Web

SQL (MySQL, JDBC), MongoDB, Docker, REST APIs, HTTP, Express

Testing & Tools

JUnit, Playwright, Git, Agile/Scrum, Jira, Confluence

CS Fundamentals

Data structures, algorithms, software design, OOP

Projects

MouseFlow — System Telemetry Utility

Java 21JNA 5.13Win32 APIJavaFXJNativeHook

A global mouse tracker that hooks low-level Windows APIs to intercept cursor telemetry across all applications. Renders real-time trajectory paths on a live JavaFX dashboard and displays hovered application names. Designed for UX heatmaps and productivity analysis.

Architecture

Windows OS
  │  WH_MOUSE_LL hook (jnativehook)
  ▼
App.java ── Worker thread (40ms pulse)
  │  ├─ Win32: GetForegroundWindow, WindowFromPoint (JNA)
  │  ├─ Weighted-pulse CSV logging (5px deadzone + dwell time)
  │  └─ Platform.runLater → UI updates
  ▼
TrackerUI.java ── JavaFX Application thread
  │  ├─ Live X/Y, active/hovered window titles
  │  ├─ Resizable path-trail canvas (multi-monitor normalized)
  │  └─ Dark dashboard theme
  ▼
logs/mouse_log_<ts>.csv

Key Features

  • Weighted-pulse logging — writes CSV rows only on ≥5px movement or window change; accumulates dwell time during idle to minimize disk I/O
  • Multi-monitor normalization — computes virtual desktop bounds from all monitors, maps raw hook coords to canvas-relative percentages
  • Thread isolation — hook message pump on dedicated worker thread; all UI mutations marshaled via Platform.runLater()
  • Resizable live canvas — path trail binds to window dimensions, auto-clears on resize

Debugging Highlights

  • Resolved path-trail boundary violations where rendered points drew outside the canvas viewport
  • Fixed layout overflow in the stats panel causing clipped window titles at narrow widths
  • Added zero-guards and size-change listeners to prevent null-pointer crashes during window resize

OCR Translate — AI Manga Translation Pipeline

Python 3.10+OllamaQwen3-VL 8BTranslateGemma 12BPillow

A fully local, two-stage AI pipeline that extracts Japanese text from raw comic/manga pages and translates it to natural English. Zero cloud APIs, zero Tesseract, zero manual preprocessing — just raw images in, English dialogue out.

Architecture

images/*.png
  │  preprocess.py: load, downscale, base64-encode
  ▼
ocr.py ── POST /api/chat → Qwen3-VL (vision model)
  │  Returns raw Japanese text from speech bubbles
  ▼
translate.py ── POST /api/chat → TranslateGemma (LLM)
  │  Furigana stripping → contextual English translation
  ▼
outputs/batch_translation.txt

Key Features

  • Two-stage local AI — vision model reads the image, separate LLM translates; both run on-device via Ollama
  • Zero preprocessing — raw images go direct to the vision model; no grayscale conversion, thresholding, or denoising
  • Vertical text support — vision models natively understand right-to-left Japanese reading order
  • Crash-resilient batch mode — streaming per-page writes survive mid-batch failures; restart picks up from scratch with no duplicates
  • Furigana stripping — regex-based removal of kana reading annotations before translation to prevent tokenization noise
  • 563 lines of Python — no framework overhead, single-file modules, trivially auditable

DeployBox — Single-Command Docker Runner

Go 1.23DockerYAML

A lightweight Go CLI that auto-detects any project's stack and generates a production-ready Dockerfile — then builds and runs the container with one command. No Docker knowledge required.

Architecture

deploybox init <dir>
  │  Scan: pom.xml→Java, requirements.txt→Python, package.json→Node, ...
  │  Load: deploy.yaml overrides (name, port, env, volumes, command)
  │  Generate: multi-stage Dockerfile with layer caching
  ▼
Dockerfile

deploybox up <dir>
  │  docker build -t deploybox-<name>
  │  docker run -d --rm (or docker compose up for depends_on)
  ▼
Container running ✓

Key Features

  • Auto-detection — scans directory for pom.xml, requirements.txt, package.json, Cargo.toml, or go.mod and picks the right base image
  • Multi-stage builds — every Dockerfile uses layer caching; dependencies installed before source so code changes skip full rebuilds
  • Optional deploy.yaml — override name, port, environment variables, volume mounts, and startup command without touching the Dockerfile
  • Multi-service supportdepends_on in deploy.yaml generates docker-compose.yml to wire containers together
  • host.docker.internal — containers reach host services (Ollama, databases) through Docker Desktop's built-in DNS
  • Cross-project consistency — all generated Dockerfiles follow identical conventions; audit one, trust all

Verified Against

  • OCR Translate (Python) — built image, ran batch translation, connected to Windows Ollama via host.docker.internal
  • MouseFlow Tracker (Java/Maven) — built multi-stage image, resolved JNA + JavaFX + JNativeHook, compiled successfully

Experience

Wandke Consulting

Accessibility QA Consultant (Internship)

Jan – Mar 2023
  • Performed manual and automated WCAG 2.0/2.1 audits across multiple websites using AXE DevTools and browser DevTools — logged defects, delivered code-level remediation, and verified fixes.
  • Collaborated with development teams via shared documentation and feedback loops, gaining experience in real-world QA workflows.

Fred Meyer (Kroger)

Logistics Operations Specialist

Nov 2019 – Present
  • Investigate and reconcile daily inventory discrepancies by cross-referencing physical stock with digital records — honed strong attention to detail and systematic troubleshooting habits.
  • Operate inventory management software and Zebra RF hardware in a fast-paced environment, ensuring data accuracy across systems.