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 is left over from when the planets formed. I've also 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 four repos work together to estimate whether an uncrewed asteroid mining mission would turn a profit, and the fifth checks the pipeline against other people's code. The catalog also feeds my paper.
| economicspace the pipeline 25,268 lines of code 98,204 total lines |
The main pipeline. It builds a catalog from public astronomy databases, prices the minerals, costs the transport, then runs the rocket equation and a cost cascade to rank targets by profit. |
| AsteroidCatalog Stage 1: the catalog 5,701 lines of code 13,599 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. |
| spacecost Stage 3: mission costs 8,725 lines of code 17,478 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,531 lines of code 48,602 total lines |
The sources behind the three repos above, ranked into tiers by authority, with the numbers I use pulled into a CSV for each source. |
| starred-repos pipeline audit 705 lines of code 2,528 total lines |
An audit of 17 repos I'd starred, read for code and data the pipeline could use. 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. |
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.
| asteroid-belt-gradient paper and code 2,862 lines of code 6,529 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 18,769 lines of code 111,708 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. |
Four figures from the asteroid-belt-gradient paper (each links to the full size):
| 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. |
| Satellite-Space-Flight orbit simulator 12,796 lines of code 22,010 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,712 lines of code 20,801 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,077 lines of code 2,202 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 646 lines of code 1,589 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. |
| 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:
- 23 Oct · Mars Global Mosaic: The label proposals built on the drive: 1,086 rows, the laptop's result exactly
- 23 Oct · Mars Global Mosaic: The final started: AASTeX paper and final deck, and the drive merged with §68
- 22 Oct · General_Research: Round 240: owner rejects 8 sources; new "Sources to replace" list with 15 flags
- 22 Oct · General_Research: Round 239: source audit; owner rejects 25 sources that back no cell or that upstream stopped citing
- 21 Oct · starred-repos: README: economicspace's orbital.py keeps only elements_to_state; the solvers are here alone
- 21 Oct · spacecost: Cut 0.12.6: seven wording and citation RCs (data contract 1.23.6)
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. 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.

















