¶ 01 · the start — 06:12
first light. nothing has been decided yet.
Caminante, no hay camino,
se hace camino al andar.
Traveller, there is no road — the road is made by walking.
↓ twelve stops, dawn to dark
¶ 02 · who — 06:58
the sun clears the roofline, and the day has to be answered for.
Who.
This is a record of what I’ve built.
And how each piece was checked before I called it done.
I’m a computer-science graduate from Miami University, based in Cincinnati, Ohio. I build the interface, the services behind it, the data they run on, and the machine learning when a problem needs it. Every claim on this line carries a receipt.
every station on this line hands its output to a case file, source, or live build — the links are in each station’s handoff.
answers for every claim on this page
- basecincinnati, oh
- buildsinterfaces · services · data · ml
- degreeb.s. computer science — miami university, may 2026
- handlesgithub ↗ · linkedin ↗
¶ 03 · the yard — 07:52
early light — everything has a shape and nothing has a name.
The path.
Five years of query logs. Zero structure.
“The purpose of computing is insight, not numbers.”
The job before this run: teach the records shape. It’s where I learned that the work starts in the mess.
itsm data integration student associate — miami university · internship · jun 2025 – may 2026
1.6m+ oas query logs — 5 yrs · 1,153 users · 66 dashboards ⟶ a 57.8m-row field-usage table, sqlite
tableau + workday silos ⟶ one master inventory — 10,453 rows × 35 fields · hash-dedup · ruff + pytest ci
legacy laravel reporter ⟶ etl ⟶ 37-month tableau dashboard — compliance 0% ⟶ 97% across 61 projects
↳ only the inventory is checked in — the rest are read off miami’s own systems and cannot be published · the inventory’s case file ⟶
¶ 04 · first station — 08:47
the morning post, and the first thing anyone does with it is sort.
Applied.
Your inbox already knows where you applied.
Applied reads it — on a device you control, and defers to you when it isn’t sure.
201 regex rules ⟶ e5 embeddings ⟶ fine-tuned setfit
macro-f1 0.9791 · 96-sample eval — 8 classes · 2 misclassified — the rules stage, not the cascade
ci blocks the build below 0.95 macro-f1 · int8 onnx via transformers.js — 90 mb ⟶ 23 mb
postgres row-level security — a non-bypassrls role
↳ the sorted mail lands in the case file ⟶ · source ↗ · live build ↗ · system card ↗
¶ 05 · second station — 12:06
noon. nothing casts a shadow, so nothing hides in one.
Cadence.
Plans, the way you’d say them out loud.
Type a sentence; it becomes the event — attendees, Meet link and all.
1,186 passed · 0 skipped — 635 frontend + 551 backend
4-stage parse — chrono · hashtag · priority · compromise (this sample is scripted, not a live call)
36 routes in one serverless function — vercel’s 12-function cap
rls enforced on 7 tables — force, 22 policies · owner-scoped checks on 6 services · idor suite in ci
↳ the committed plan lands in the case file ⟶ · source ↗ · live build ↗ · system card ↗
“lunch with Sam next Tuesday at noon, add a Meet.”
sam tue · 12:00 + meet link¶ 06 · third station — 15:23
mid-afternoon, when the light goes hard and shows the edges.
Glyph.
“We should forget about small efficiencies, say about 97% of the time… yet we should not pass up our opportunities in that critical 3%.”
No frameworks. Just math, memory, and C++.
The network below is awake in this tab — 45.9 KB of WebAssembly and 310.6 KB of weights, no server. The run needs a sample: yours.
97.01% on the 10,000-image mnist test set — 9,701/10,000 · macro-f1 0.9698
parallel dot-256 kernel 3.5× vs -O3 — parallelism carries all of it; the simd is in both builds · 784 ⟶ 100 ⟶ 10
3 hand-written simd paths — avx-512 · avx2 · neon (wasm: -msimd128, compiler-vectorised) · 2-person team
↳ your sample’s reader lands in the case file ⟶ · source ↗ · live build ↗ · system card ↗
— the run needs a sample
measured then, committed — not run in this tab. 3.536× at the median of 20 reps a side · cv 0.16% / 0.28% · one committed run, so no spread to quote · the raw run record (json) ⟶
¶ 07 · fourth station — 19:36
the sun going down, and the work speeding up to beat it.
jetpack-compress.
One gzip stream, many virtual threads.
The stream splits, the threads compress in parallel, and the lanes stitch back into one valid member.
6.4× single-threaded java.util.zip — 422 vs 66 mb/s (3-fork jmh · 99.9% ci)
adler-32 vectorised 2.8× scalar — 4.26 gb/s — bit-identical to java.util.zip.Adler32, and honestly not faster than the jdk intrinsic (14.06 gb/s)
jdk 25 · one virtual thread per block, bounded in-flight window · memory-mapped i/o via ffm
72 tests, 0 failures
browser gzip on this page’s own html — an illustration, not jetpack’s engine
↳ the member lands in the benchmark ledger @ 2caacd0 ↗ · source ↗ · live build ↗ · system card ↗
measured then, committed — not run in this tab. 6.4× is the 3-fork jmh result; across both committed runs the ratio spans 6.38–6.89× · the raw run record (json) ⟶
¶ 08 · fifth station · the honest hour — 21:07
dusk — the hour that shows you what did not get finished.
LifeQuest. A prototype, told honestly.
“Plan to throw one away; you will, anyhow.”
Job-seeking turned into missions so momentum survives the grind — a playable mission card and a tier ladder on a real backend. Born at Social Innovation Weekend, March 2025 — a 7-person team, one weekend, React + NestJS. It would need a partner to scale, and it says so.
↳ no case file — a prototype has nothing to argue yet · source ↗ · live prototype ↗ · system card ↗
dusk. the light is the record: what shipped is lit, what didn’t stays dashed.
¶ 09 · sixth station · the last — 22:05
lamplight. the machine works on; somebody stays to watch it.
Agentic AutoML.
It runs the whole lifecycle — and refuses to finish alone.
“The Analytical Engine has no pretensions whatever to originate anything. It can do whatever we know how to order it to perform.”
The senior-design capstone: a LangGraph agent that works a notebook the way a person would — profiles the data, writes the cells, runs them — and waits at a human gate before every phase.
seven phases mirror the ml lifecycle · a human gate at every step
12 mcp tools — most of them notebook hands: read_cell · write_cell · run_cell …
the llm’s python runs in a locked-down docker sandbox — non-root · read-only fs · capped cpu + memory
langgraph + mcp · default model gpt-5.4 · 2,173 commits on the senior-design gitlab · 2-person team — my seat: backend
no accuracy figure is quoted here because none is claimed — the work is the architecture and the gates, and the code is open to read.
↳ the halted run lands in the case file ⟶ · the published snapshot, gpl-3.0 ↗ · live build ↗
¶ 10 · the review — 22:23
the last of the light, spent checking what the day actually held.
How I work.
The run is nearly in. Before the gate, the discipline that drove it — each line ends at the ledger row that proves it. Every row is on file in one place: the evidence index ⟶
“The first principle is that you must not fool yourself — and you are the easiest person to fool.”
Make it learn.
Make it hold up.
✓ a human signed for it · — the gate stopped the run · below them the line runs on dashed and unsigned, to a person
two of my own gates refused to sign automatically. which is why the next stop on this line is a person.
¶ 11 · the references — 22:32
past ten, and these are the only words on this page I did not write.
Two people wrote this down in public.
The gates on the last station were mine, and a machine can only refuse itself. These are the humans who worked the line beside me.
“From the start, he operated above intern level… He built data pipelines used to analyze Oracle Analytics Server usage, giving the team visibility into report adoption, demand patterns, and technical load. That work informed platform decisions and prioritization… He understood intent, not just requirements.”
“I was particularly impressed with his ability to work under pressure or strict deadlines and still deliver high quality work.”
both written on linkedin, unedited except where an ellipsis marks a cut · the recommendations, in full ↗
three of the twelve stops carry a name that is not mine.
¶ 12 · the approval gate — 22:41
dark. one decision left, and it was never going to be the machine’s.and the light came back, the way it does.
Every pipeline I build ends with a human decision.
This one ends with yours.
- 06:12 · the start
- 06:58 · who
- 07:52 · the yard
- 08:47 · applied
- 12:06 · cadence
- 15:23 · glyph
- 19:36 · jetpack-compress
- 21:07 · lifequest
- 22:05 · agentic automl
- 22:23 · the review
- 22:32 · the references
- 22:41 · the human gate — go / no-go
- deploy — yours; no scroll reaches it
the marker you have been following stops here. nothing moves until you decide.
run 042 — the manifest, complete.
one day · twelve stops · six stations proof-cited · one signature missing
042 is the day’s serial, not a visit counter — the number holds; only the light moves.
- 01appliedrules macro-f1 0.9791 · 96-sample gate
- 02cadence1,186 passed · 0 skipped — 635 fe + 551 be
- 03glyph97.01% — 9,701/10,000 · macro-f1 0.9698
- 04jetpack-compress72 tests, 0 failures · jdk 25
- 05lifequestprototype — held marks stayed held
- 06agentic automl7 phases, every one gated · code public
- +your sample
¶ 13 · the next morning — 06:12
first light again — and this time something has been decided.
“What we call the beginning is often the end
And to make an end is to make a beginning.”
Thank you. The interesting part is whatever comes next.
run 043 · not yet begun