Software Engineer / Systems Thinker / Builder
THIS SITE STILL IN DEVELOPMENT
I'm a CS senior at BYU–Hawaii.
Since longer than I can remember, I have had an uncontrollable desire to understand
how things work. The things we’ve built as humans continues to fascinate me,
and instills in me an innate curiosity for the unknown.
I've been building things with code since I was 14 —
not because I was told to, but because I kept running into problems that needed solving.
This is still in progress, come back to find more later!
I work two jobs alongside school — CS tutor and teaching assistant for the department and part-time at McDonald's — because Laʻie is expensive and my wife Britlyn and I are making it work.
A mix of coursework and self-directed builds. The pattern is the same in all of them: find something that doesn't work well, understand why, build something better.
This semester, I'm assigned to grade student submissions for their introductory HTML and CSS course. The instructor gives clear instructions and an equally clear rubric. The students develop git and github competency and post their web pages live through github pages. My normal workflow, while simple, was also tedius and repetitive. Scanning HTML and CSS source code - for 20+ assignments, I quickly realized that this felt inefficent. So, I had an idea - build an app that could take in a students live URL, fetch the HTML and CSS source code, and scan it for the required HTML tags, css properties, etc. The initial idea morphed into a full grading portal - with now full integration with Canvas by Instructure. My tool pulls assignments from Canvas via API, runs them through an AI model (Claude API) with rubric context, and surfaces a draft score + feedback for me to review and approve. The human stays in the loop — the AI handles the first pass. Finally, I can fully edit the score and feedback for each rubric criteron (pulled from Canvas), and then post that final grade and feedback seemlessly back to canvas, all without leaving the portal.
In 2016, I ran a modded Minecraft server. A dozen independent mods — none of which talked to each other. So I built a system to connect them: monitor dashboards for reactor output, ME storage status, plugin tutorials with touch-navigable pages, and a shared Lua library distributed across in-game computers via pastebin at runtime. I was 14. I didn't know what software engineering was. I was just solving problems.
-- Auto-detect: no hardcoded peripheral names function fetchPeripheral() local names = peripheral.getNames() for i, name in pairs(names) do if peripheral.getType(name) == "monitor" then return peripheral.wrap(name) end end end -- Toggle redstone output (on/off) function toggleRedstone(side) if redstone.getOutput(side) then redstone.setAnalogOutput(side, 0) else redstone.setAnalogOutput(side, 15) end end -- Draw a full-width colored bar at a given y position function drawBars(color, yPos, mon) monX, monY = mon.getSize() mon.setBackgroundColor(color) mon.setCursorPos(1, yPos) mon.write(string.rep(" ", monX)) end
local function getData() RFStored = math.floor(turb.getEnergyStored()) RF = math.floor(turb.getEnergyProducedLastTick()) Rotor = math.floor(turb.getRotorSpeed()) poll = turb.getActive() end local function homepage() if poll == true then drawMenus(colors.blue) writeText(8, 2, colors.black, colors.green, "ONLINE") else drawMenus(colors.gray) writeText(8, 2, colors.black, colors.red, "OFFLINE") end end while true do getData() homepage() sleep(1) end
function getControl() local names = peripheral.getNames() for i, name in pairs(names) do if peripheral.getType(name) == "appeng_me_tilecontroller" then return peripheral.wrap(name) end end end while true do BUsed = control.getUnusedBytes() BTotal = control.getTotalBytes() BPct = math.floor((BUsed/BTotal)*100) mon.write("Storage: "..BPct.."%") sleep(1) end
function page1() m.clearScreen(colors.black, colors.black) m.writeText(2, 3, colors.black, colors.red, "What is it?") -- ... render content mon2.write("------>") -- sidebar nav arrow event, side, x, y = os.pullEvent("monitor_touch") if side == "front" then page2() end end function page2() m.clearScreen(colors.black, colors.black) m.writeText(2, 2, colors.black, colors.red, "Commands:") -- ... render commands mon2.write("<------") -- arrow flips on page 2 event, side, x, y = os.pullEvent("monitor_touch") if side == "monitor_4" then page1() end end page1()
The most telling artifact isn't any individual script — it's that I built PikeLib at all. When I noticed I was rewriting the same monitor-drawing code in every file, I pulled it into a shared module with a consistent API. The idea that repeated code is a problem to be solved wasn't taught to me. I felt it. That instinct has followed me into every project since.
I'm actively looking for a summer 2026 internship.