a.eldoumani
L4 · Interface

SOFTWARE ENGINEER · CALGARY

Silicon to interface.

I build everything from ARMv8 assembly and OS kernels to full stack web apps. Those are usually two different people, so I arranged this page the way the machine is arranged: interface at the surface, silicon at the bottom. Scroll to descend.

Available for new grad and full time roles · graduating June 2027

fig. 0 · the site map, by altitude

↓ descending to L4 · interface

Interface

L4 · SURFACE LEVEL

DUST

NEXT.JS · CONVEX · REAL TIME

A multiplayer game about digging through a decaying internet. Built in 24 hours, and the real time sync held up in both competitive and cooperative modes.

ARCHIVE THE TRUE LINEscore 0

the game's loop in miniature: click the true line before the page decays

DUST game interface: players exploring a decaying internet as digital archaeologists
fig. 1 · DUST, calgary hacks 2026

Providence

One assistant for the computers you already own. Talk to it from the web, an Apple Watch, or a Quest headset, and it runs the work on your Mac or Windows machine. Aramco Sponsor Award Winner at Hack the North 2026. I wrote the firmware for the wearable prototype, then owned the coordinator's reliability once the software became the demo.

TYPESCRIPT · NODE · HACK THE NORTH 2026devpost

─▶ coordinator ─▶ your mac or windows machine

Budget Buddy

Budget tracking, live stock data, and growth projections, built for people our age who have never invested and do not know where to start.

NEXT.JS · CLERK · CALGARYHACKS 24source

$500 at 6% a year for 5 years ─▶ $669.11

Pile

Turns your saved and forgotten reading pile into a debate between two AI hosts, with reminders anchored to the exact audio second.

NEXT.JS · AUDIOsource

hover the episode · click to pin a reminder

Services

L3 · ONE LAYER DOWN

Rust HTTP Server

RUST · AXUM · SQLITE · WEBSOCKET

A server built to learn how the real ones are put together. Sign-in with JWT access and refresh tokens and role checks, live metrics over WebSockets, a background job queue that retries, a sliding-window rate limit, an in-memory cache, and full text search that forgives typos. The middleware is written by hand rather than pulled in.

GET /api/posts
headers › log › validate › metrics › rate_limit › cache › auth › cors › routenothing sent yet
fig. 2 · one request through the server's middleware, in the order its router stacks them · the window is the server's 60 s, the limit cut to 10 so you can hit it

Dossier

Privacy first PDF toolkit: 42 operations that never leave your machine, served to humans as a web app and to agents over MCP.

TYPESCRIPT · MCP · STATIC EXPORTlivesource

merge · splitByRanges · splitByPageCount · extractPages · deletePages · duplicatePages · and 36 more

Runtime

L2 · LANGUAGES AND MACHINES

Two projects that form a loop: a language I built, and the emulator that steps through what it compiles.

QALA SOURCEfib.qala
fn fibonacci(n: i64) -> i64 is pure {
    if n <= 1 { return n }
    return fibonacci(n - 1)
         + fibonacci(n - 2)
}
ARM64 BACKEND--target arm64
fibonacci:    stp   fp, lr, [sp, -32]!    mov   fp, sp    str   x0, [fp, 16]    ...
A64 PLAYGROUND
pc 0x0000_0014 stpx0 0x0000_000afp 0x7fff_fff0sp 0x7fff_fff0· called with n = 10
fig. 3 · the loop: a language i wrote, compiled to the assembly i teach, stepped in the emulator i co-built

Qala

RUST · WASM · CRATES.IO

A statically typed language where is pure and is io are promises the compiler actually checks, and defer means the file really closes. Lexer to typechecker to bytecode VM, plus an ARM64 backend, all in Rust and on crates.io.

QALA CHECKclick the effect
fn f() is  { println("hi") }error: pure function `f` calls io function `println`  --> 1:18   |1  |   fn f() is pure { println("hi") }   |                    ^^^^^^^^^^^^^   |   = note: pure functions cannot call functions with io effects   = hint: remove the `is pure` annotation, or refactor to remove the io call

AArch64 Playground

RUST · WASM · NEXT.JS

A browser ARM64 emulator and step debugger, built for the CPSC 355 students I teach and now the tool the course runs on. This term that means about 1,400 visitors and 6,000 page views a month. I wrote the Rust interpreter in three weeks and lead it with a professor and two collaborators. The one rule is that the department's server is always right, so all 618 programs the site ships are checked against it byte for byte. It even copies the server's traps. After a printf, the registers a library call may overwrite hold junk, so a program that only worked by luck fails here too, and the console tells you why. 32 lessons, 68 auto-checked exercises, works offline, open source.

X9 ACROSS PRINTF
13mov     x9, 4214ldr     x0, =fmt_m15mov     x1, x916bl      printf17ldr     x0, =fmt_m18mov     x1, x919bl      printfconsole is empty

Kernel

L1 · THE HARDWARE IS YOUR PROBLEM NOW

One project lives here, and it gets the full sheet.

