I'm an Astronomy & Astrophysics student at Florida Tech, double majoring in Planetary Science. Most of the work here is about asteroids. I built a catalog of about 1.58 million of them and a pipeline that estimates whether mining one would make money, then used the catalog for a paper on whether the belt's S/C composition gradient shows where its asteroids formed. Corrected for two biases, the switch from S-types to C-types turns out too gradual for a snow line they formed behind, which points to carbonaceous asteroids carried in from beyond Jupiter. I've also mapped landforms across Mars from orbital imagery, trained two image classifiers and written an orbit simulator.
Outside of school I'm CTO of AspireCURES, a company that matches patients with rare brain diseases to research, and VP of Database Management at Sisters Hope Foundation, a rare-disease nonprofit. I run the websites and patient databases for both.
Space economics · Planetary science · Deep learning · Simulation · Rare-disease work · Elsewhere · Commits · Languages · Flybys · Contact
The first five repos work together to estimate whether an uncrewed asteroid mining mission would turn a profit, and the sixth checks the pipeline against other people's code. The catalog also feeds my paper.
| economicspace the pipeline 22,487 lines of code 93,515 total lines |
The main pipeline. It installs a pinned catalog release from AsteroidCatalog and pinned prices from spacevalue, costs the transport with spacecost, then runs the rocket equation and a cost cascade to rank targets by profit. |
| AsteroidCatalog Stage 1: the catalog 5,869 lines of code 13,996 total lines |
The pipeline's catalog stage, moved into its own repo. About 1.58 million asteroids from JPL SBDB, SsODNet, NEOWISE and MP3C, cross-matched, with the source of every value recorded and a cited composition estimate for each taxonomy class. Releases are frozen so other projects can pin one. |
| spacevalue Stage 2: mineral prices 2,980 lines of code 7,089 total lines |
The pipeline's pricing stage as an installable Python package: what a kilogram of each mineral and element is worth at eight places you could deliver it, from Earth's surface to Mars. Away from Earth a material is worth the better of being used there, which saves launching it, or being flown home and sold. Prices come from recorded quotes, so a build can be repeated, and each dated release carries all eight tables as CSVs. |
| spacecost Stage 3: mission costs 9,192 lines of code 18,441 total lines |
The pipeline's mission-cost stage as an installable Python package: reference tables for mission cost and mass, with a citation on every row. |
| General_Research the sources 2,542 lines of code 51,412 total lines |
The sources behind the four repos above, ranked into tiers by authority, with the numbers I use pulled into a CSV for each source. |
| starred-repos pipeline audit 3,061 lines of code 9,333 total lines |
An audit of 17 repos I'd starred, read for code and data the pipeline could use, and then of 194 more. Its probe scripts check economicspace's delta-v estimates against JPL's NHATS and against optimized Lambert transfers, and found two errors that partly cancel: the plane change is overcharged, and the transfer geometry undercharged by more. Others found that a guessed taxonomy is right about half the time, and that 42 of the 69 near-Earth asteroids in the ranking's top 100 can't be observed again before 2036. |
Where it stands. One row for each place the pipeline can deliver to, from its latest full-catalog runs: what the best mission costs for each dollar its cargo earns (filled dot) and what the median asteroid's does (open dot). Left of the dashed line, a mission pays for itself; none does yet.
What it rests on. The 695 sources in General_Research, in 30 domains, one bar for each, split by authority: T1 peer-reviewed papers, T2 NASA, ESA and AIAA reports, T3 government data with a DOI, and T4 grey sources such as company documents and price pages. 66% are T1 or T2. The biggest, launch economics with 152, is mostly grey sources (117).
| asteroid-belt-gradient paper and code 2,867 lines of code 6,539 total lines |
Code and paper for Constraints on the Origin of the Asteroid Belt's Compositional Gradient from Debiased Taxonomic Data. It tests whether the belt's switch from S-types to C-types dates back to formation, using 161,659 classified asteroids from AsteroidCatalog after collapsing collisional families and correcting for the brightness bias that favors S-types. The code rebuilds every figure and number in the paper from two public input files. |
| Mars Global Mosaic Mars GIS mapping 27,072 lines of code 1,620,994 total lines |
My project for OCN 4704 (Remote Sensing). In ArcGIS Pro I lined up Viking color, THEMIS day and night infrared, and HRSC/MOLA elevation between 60°N and 60°S to map lava flows, river channels and impact craters. A support vector machine classifies the landforms across that whole band, scoring 73.8% on areas it never trained on, and I've since trained RetinaNet and U-Net models to compare against it. I'm now widening the map from four classes to seven for the final paper, due 8 December; on the reviewed seven-class labels a U-Net already scores 69.0% on held-out areas, against 42.5% for the SVM. |
What it found. One row for each sample the paper fits, the raw count first. The dot is where C-types reach half of the asteroids, with its bootstrap range, and the bar runs from 10% to 90%. The raw count puts it at 2.84 au. Corrected, the turn sits at 2.41–2.47 au, inside the snow line at 2.67 au, and takes 1.4–1.5 au to go from 10% to 90% C-types, wider than the belt itself. A snow line the asteroids formed behind would leave a sharp step, so the paper favors C-types carried in from beyond Jupiter.
Four figures from the asteroid-belt-gradient paper (each links to the full size):
Four maps from the Mars project (each links to its full sheet):
| star-spectral-classifier stellar classification 2,946 lines of code 7,333 total lines |
A multi-task CNN that predicts a star's Morgan-Keenan spectral letter and subclass digit from Pan-STARRS color cutouts, without any spectra. On 14k held-out cutouts it gets the letter right 84.3% of the time, and 98.4% within its top two guesses. Finished October 2025. |
| drone-target-id aerial target ID 1,509 lines of code 4,779 total lines |
YOLO finds and segments targets in aerial footage, then a multi-output CNN gives each one a fine class and a valid/invalid call. On a 27k held-out test set it scores 87.1% on fine class and 91.3% on valid/invalid. Finished December 2025. |
How each model's mistakes fall on held-out data (each links to the full size):
| Satellite-Space-Flight orbit simulator 13,324 lines of code 22,635 total lines |
A 3-D Earth orbit simulator in pure Python. The physics runs in numpy (J2 to J4 gravity, drag, Sun and Moon, solar radiation pressure, maneuvers) and pygame draws it. You can also fly a multi-stage rocket to orbit from anywhere on Earth, or from one of fifteen real launch complexes. |
Four of the scenes it draws for its own README (each links to the full size):
Both repos are private, but the sites are public.
| AspireCURES CTO 10,683 lines of code 20,805 total lines |
AspireCURES connects patients with rare brain diseases such as CSF1R-ALSP to clinical trials, studies and specialists. Its site runs on Cloudflare Pages with serverless registration, and I've built a weekly research feed for its nine disease pages. |
| Sisters Hope Foundation VP, Database Management 5,219 lines of code 11,270 total lines |
Sisters Hope is a 501(c)(3) patient advocacy group for ALSP and CSF1R-related disorders. I moved their site off Squarespace and onto Cloudflare Pages. |
| website portfolio site 7,615 lines of code 10,124 total lines |
The code for my portfolio site. Plain HTML, CSS and JavaScript with no build step. |
| quietlaunch Streamlit launcher 1,094 lines of code 2,359 total lines |
Starts a Streamlit app with no console window. A small control window shows the server booting, and why it failed if it does, opens the browser once the port answers, and stops the server and its children when closed. I split it out of economicspace's dashboard launcher; it uses only the standard library and is tested on Windows, Linux and macOS. |
| quietqueue unattended job queue 653 lines of code 1,714 total lines |
Runs a queue of long jobs unattended on Windows and keeps it alive through a closed shell, a stray Ctrl+C, a reboot or a second copy started at logon. Each job is one subprocess, a ledger records what's finished so a restart picks up where it stopped, and the whole process tree can be paused and resumed without losing the job in flight. I split it out of economicspace's campaign runner, which ran a 28-job model campaign over several days. |
| samebytes bit-identity checks 2,057 lines of code 4,453 total lines |
Checks that two sets of bytes really are the same, in three places where they quietly aren't: a synced folder (OneDrive, Google Drive) serving stale files while |
| Hermes_Skills agent skills |
My library of 253 agent skills in 23 categories, built for my Hermes agent setup. |
Every commit I've made to the repos above, from the first to this week. Each ring is one section of this page, the outermost the first; time runs clockwise from twelve o'clock, and a bigger dot is a busier week. Bots' commits aren't counted.
My latest commits:
- 2 Nov · Mars Global Mosaic: D35: qualify the seven-class U-Net's balanced-accuracy lead
- 2 Nov · Mars Global Mosaic: A16: v2 seven-class maps scored on the 1,652 v3 held-out polygons
- 1 Nov · General_Research: Rounds 310-314: market, ISRU and stage audits
- 1 Nov · General_Research: Rounds 308-309: spin cutoff and rig calendar cadence
- 29 Oct · starred-repos: README: where each finding now stands in the pipeline
- 29 Oct · starred-repos: Self-checking repo, recorded network inputs, and five more probes (F15-F19)
The lines of code under each repo's name, added up by language.
The asteroids coming within 20 lunar distances of Earth in the week ahead, from NASA/JPL's close-approach data, refreshed every Monday. On the dial, each one sits at the day and distance of its closest approach. The sizes are estimates from each body's brightness, as almost none has been measured.
The contact form on my site goes straight to my email, or you can message me on LinkedIn.
The charts, counts and cards on this page are drawn by Python scripts from the repos' own data, and most of them refresh every Monday. See how they're made.























