Sirius — About the Project
Inspiration
We started with a simple question: what was the sky doing the night you were born?
Every star you see tonight is a time capsule. The light reaching your eyes left that star years, decades, even centuries ago — meaning right now, somewhere out there, a star is receiving the light from the moment the Moon Landing happened. Another is receiving the light from World War II. Another from your mother's birthday.
We wanted to make that real and tangible. Not an infographic, not a Wikipedia article — an actual, navigable universe where history lives in the stars, and where your family's story is written across the sky.
What It Does
Sirius lets you search any historical event or year and instantly see which real stars in the night sky are receiving the light from that exact moment right now. The light that left Earth at that event is currently arriving at those stars — meaning in a very real sense, those stars are witnessing that event today.
Key features:
- Cosmic Search — type any year or choose a preset event (Moon Landing, Big Bang, Fall of Rome, World War II, and 65+ more) and we query three live astronomical databases to find the exact real stars at that distance
- 3D Star Map — a live Three.js WebGL scene places you inside the universe, with stars rendered at accurate relative distances; drag to orbit in 3D space
- Era Mode — colour-codes every visible star by the historical era it is currently "watching" on Earth, with a live legend spanning Prehistoric → Ancient → Classical → Medieval → Renaissance → Early Modern → Modern
- Family Constellation — enter birth dates for family members and the system finds the real star currently receiving each person's birth moment; it draws their stars as a named constellation in the live 3D sky, and opens a personal star card for each family member showing exactly what moment that star is witnessing right now
- Find It Tonight — real-time altitude and azimuth calculations tell you exactly which direction to point in the sky to find your star tonight, with compass bearing and best-visibility window
- Letters to Stars — write a message tied to a real star; it is stored on the server and will be there when someone else finds that same star
- Reverse Lookup — enter any star name (Sirius, Vega, Betelgeuse, Polaris, Rigel, Deneb…) or a distance in light-years and find out which year that star is currently watching on Earth, what era that is, and which historical events happened at that moment
- Archive — save any star moment to a personal collection, with full export
- Certificate — generate and download a personalised star certificate for any witnessed moment
How We Built It
The backend is a Flask REST API that queries three astronomical catalogues in parallel:
- HYG v3 (120,000 stars, bundled locally) for instant offline results
- SIMBAD TAP (Université de Strasbourg) for named and bright stars with confirmed identifiers
- Gaia DR3 (ESA, 1.5 billion stars) for high-precision parallax measurements on nearby stars
Distance is converted from parallax using:
$$d_{\text{ly}} = \frac{3261.56}{\varpi_{\text{mas}}}$$
where \(\varpi_{\text{mas}}\) is the parallax in milliarcseconds. The three catalogues are merged with a deduplication pass based on great-circle angular separation:
$$\Delta\theta = \sqrt{(\Delta\text{RA} \cdot \cos\bar{\delta})^2 + (\Delta\delta)^2}$$
combined with source-priority ranking (HYG named > SIMBAD > HYG unnamed > Gaia DR3) and a parallel ThreadPoolExecutor with per-source timeouts and graceful fallback.
The frontend is a single-page app using Three.js r128 for the 3D WebGL scene. The background star field is built from four distinct layers totalling 18,050 points:
| Layer | Count | Technique |
|---|---|---|
| Pixel stars | 10,000 | PointsMaterial, fixed pixel size, no texture |
| Glow stars | 2,000 | PointsMaterial + radial-gradient canvas texture, additive blending |
| Milky Way band | 6,000 | Gaussian-distributed along galactic plane |
| Hero stars | 50 | Large vivid points with glow texture |
Glow effects are produced by painting a radial gradient onto an offscreen <canvas> element and using it as a PointsMaterial map — no custom GLSL shaders. Sky position calculations (altitude, azimuth, best visibility window) use a full Julian Date → GMST → hour angle → altitude/azimuth pipeline computed server-side in Python.
For the Family Constellation, each family member's birth date is converted to a light-year distance — the number of years of light travel time since their birth. We query the star catalogue for the real star at that exact distance, then project all family stars into the 3D scene as THREE.Points connected by THREE.LineSegments. When the user hits Show in 3D, the modal closes and each family star's position is projected from 3D world space into 2D screen coordinates:
sx = (v.x × 0.5 + 0.5) × W
sy = (−v.y × 0.5 + 0.5) × H
…and a personal star card cascades in at that screen position for every family member, showing exactly what moment their birth star is witnessing right now.
Challenges We Ran Into
Rendering glowing stars without shaders. WebGL clears its drawing buffer after every frame by default (preserveDrawingBuffer: false). Getting circular glowing stars — instead of pixel squares — required carefully layering PointsMaterial instances with a canvas-generated radial gradient texture, additive blending, and placing glow layers beyond the camera's orbit radius so they are never clipped.
Merging three live catalogues in real time. SIMBAD, Gaia DR3, and HYG all have different schemas, coordinate systems, response times, and coverage. We had to build a custom deduplication and priority pipeline that could handle any combination of sources being slow or unavailable, while still returning results in under a second.
Reverse Lookup at any distance. The naive approach of searching light_years ± tolerance breaks down for stars hundreds of light-years away — the range becomes too narrow to match anything. We solved this with a dedicated /api/search-by-name endpoint that searches the full 196-star named catalogue directly by proper name, regardless of distance.
Making science feel personal. The biggest challenge wasn't technical — it was figuring out how to make something so vast feel intimate. The breakthrough was auto-spawning star cards the moment results arrive, so the first thing you see is three real stars already telling their stories, not a table of data.
Accomplishments That We're Proud Of
- A real 3D navigable universe that runs entirely in the browser with no installs — 18,050 background stars, live catalogue queries, and a smooth WebGL scene at 60fps
- The Family Constellation is genuinely moving: seeing your family's birth stars drawn as a personal constellation in the same sky as Orion and the Big Dipper, each with a card showing what moment in history their star is watching right now
- The parallax formula \(d = 3261.56 / \varpi\) connecting real ESA/Gaia measurements to emotional, human moments — your mum's birthday is 42 light-years away; Sirius witnessed the Moon Landing in 1978
- Building the entire product — backend, 3D frontend, catalogue integration, and all nine features — in a single hackathon session
What We Learned
- How parallax measurements translate to real cosmic distances across 120,000 catalogued stars, and how three different catalogues disagree in interesting ways
- That Three.js background star layers must be placed beyond the camera's orbit radius or they vanish inside the scene
- That
preserveDrawingBuffer: false(the WebGL default) means you cannot read the canvas after a frame — which matters the moment you try to capture a screenshot - That removing interaction barriers is the most powerful UX move: auto-spawning star cards made the product feel alive instead of like a query tool
- That
colAttr.needsUpdate = truemust be paired with_renderer.render()if you want vertex colour changes to be visible immediately, not just on the next animation tick - That the sky has been quietly recording everything that has ever happened on Earth. It just needed someone to build a search bar for it.
What's Next for Sirius
- Live event feed — connect to a live news or events API so you can search today's headlines and see which stars are receiving that light right now
- Multiplayer letters — real-time notifications when someone else writes to a star you've also written to
- AR mode — point your phone at the sky and see overlaid star cards through the camera, showing which real stars above you are watching which moments in history
- Voice search — speak a year or event name and navigate the sky hands-free
- Shareable constellations — generate a unique URL for your Family Constellation so anyone with the link can see your family's stars in the same 3D sky
Log in or sign up for Devpost to join the conversation.