{"id":51068015,"url":"https://github.com/harshcasper/rocketmodeler","last_synced_at":"2026-06-23T08:03:07.317Z","repository":{"id":364963785,"uuid":"1269924641","full_name":"HarshCasper/RocketModeler","owner":"HarshCasper","description":"Web rebuild of NASA Glenn's RocketModeler applet in TypeScript and React","archived":false,"fork":false,"pushed_at":"2026-06-15T08:23:33.000Z","size":248,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-15T11:19:39.858Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HarshCasper.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-15T08:17:33.000Z","updated_at":"2026-06-15T08:55:10.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/HarshCasper/RocketModeler","commit_stats":null,"previous_names":["harshcasper/rocket-modeler"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/HarshCasper/RocketModeler","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HarshCasper%2FRocketModeler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HarshCasper%2FRocketModeler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HarshCasper%2FRocketModeler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HarshCasper%2FRocketModeler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HarshCasper","download_url":"https://codeload.github.com/HarshCasper/RocketModeler/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HarshCasper%2FRocketModeler/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34680621,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-23T08:03:06.538Z","updated_at":"2026-06-23T08:03:07.312Z","avatar_url":"https://github.com/HarshCasper.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RocketModeler\n\n## Intro\n\nA model rocket sandbox in the browser. You design a paper-style rocket\nin one view, then put it on a launchpad in the other and watch it fly.\nLive at https://rocketmodeler.harshcasper.dev/.\n\nThe design view exposes the rocket parameters that matter for stability\nand altitude: body length and diameter, nose cone length and shape, fin\nlength, width, count and offset, stage count, engine choice per stage,\nmaterials and parachute size. As you change them, the centre of\ngravity, centre of pressure, total mass and stability caliber update in\nreal time, with a coloured gauge telling you whether the design is\noverstable, stable, marginal or unstable.\n\nThe launch view runs the rocket in a real flight simulation. The\nengine produces thrust through its published burn curve, mass drops as\nfuel burns, the parachute deploys at ejection, atmospheric density\ndrops with altitude, the launch rod constrains motion for the first\n110 cm, and aerodynamic torque turns the nose into the relative wind so\ngravity turn and weathercocking emerge naturally. A HUD reports\naltitude, speed, g-force and live stability margin, and after landing\na summary modal lists apogee, peak speed, peak g, time to apogee and\ntotal flight time with altitude, speed and acceleration charts.\n\n| Design view | Launch view |\n| --- | --- |\n| ![design](docs/images/rocketmodeler-design.png) | ![launch](docs/images/rocketmodeler-launch.png) |\n\n## Background\n\nIt is a TypeScript and React port of the [NASA Glenn Research Center\nRocketModeler applet](https://www.grc.nasa.gov/www/k-12/VirtualAero/BottleRocket/airplane/rktsim.html)\nthat Eric Bishop wrote in Java around 2002. The original needed the\nJava browser plugin, which no current browser still ships, so this is\nan independent rebuild as a static web app. Not affiliated with NASA.\nThe original applet is public-domain US Government work.\n\n## Run it\n\n```bash\nnpm install\nnpm run dev\nnpm test\nnpm run build\n```\n\n`npm run dev` serves at http://localhost:5173. `npm test` runs the\nvitest suite covering physics and the URL codec. `npm run build`\nwrites a production bundle to `./dist`.\n\n## Design view\n\nThe rocket is drawn as an SVG. Hover the body to reveal drag handles on\nthe nose tip, body length, fin length and fin width. The right sidebar\nhas sliders for the same parameters plus fin count, stage count,\nmaterials, drag coefficient, payload mass and parachute size. Nose\nshape is one of cone, ogive, parabolic or elliptical, and the Barrowman\nCP recomputes for the chosen shape.\n\nThe preset menu has Estes Alpha III, Big Bertha and a two-stage\nexplorer. Each engine in the catalog renders a small thrust curve and\nits total impulse next to the dropdown. The caliber gauge widens its\nrange when a design is overstable so the needle stays on the bar.\n\n## Launch view\n\nCanvas2D scene with a chase camera. Two cloud layers drift at different\nspeeds, low hills sit on the horizon, and the launch rod stands to the\nleft of the rocket with an ignition wire running to the base. While the\nrocket is still on the rod (the first 110 cm of axial travel) its\nvelocity is projected onto the rod axis. After it clears the rod, a\nheading alignment term turns the nose toward the relative wind\ndirection; stiffness scales with dynamic pressure and stability margin.\nGravity turn and weathercocking both fall out of this without a full\nmoment-of-inertia integration.\n\nThe HUD shows time, phase, altitude, speed, g-force, max altitude,\nstage and live stability margin. A trail traces the trajectory and a\nsmoke plume drifts in the wind during boost. Mach 1, apogee and\nparachute deployment surface as caption banners with timestamps. Force\nvectors for thrust, gravity and velocity can be turned on from the\ncontrols panel.\n\nAfter landing the summary modal lists apogee, peak speed, peak g, time\nto apogee and total flight time, with altitude, speed and acceleration\ncharts. A replay button plays the recorded samples back at 1x with a\nscrub bar for stopping at a specific moment. A \"Skip to landing\"\ncontrol fast-forwards through the parachute descent if you do not want\nto wait it out.\n\n## Keyboard\n\n`D` opens the design view, `L` the launch view, `Space` starts or\npauses a flight, `R` resets, `?` opens the about dialog.\n\n## Sharing\n\nEvery design edit gzips into the URL hash, so the address bar is the\nshareable snapshot. The last session and the dark mode preference are\nkept in `localStorage`.\n\n## Physics\n\nCG is the mass-weighted port of the original calculation across the\nnose cone, body tube, fins, engines and payload. The same calculation\nruns in flight, which is what makes the live CG in the HUD shift with\nfuel burn and stage drop.\n\nCP is Barrowman with shape-dependent nose terms. `X_n` is 0.667 L for a\ncone, 0.466 L for an ogive, 0.5 L for a parabolic, 0.333 L for an\nelliptical nose. The fin term is the closed form for triangular delta\nfins with body-fin interference `K_fb = 1 + R/(s+R)`.\n\nAtmosphere is the ISA troposphere, valid to 11 km.\n\nThe integrator is semi-Euler at 100 sub-steps per visible frame\n(`dt = 0.045 s`). Code lives under `src/physics/`.\n\n## Credit\n\nEric Bishop wrote the original applet at Ohio State University working\nwith NASA Glenn Research Center. This rebuild is by [@HarshCasper](https://github.com/HarshCasper).\nMIT licensed; see `LICENSE`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharshcasper%2Frocketmodeler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fharshcasper%2Frocketmodeler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharshcasper%2Frocketmodeler/lists"}