Nellie Mullane

Mathematician and software engineer in SF building tools to make cybersecurity more accessible.

Technical Skills

Cybersecurity & AppSec

SAST engine development, secret scanning, penetration testing, PKI/X.509, vulnerability modeling

AI & LLM Engineering

BAML prompt engineering, Temporal workflow orchestration, structured output parsing, AI-assisted code analysis

Backend & Architecture

Go, gRPC/Connect-Go, PostgreSQL, multi-tenant SaaS, SpiceDB, SQLC

Frontend

TypeScript, Next.js, React, GraphQL (Pothos)

Systems & Low-Level

C, SIMD, OpenMP, OpenMPI, RISC-V, x86 Assembly

Mathematics

Graph theory, computation and complexity theory, algorithm design and optimization, proof writing, mathematical logic, abstract mathematics

Professional Work

Keygraph — MDM, Shannon, Application Security Tooling, Black Box Pentesting
Shannon — Open-Source AI Pentester Co-designed — open-source autonomous AI pentester built on an agentic pipeline mirroring real pentest methodology. 35k+ GitHub stars, #1 trending on GitHub
MDM Platform — Enterprise macOS Device Management Lead engineer — built and designed the full product: desktop software, backend, web app, and coordination with Apple MDM, ABM, and MDM push certificate APIs
Application Security Suite — SAST, SCA, Secrets, Shannon Pro Designed and built Keygraph's application security products — a SAST engine powered by code property graph analysis with LLM reasoning, SCA with reachability filtering, secret scanning, and Shannon Pro
Black Box AI Pentester — Autonomous Web Application Security Testing Co-designed and implemented — autonomous black box pentester that takes a URL and exploits vulnerabilities using a real browser and terminal, without access to source code

Undergrad & Personal Projects

Built by hand before the age of AI coding!
AlgoRacer – Real-Time Multiplayer Coding Race Full-stack multiplayer coding race game with real-time WebSocket gameplay
Action Map Website Development Rails app to search political representatives and view real-time news
NGram Viewer Interactive tool for analyzing historical word usage frequency and relationships
Computer Graphics Projects Rasterization, path tracing, mesh processing, and cloth simulation in C++
Build Your Own World Pseudo-random 2D world generator with explorable rooms and hallways
Optimized Matrix Convolution SIMD/OpenMP/OpenMPI parallelized convolution — ranked #7 out of 600+
Secure File Storing and Sharing Platform Encrypted file sharing with cryptographic access control and tamper detection
Tiger Team: Identifying Web Server and Codebase Vulnerabilities Exploited buffer overflows, SQL injection, XSS, and path traversal in a target server
Build CPU RISC-V CPU built from scratch in Logisim with full instruction pipeline
Zero Approximation Algorithm Root-finding algorithm using the Zeroin method in MATLAB
UC Berkeley Coursework B.A. Computer Science, B.A. Mathematics, Minor in Spanish — GPA: 3.82

Creative Logic and Mathematics

Cantor Set Proof

Turing Machines


Language Decision: MOD 2

Description: This Turing machine decides whether the number of '1's in the input is even (MOD 2). It accepts if the number of '1's is even and rejects otherwise.

Final State:

Final Tape:

Steps:

Result:

Function Computation: push

Description: This Turing machine computes the function push: {0, 1}* → {0, 1, $}*, where push(w) appends a '$' character to the beginning of string w (e.g., 101 → $101).

Final State:

Final Tape:

Steps:

Result:

Language Decision: Palindromic Strings Around #

Description: This Turing machine decides whether the string on the left side of the '#' is the same as the string on the right side. For example, it accepts '0110#0110' but rejects '011#110'.

Final State:

Final Tape:

Steps:

Result:

Function Computation: plus1

Description: This Turing machine computes the function plus1: {0, 1}* → {0, 1}*, interpreting the input as a binary number from least-significant bit (LSB) to most-significant bit (MSB). It outputs the binary representation of the input number plus one, processed bit by bit. For example, 101 (binary for 5) → 011 (binary for 6).

Final State:

Final Tape:

Steps:

Result:

Function Computation: unary2binary

Description: This Turing machine computes the function unary2binary: {1}* → {0, 1}*, converting unary strings to their binary representation. The binary representation is processed and printed from least-significant bit (LSB) to most-significant bit (MSB), appearing reversed to us. For example, 111 (unary representation of 3) → 11 (binary representation of 3, printed as 11 from LSB to MSB).

Final State:

Final Tape:

Steps:

Result:

Language Decision: {aibjck | i, j, k ∈ Z≥0, i < j < k}

Description: This Turing machine decides the language L = {aibjck | i, j, k ∈ Z≥0, i < j < k}. It checks whether the counts of 'a's, 'b's, and 'c's satisfy the strict inequality i < j < k (e.g., abbccc is accepted, but aabbccc is rejected).

Final State:

Final Tape:

Steps:

Result:

Language Decision: {ak | k is a power of 2}

Description: This Turing machine decides the language L = {ak | k is a power of 2}, where k ∈ {1, 2, 4, 8, ...}. It identifies strings of 'a' whose lengths are powers of 2.

Final State:

Final Tape:

Steps:

Result: