Show HN: I built a space travel calculator using Vanilla JavaScript
Posted by captainnemo729 7 hours ago
I built this because measuring my age in years felt boring—I wanted to see the kilometers.
The first version only used Earth's orbital speed (~30km/s), but the number moved too slowly. To get the "existential dread" feeling, I switched to using the Milky Way's velocity relative to the CMB (~600km/s). The math takes some liberties (using scalar sum instead of vector) to make the speed feel "fast," but it gets the point across.
Under the hood, it's a single HTML file with zero dependencies. No React, no build step. The main challenge was the canvas starfield—I had to pre-allocate the star objects to stop the garbage collector from causing stutters on mobile.
Let me know if the physics makes you angry or if the stars run smooth on your device.
Comments
Comment by Tiberium 2 hours ago
I'm not against vibecoded stuff, but the author said it's a "deliberate design choice" in one of the comments, clearly not being open about the use of LLMs.
> https://web.archive.org/web/20260124143216/https://cosmic-od...
/* FIXED: Changed cursor from 'help' to 'default' to avoid confusion */
/* --- UPDATED MOON LOGIC --- */
Comment by croisillon 2 hours ago
Comment by Tiberium 1 hour ago
Perhaps it's not immediately obvious, but an LLM like Gemini 3 Pro can give you a demo like this in just a few minutes. Is it really worth a "Show HN"?
Comment by croisillon 1 hour ago
Comment by potluri 2 hours ago
Comment by captainnemo729 2 hours ago
you're totally right about the resize jank though. the math definitely breaks when the window dimensions change. on the todo list.
Comment by reconnecting 5 hours ago
Life looks much easier when realising that we're all flying at least ~30 km/s through dark space every second of our lives.
Thank you so much! I was just thinking about how to create something similar a month ago for my birthday, but didn't succeed like you did.
Comment by captainnemo729 5 hours ago
And definitely give yours another shot. Since this is just vanilla JS, feel free to view source on mine to see how I handled the frame loop if you get stuck.
Comment by reconnecting 5 hours ago
Comment by captainnemo729 5 hours ago
Comment by netsharc 5 hours ago
Comment by captainnemo729 5 hours ago
pushing a label fix now so it's not a guessing game. thanks.
Comment by widforss 6 hours ago
It's interesting to see how little effect the orbit and rotation had on the straight line. A proposal is to align the numbers for the different movement categories so that it's easier to see the magnitudes of them.
It took me a couple of seconds to understand the concept, from the title I though it was going to be a planner to show gravity assists etc.
Comment by captainnemo729 6 hours ago
Good call on the number alignment. I'm using a variable-width font which makes comparing them messy. I'll switch to monospace or tabular-nums in the next push so the magnitudes scan better.
And fair point on the title-'calculator' implies mission planning. Maybe 'travel visualizer' would have been safer!
Comment by anileated 5 hours ago
Comment by captainnemo729 5 hours ago
Comment by netsharc 5 hours ago
Comment by captainnemo729 4 hours ago
treating 'distance traveled' as a proxy for age since we're all stuck on the same rock moving at the same speed.
Comment by croisillon 5 hours ago
also there are some cursors with question marks but they don't espatially ;) call the FAQ, do they? firefox on win10
Comment by captainnemo729 5 hours ago
re: the cursors that's definitely my bad UX. they are just hover tooltips (standard title attributes), but setting the cursor to help (?) makes them look like clickable buttons. i'll swap that out so it's less confusing. thanks for the firefox check.
Comment by DaveJorg 4 hours ago
Comment by captainnemo729 4 hours ago
i thought about it, but i was worried a log scale might abstract away the 'feeling' of the distance (making a light year look deceptively close to a kilometer). i want the user to feel small, and log scales tend to make things look manageable.
but you're right it's probably the only way to fit the solar loops and galactic arc on the same screen visually. might be worth a prototype for v2.
Comment by croisillon 1 hour ago
fr: {
title: "Odomètre cosmique",
subtitle: "Compteur de voyage dans l'espace depuis la date de naissance",
copied: "Lien copié !",
latitude: "Latitude",
mission_duration: "Durée de la mission",
rotated: "1. Rotation de la Terre",
orbited: "2. Révolution autour du Soleil",
solar_travel: "3. Revolution dans la Voie Lactée",
galactic_travel: "4. Déplacement de la Voie Lactée dans l'Univers",
total_distance: "DISTANCE TOTALE",
traveling_at: "Vitesse :",
displacement_title: "Déplacement en ligne droite",
displacement_desc: "Distance parcourue par rapport à votre emplacement à la naissance en ligne droite (sans tenir compte des rotations et révolutions circulaires).",
moon_trips: "Allers-retours vers la Lune",
moon_desc: "Distance jusqu'à la Lune et retour à la Terre.",
passed_pluto: "Passages par Pluton",
pluto_desc: "Tours complets du système solaire.",
light_year_prog: "Progression jusqu’à 1 année-lumière",
you_are: "Tu as voyagé à",
ly_away: "d'une année-lumière.",
manual_title: "Manuel de vol",
faq_1_q: "1. Qu'est-ce que la \"rotation\"?",
faq_1_a: "La distance parcourue en raison de la rotation de la Terre sur elle-même. À l'équateur : ~1.600 km/h (1,000 mph). Aux pôles : 0.",
faq_2_q: "2. Qu'est-ce que la \"révolution autour du Soleil\"?",
faq_2_a: "La Terre tourne autour du Soleil à ~107.000 km/h (66,000 mph). C'est ton tour annuel.",
faq_3_q: "3. Qu'est-ce que la \"Revolution dans la Voie Lactée\"?",
faq_3_a: "Le Soleil entraîne les planètes du Système Solaire dans une révolution autour de la Voie Lactée à ~792.000 km/h (490,000 mph).",
faq_4_q: "4. Qu'est-ce que le \"déplacement dans l'Univers\"?",
faq_4_a: "Notre galaxie se déplace à 2.1 million km/h (1.3 million mph) par rapport au fond cosmologique.",
faq_5_q: "Distance totale?",
faq_5_a: "La somme de toutes ces vitesses combinées en une longueur totale parcourue depuis ta naissance.",
privacy: " Note de confidentialité : Ce site fonctionne entièrement côté client. Votre date de naissance est traitée localement et n'est jamais envoyée à un serveur.",
unit_y: "y", unit_m: "m", unit_d: "d", unit_h: "h", unit_min: "m", unit_s: "s",
welcome: "Bienvenue"
},Comment by arendtio 5 hours ago
Comment by captainnemo729 5 hours ago
Comment by arendtio 2 hours ago
Comment by DmitryO 3 hours ago
Comment by captainnemo729 2 hours ago
Comment by redmattred 4 hours ago
Comment by captainnemo729 4 hours ago
Comment by dalton_zk 4 hours ago
Comment by captainnemo729 4 hours ago
Comment by bvan 2 hours ago
Comment by captainnemo729 2 hours ago