01~/about
who i amCybersecurity professional and software engineer, currently pursuing a Master's degree in Cyber Defense. With a foundation in computer science and hands-on industry experience in software development, I work at the gap between secure coding practices and scalable software.
My focus is on building resilient systems that hold up against modern threats — combining academic research with practical engineering to approach problems from both the offensive and defensive side.
Vulnerability research · Network defense · Local/private LLM tooling · Penetration testing · CTFs · OSINT · Automation · Homelab engineering
- Network security & defense
- Vulnerability assessment
- Penetration testing
- Incident response
- Threat analysis
- Security architecture
- Python
- Java
- JavaScript / TypeScript
- C / C++
- Go
- SQL · Bash
- React · Node.js
- Spring Boot
- Docker · Proxmox
- Git
- AWS / Azure
- Linux administration
02~/background
experience & educationEnterprise-grade infrastructure at home — used as a test range for everything on this page.
- Proxmox VE — type 1 hypervisor; isolated VMs for security testing, LXC containers for services
- Segmented VLANs — separate IoT, lab, and production networks with custom firewall rules
- Pi-hole — network-wide DNS filtering
- Nginx Proxy Manager — reverse proxy with SSL termination (this site is served from it)
- Docker + monitoring stack — containerized deployment with system and network observability
03~/research
thesis & publicationsEvaluating LLMs for CPE Identification in IoT Reconnaissance
M.S. Cyber Defense · Eastern Washington University · Spring 2026
Vulnerability identification during penetration testing relies on rigid string matching to map network scan data to CPE identifiers and downstream CVE records — and it fails routinely on IoT devices, whose truncated, non-standard banners resist deterministic parsing. LLMs can reason through these fuzzy associations, but sending live reconnaissance data to a cloud model is an operational-security problem. The thesis asks: can locally hosted open-weight models do this job well enough to be useful, and what do you trade to keep the analysis on-premise?
- Evaluated 36 LLMs across three deployment tiers — frontier hosted APIs, remotely hosted open-weight, and local vLLM serving — plus Nmap's native CPE extraction as a no-LLM baseline
- Scored against hand-labeled ground truth from real Nmap scans of 16 IoT devices, with a tiered rubric separating exact, partial, and confidently-wrong identifiers
- The best truly-local model (an 8B security fine-tune on a single 24 GB consumer GPU) approaches the weakest frontier model — local inference is viable for this task
- The most dangerous failure isn't malformed output — it's a well-formed CPE that retrieves the wrong vulnerability list (21.9% of predictions overall)
04~/projects
things i've built.tex / .bib / .sty files, pick a root file, compile, preview, export. No account, no server, no cloud storage: your documents never leave your machine. v0.1 ships the editor shell (project import, file tree, editor, draft preview, autosave-in-browser); full WASM PDF compilation is the next milestone.You didn't log in. You didn't accept a cookie. You just opened a page — and already it can read your hardware, your settings, the page you came from, and roughly where you are on the planet. No malware, no permission prompts. This is the ordinary, invisible baseline of being online. Run the scan and see your own.
Your device scan never touches the network — but the moment your browser connects to any server, it hands over your IP address, and an IP maps to a real-world location and internet provider. The button below makes one real request to a public geolocation API and shows what comes back. This is the request every site, ad, and tracker pixel makes about you automatically.
The sensitive stuff — location, camera, microphone, notifications, clipboard — is gated behind a browser permission prompt. A site can't read these silently. The button below uses the Permissions API to check the current status of each permission for this site. Checking status never triggers a prompt and never accesses the underlying data.
05~/contact
reach meAlways open to discussing opportunities, collaborations, or connecting with others in security and software engineering.