AEOS

A monolithic ARM64 kernel with a windowed desktop, written from scratch

DOC AE-003 · C, ARMv8 ASM · QEMU VIRT

GENERAL DESCRIPTION

Boots from EL2 to EL1 with stack and BSS set up by hand, turns the MMU on with an identity map it builds itself, brings up a buddy allocator and first fit heap, services GICv2 interrupts and the generic timer, schedules preemptively at 100 Hz, and runs a loaded ELF at EL0 behind a real privilege boundary. Then it brings four cores online over PSCI, answers ping through its own network stack, and composites a windowed desktop over a VirtIO GPU at 30 frames per second.

Deliberately small and honest about its gaps: no kernel W^X, no cross-core preemption, no TCP. The whole kernel reads end to end in a few sittings, which is the point.

PHYSICAL MEMORY MAP

kernel
heap 4M
stack
free · PMM owns the rest
0x4000_0000widths not to scale0x5000_0000
AEOS desktop running in QEMU: a terminal showing shell help beside a Tetris window, with the taskbar clock at the bottom
fig. 4 · the desktop, composited by the kernel: terminal and tetris on QEMU
  • Window manager with drag, focus shadows, open and close animation, all easing in fixed-point: the kernel has no floating point
  • 8 built in apps, including a terminal, a vim style editor, and Tetris
  • A shell with 30 commands · test suite and security audit run in CI

Silicon

L0 · THE FLOOR

Peregrine

C++ · AVX2 · CUDA, cuBLAS

A linear algebra library for Python that picks the right silicon for the shape of the problem: AVX2 SIMD on the CPU, cuBLAS on the GPU, one NumPy-compatible API above both with no copying in between. The benchmarks include the sizes where it loses.

MEASURED, NOT ESTIMATED
DEVICE-RESIDENT FLOAT32 MATMUL28x NumPy
FUSED THREE-OP CHAINS, GPU71x unfused NumPy
FUSED THREE-OP CHAINS, CPU3.2x unfused NumPy

measured on the project's own harness: routing offloads to the GPU only past the measured transfer-cost crossover. numbers are shape- and device-specific; the harness and methodology live in the repo.

WHERE DOES THE MATMUL RUNfloat32 · warm
ndata starts on0.48x NumPy · loses to transfer costthe copy costs more than the GPU saves, so it stays on the CPU
fig. 5 · every bar is a measured row from the repo's benchmark tables, the losing ones included

I ALSO TEACH THIS LAYER

Head TA for CPSC 355 at the University of Calgary, now in a second term running it for about 300 students: computer architecture, C, and ARMv8 assembly. I debug student assembly for a living, which is why everything on this page tries to be legible. the person is one layer further down

Bedrock

BELOW THE STACK · THE PERSON

I moved from Saudi Arabia to Calgary to understand how computers work, and I meant it literally: transistors up. The philosophy minor pulls the other way. It taught me to ask why a design should exist before asking how to build it, and that question has killed more bad architectures than any code review. When I am not at a keyboard I am bouldering, lifting, or lost in a reels spiral I will not defend.

CAPABILITIES, EACH WITH ITS PROOF

ARMv8 assemblyAEOS · Qala backend · CPSC 355
CompilersQala, lexer to VM to ARM64
ConcurrencyRust HTTP Server · AEOS scheduler
SIMD and GPU computePeregrine
Product webDUST · Pile · Budget Buddy
Making hard things legibleAArch64 Playground · 355 labs · this page

EXPERIENCE

SEP 2026 · PRESENT

Head TA, CPSC 355, second term

Running the computer architecture and ARMv8 assembly course again, this time for about 300 students, on the emulator I built for it.

JUN 2026 · PRESENT

Technical advisor, MIST (Muslim Innovators in Science and Technology)

The person club members come to with technical problems: what broke, how to build it, what to build next.

MAY 2026 · AUG 2026

Undergraduate researcher, two PURE awards

Two research awards in one summer. The AArch64 Playground: a browser ARMv8 emulator and debugger for the assembly course, built so its output matches the department's real servers. And a model for placing copies of tasks across unreliable edge devices, solved at full scale with Gurobi, where we found why the published baseline dropped more tasks than it should.

SEP 2025 · APR 2026

TA, then Head TA, CPSC 355 · tutorial lead, CPSC 413

Computer architecture and ARMv8 assembly for 120 students: led the five-TA team, built the autograders (Python, Docker, QEMU) that grade ARM64 programs on x86 servers, wrote the tutorials and 100 practice problems, and ran the algorithms tutorials for CPSC 413.

OCT 2024 · OCT 2025

AI training specialist, Outlier

Graded AI-written Python across 500 paired answers for correctness and efficiency.

 

B.Sc. Honours Computer Science, minor in Philosophy

University of Calgary · Dean's List, 2023 to 2025 · Aramco Sponsor Award Winner, Hack the North 2026 · graduating June 2027.

The stack ends here.
Say hello.

aamsdoumani@gmail.com

© 2026 abdalla eldoumani