I build backend systems &developer tooling that proves itself.
Software Engineering student at Washington State University and SWE intern
at Schweitzer Engineering Laboratories. I build Python and protocol tooling,
then test it against real behavior. Explore eight interactive projects below.
Engineering reliable systems with measurable proof.
I'm a Software Engineering student at Washington State University and a software
engineering intern at Schweitzer Engineering Laboratories, where I build Python
libraries and extensions for the RTAC platform.
My focus is backend systems and developer tooling: APIs whose contracts are tested
before they ship, security tooling that surfaces risky patterns for review,
and performance data you can watch while it happens. I care about the unglamorous
parts of software: the tests, the diagnostics, the measurements. That's what
separates code that works from code that's proven to work.
Internship · Mar 2026 - Present
Software Engineering Intern
Schweitzer Engineering Laboratories
Building Python libraries and extensions for the RTAC platform that ship to
production and are used by many SEL clients, including reusable utilities,
schema-aware upgrades with tests, and a context manager that made library
load and save up to 15x faster.
Internship · May - Dec 2025
Software Validation Engineer Intern
Alturas Analytics
Took technical ownership of validating two regulated laboratory systems backed
by SQL Server, in environments with minimal existing documentation: T-SQL
checks on data integrity and audit trails, plus automated OQ/UAT test suites
in pytest, pyodbc, and pandas built to 21 CFR Part 11 and GDPR.
Education
B.S. Software Engineering, Washington State University
Minor in Mathematics · expected 12/2026
PythonC#C / C++SQL & T-SQLDockerGit
currently learningRust for systems-level tooling · Kubernetes & Helm · gRPC & Protobuf · AST analysis with tree-sitter
02
Skills
[ technical proficiency ]
01 / Languages
Build across the stack
Python · Structured Text (IEC 61131-3) · SQL / T-SQL · C# · C / C++
Eight projects, from backend systems to CNC geometry. Run an experiment,
inspect its result, then explore a three-step workflow for visualizing,
converting, and optimizing toolpaths.
chaos · inject & gradenot run
THE EXPERIMENTWill the service recover after CPU pressure?
baselineCPU pressurerecoveryrecent p95 · last 12 probes25 ms SLO
Chart, recent p95, and phase summaries include both probes; SLO hypotheses grade POST /api/orders only.
—recent p95 · last 120probes0errors—margin to 25 ms line
Select a phase to inspect what its measurement means.
$ faultline run --experiment portfolio-demo[PREVIEW] baseline → CPU pressure → recovery
01 / FAULTLINE featured experiment
Fault Injection & Chaos Testing Platform
Define an SLO hypothesis, inject a bounded fault, and watch the service
respond. This run probes a spawned service through baseline, CPU pressure,
and recovery, then grades each phase against a 25 ms p95 threshold.
A red FAIL means the experiment found a breach.
Enforces OpenAPI specs against live responses and pinpoints field-level drift.
This fixture comparison shows how its compatibility view separates breaking
changes from additive ones before a release.
THE INVESTIGATIONCan an answer point back to the code?
Try a question about retrieval, citations, or the embedding pipeline.how does the retrieval index rank code chunks?embed▸retrieve top-4▸synthesize[1] retrieval.py:41-62 query 0.87"up to k (position, cosine_score) tuples, highest score first"[2] embed.py:33-59 embed_texts 0.63"texts are embedded in batches against the local endpoint"[3] ingestion.py:107-124 ingest 0.41"one chunk per top-level symbol, plus module preambles"Chunks are embedded and ranked by cosine similarity to the query…illustrative example · ask the codebase for a live answer
03 / CODE-RAG
Local RAG Code Assistant
Retrieval-augmented code assistant that answers questions about a
codebase with grounded, cited answers: per-symbol chunking, cosine
retrieval, and local LLM synthesis, plus a zero-model offline mode
so the demo runs anywhere.
THE TRIAGEWhich pattern matches need a closer look?
Illustrative snippets · run the heuristic scan to inspect repository matches
db.execute(f"SELECT * FROM u WHERE id={uid}")row = conn.execute(query, params).fetchone()html = "<div>" + raw_inputsession = requests.Session()api_key = "EXAMPLE_TOKEN_DO_NOT_USE"cursor.close()
Select a flagged line after the scan to inspect why it was surfaced.
04 / VULNERABILITY-SCANNER
Real-time Vulnerability Scanner
A regex-based first pass flags SQLi, XSS, secret, and dependency patterns.
Filter real repository matches and inspect a flagged line. Every result
remains a review lead until its context is checked.
THE QUESTIONWhich function deserves attention first?
db_query
42%
render_template
36%
encode_payload
22%
hot path: db_query()illustrative profile · run for measured values
—recorded CPU—calls measured—first target
Run the profiler to turn the example bars into measured evidence.
CPU per samplewaiting for run
05 / PERFORMANCE-PROFILER
Real-time Performance Profiler
A stdlib decorator measures CPU time, wall time, and traced memory per
call. Switch between total CPU share and average cost per call, then
watch fresh CPU samples stream in. The chart shows functions, not a
nested call graph.
Three Python projects. One CNC workflow. Inspect the moves, turn geometry into G-code, then measure how much travel a better ordering saves.
06 / G-CODE-VISUALIZER
G-Code Visualizer
PythonMatplotlibG-code parsing
Parsed and visualized CNC G-code toolpaths with color-coded visualization. Inspect where the tool cuts, where it travels, and how each line changes its route.
01 / INSPECTRead the program. See the path.sample preview
Feed / cutRapid travel
XY PLANE / MILLIMETRES
—motion commands
—feed distance · mm
—rapid distance · mm
Edit a program or choose a sample, then visualize its computed toolpath.
Python demo rebuilt for this portfolio. Supports G0/G1, XY G2/G3 with I/J, G20/G21, and G90/G91. Distances include Z moves; the plot shows XY. Unsupported operations are reported.
07 / DXF-TO-G-CODE
DXF to G-Code Converter
PythonezdxfGeometry extraction
Extracted geometry from DXF files and generated CNC-compatible G-code. This demo reads a real drawing with ezdxf and turns each contour into an inspectable motion program.
02 / CONVERTDrawing in. Toolpath out.sample preview
DXF → G21 / G90 / G1
Generated G-code
Choose a drawing and convert it.
G21 → millimetres
G90 → absolute coordinates
G0 → travel between contours
G1 → trace the geometry
—DXF entities
—contours extracted
—G-code lines
Try the mounting plate, then inspect the outline and four circular holes.
Inspect or paste ASCII DXF
Python demo rebuilt for this portfolio. LINE, LWPOLYLINE, ARC, and CIRCLE on the XY plane; mm or unitless drawings (assumed mm). Curves use chords of at most 2°. Geometry preview uses Z5 clearance and Z−1 depth; tooling, compensation, and controller setup require verification before machining.
08 / G-CODE-OPTIMIZER
G-Code Optimizer
PythonSortingNearest neighbor
Reduced toolpath inefficiencies through sorting and reordering algorithms, with efficiency statistics. Compare the original route with a new ordering and see exactly how much rapid travel it saves.
03 / OPTIMIZESame contours. A shorter journey.sample preview
Preserved cutsRapid travel
ORIGINAL ORDERSample preview
OPTIMIZED ORDERRun to compare
—less XY rapid travel
—millimetres saved
—contours preserved
—unchanged XY cut · mm
Run to reveal the new contour order.
Compare two heuristics on the same layout. Savings are computed for your selected example.
Python demo rebuilt for this portfolio. Reorders independent contours from the selected DXF without changing cut direction or start vertices. Reports XY rapid distance from origin; excludes Z travel and machine time. Keeps the original route if the heuristic is worse. Does not rewrite arbitrary machine programs.
[ how they get built ]
STEP 01
Write the contract first
Declare expected API behavior in OpenAPI, then compare real responses with
that contract. The tester surfaces response drift with concrete field-level
evidence instead of relying on guesswork.
STEP 02
Test until it's boring
Each repository's GitHub Actions workflow runs pytest and Ruff on pushes to
main and pull requests. The tests exercise behavior; the workflow reports
regressions without claiming branch-protection rules it cannot verify.
STEP 03
Measure before you optimize
The profiler records CPU time, wall-clock time, and traced memory by
function call. Those measurements help focus optimization on observed
costs instead of guesses.
STEP 04
Review before shipping
The regex-based scanner flags code patterns worth reviewing, including
query construction, markup handling, and secrets. A human checks the
surrounding context before treating a match as a vulnerability.
04
Contact
[ get in touch ]
Let's talk about what you're building.
A question about one of these projects, an idea worth pressure-testing, or
just to trade notes on backend tooling: my inbox is always open!