You are browsing as a guest. Sign up (or log in) to start making projects!

astrOS

  • 11 Devlogs
  • 31 Total hours

A space/astronomy themed webOS

Ship #2

astrOS is a fullscreen web OS with nine astronomy apps built in vanilla JS: Sky Map uses real star positions calculated from your location, ISS Tracker polls live satellite data with haversine distance, Stargazing Conditions combines weather and moon phase into a seeing score, Solar System renders Keplerian orbits with clickable planets, Meteor Shower Tracker handles year-boundary showers correctly with proper countdown logic, plus NGC Catalogue, APOD, Mission Log, and Wallpaper Changer.

I'm most proud of the Sky Map actually calculating real positions rather than faking it, and the ISS Tracker being genuinely useful for knowing whether the station is overhead.

To test: open on desktop in fullscreen (geolocation needs permission and fullscreen mode to work), try dragging windows to screen edges to see snapping, check the meteor tracker during an active shower, click planets in Solar System to see their stats, and the Mission Log text persists across refreshes via localStorage.

yes, i know it said 3 new features from webos1, but I got a bit too excited. have fun!

  • 7 devlogs
  • 26h
  • 11.44x multiplier
  • 302 Stardust
  • WebOS 2
Try project → See source code →
Open comments for this post

3h 41m 38s logged

Meteor Shower Tracker

finished the last feature, a year-round meteor shower schedule with active/upcoming status so you actually know when to set an alarm. 11 major showers baked in (Quadrantids through Ursids), and everything’s calculated client-side, no API needed.

  • stores absolute peak dates for each shower and works out the active window locally, correctly handles the year-boundary ones (Quadrantids starts Dec 28, Ursids ends Dec 26) without breaking on Jan 1st
  • sorts active showers first, then whoever’s next peak is soonest
  • countdown properly distinguishes “peak in Xd” from “peaked Xd ago” for showers you’re still inside the window for but already past peak on, caught that bug and fixed it before shipping by testing across multiple dates including exact-peak day (Aug 12 for Perseids)
  • renders as a compact list with radiant constellation, ZHR (~Zenith Hourly Rate), and the peak countdown, all colour-coded so active showers pop
  • no polling, just recomputes fresh every time you open it

Bug Fixes & Polish

went through all three files line-by-line before shipping. found and fixed two bugs plus some cleanup:

  • window snapping corners were brokengetSnapZone() detected top-left/top-right when you dragged to a corner, but showSnapPreview() and applySnap() never had rect definitions for those zones, so the preview showed nothing and the drop silently failed. added proper quarter-tile rects for both corners so you can now snap to all four quadrants
  • APOD toggle IDsgetElementById() calls for apod explanation/toggle buttons were working but the elements weren’t explicitly in the HTML, they were created at render-time by innerHTML, so the id references were technically fine but fragile. left them as-is since they work, but flagged it as something to refactor if we add more dynamic content later

also ik its been shown in an earlier devlog, but the taskbar on the bottom isn’t exactly empty lol, you can minimise apps to it (third pic). maybe i’ll add a pin to taskbar feature?

what’s left

SHIPPPPPPPPPPPPPPPPPPPPPPPPP :stardance-streak-7d: :stardance-streak-10d:

0
0
5
Open comments for this post

45m 14s logged

Tiny fix lol

I stopped good ol’ neptune being cut off on the solar system map, and also made it so that the contents of the notepad/mission log are saved in localStorage

0
0
4
Open comments for this post

3h 15m 17s logged

Solar System Viewer

  • Thought it’d be cool to have something you could just leave open on the desktop, so I added a little live Solar System app. Every planet sits where it actually should be today rather than looping around on some fake animation.

  • Planet positions come from simplified J2000 Keplerian elements (semi-major axis, eccentricity, orbital period, etc.) and get advanced from the current date, so they’re calculated fresh instead of being hardcoded.

  • Conveniently I’d already written a Newton-Raphson solver for Kepler’s equation while making Umbra, so I shamelessly reused it here to solve the eccentric anomaly before converting that into the planet’s true anomaly and distance from the Sun. Nice when old suffering becomes reusable code lol.

  • Biggest headache honestly wasn’t the orbital maths, it was the scale. If you draw everything linearly then Neptune disappears off the edge of the canvas, but if you squash everything too much then the inner planets all merge together. Ended up scaling the orbital radius by √r instead, which keeps the angular positions correct while compressing the distances enough that the whole Solar System fits on one screen.

  • Made every planet clickable as well because a static diagram felt a bit dead. Clicking one gives its current distance from the Sun and orbital period, with Earth getting a little highlight ring so it’s easy to spot where we are.

  • It redraws once a minute since the planets barely move on human timescales anyway, and it’s definitely not accurate enough to navigate a spacecraft with, but it’s surprisingly close considering it’s just running a handful of orbital equations in the browser lol.

deffo gonna play around with the window sizing cause its kinda weird right now… also neptune is STILL SQUASHED (genuine annoyance btw) so will do this TOMORROW.

0
0
2
Open comments for this post

3h 28m 7s logged

Stargazing Conditions

New app, tells you whether tonight’s actually worth setting up a telescope for.

  • pulls cloud cover, humidity and wind from Open-Meteo using the location I already grab on boot, no key needed which is nice
  • the moon phase bit doesn’t touch an API at all, did it properly with the synodic month (29.53 days) against a known reference new moon, so it’s just maths running locally
  • combined cloud cover and moon brightness into a rough seeing score out of 10, heavier cloud and a brighter moon both drag it down, then a one-line verdict underneath so you don’t have to interpret the number yourself
  • was gonna render an actual crescent/gibbous moon on canvas for this but after the ISS ground track thing broke last time I didn’t wanna ship more clipping/arc geometry I couldn’t properly test, so it’s just the phase emoji + name + illumination % instead. honestly looks fine, might revisit the canvas version later if I’m bored
0
0
3
Open comments for this post

3h 27m 58s logged

ISS Tracker 

New app, tracks the ISS live using wheretheiss.at (no key needed, CORS-open, genuinely such a nice API to work with). 

  • Polls every 5 seconds for lat/lon/altitude/velocity

  • Keeping the last 20 fixes so there’s a fading trail behind the current position instead of just a dot that teleports every update

  • Drew my own little world map for this since I didn’t want to deal with map tile assets, just lat/lon gridlines every 30°, equator and prime meridian slightly brighter.

  • I reused the geolocation I already grab on boot for the sky map, so this app also shows your distance from the ISS via a haversineKm() calc, and flags when it’s within ~2000km with a little “nearby!” tag. Not a proper overhead check (that’d need elevation angle above your horizon) but good enough for now

  • Added a stopIssTracker() call on window close so the polling interval actually dies instead of running forever in the background, learnt that lesson the hard way after leaving a tab open for way too long testing this

At the time of writing this I had just the idea to implement a trail that shows the future path, will do this now lol.

0
0
1
Open comments for this post

2h 26m 5s logged

APOD Viewer 

Added the Astronomy Picture of the Day app, pulls straight from NASA’s API and shows today’s pic with the write-up tucked behind a toggle so the image gets to be the main object first. 

  • Cached in localStorage per calendar day, so reopening the window doesn’t burn another call for the same picture

  • Nearly got got by this one: NASA sometimes serves a video instead of an image for the day, and my first pass just shoved the url into an <img> tag, broken image icon staring back at me lol

  • Added a media_type check so videos link out instead of trying to embed

  • Also handled the fetch failing outright, just shows a “try again later” message instead of leaving a blank window, DEMO_KEY’s rate limit is gonna trip this eventually so it needed to fail gracefully lol

what’s next?
either stargazing conditions or the ISS tracker, we’ll see which one I go for

0
0
2
Open comments for this post

9h 21m 27s logged

Okay, yes I forgot to devlog… or commit

This was an absolute lock-in but I don’t wanna rank low on storytelling, so I’ll make this one detailed lol.

Wallpaper Switcher

  • Six presets, default plus five gradients: nebula, deep blue, solar flare, aurora, mono
  • Clicking a swatch fades the desktop background over 0.6s instead of snapping
  • Choice persists via localStorage so it survives a refresh
  • markActiveWallpaperSwatch re-reads storage and re-marks the active swatch every time the window reopens

NGC Catalogue Browser

  • Started as a hardcoded Messier list, which I scrapped once I found Datastro’s public deep sky objects dataset (~220k NGC/IC/Messier entries, CORS-open, no key)
  • Search input debounces 350ms before hitting the API, results sort by magnitude
  • Clicking a result fills the detail panel: type, constellation, magnitude, coordinates
  • Dataset uses the Historically Corrected NGC scheme (GPair, OCl, SNR, Cl+N), so I wrote a bucket function that checks substrings to map raw types into galaxy, nebula, cluster, or other for the filter dropdown
  • Built an 8-object offline fallback (Andromeda, Orion Nebula, Ring Nebula, Pleiades, etc) that kicks in silently if the fetch fails, with a small offline warning shown in the list :stardance_star_purple:

Did You Know Notifications

  • Toast-style pings slide in from the right with a random space fact
  • First one fires after 4 seconds, then every 60-120 seconds at random
  • 18 facts in the pool right now, the neutron star teaspoon one still gets me
  • Caught a bug where fast in/out window clicks could call scheduleNotifications twice and stack two loops, doubling the ping rate
  • Fixed it with a notifStarted flag so the loop only ever starts once

Window Resizing And Snapping

  • Built right before the wallpaper stuff, resize first then snap
  • Every window gets a drag handle in the bottom right corner, clamped to a minimum width and height
  • Handle calls stopPropagation on mousedown so resizing doesn’t also trigger the window drag
  • Snap shows a dashed preview box near screen edges, locks into that rect on release
  • Found a bug writing this up: a top-right zone gets detected but has no rect defined for it, so it falls back to snapping full width across the top instead of a proper quadrant.
0
0
1
Ship #1

I have made a functional astronomy focused WebOS called astrOS. It currently features a custom programmed sky map which takes your location and shows you what is currently in the sky near you, and a simple in-session notepad. It also has a right-click context menu featuring my socials and projects (project links will be added when they are done lol)

You can minimise windows as well.
Please put any suggestions for new features you have in comments, I'd appreciate it a lot.

Try project → See source code →
Open comments for this post

1h 4m 50s logged

WebOS 1 - Finished!

Sure it took longer than it should’ve, but at least the sky map is quality

Today I finished off the final parts for the first mission.

  • I added a coords toggle so you don’t doxx yourself while taking screenshots of the map.

  • I also fixed up the minimising animation and changed the taskbar to host the app icons instead of the usual app name (this had an ugly white bg lol so I had to change it no matter what)

  • I also added a custom background (yes this is reused from my g-lens project sue me)

I’m gonna ship this now for WebOS 1, the finished, polished product will be shipped for WebOS 2 (so if anything can be improved, dm me or comment and I’ll fix it then!)

0
0
7
Open comments for this post

31m 51s logged

Small update

  • added a basic notepad app, it does not save between sessions though.

  • added an animation to minimising windows

  • [FIX] made star names not rotate with the star map (this was annoying me lol)

what’s next?

  • add icons to taskbar and not just names for minimised apps

  • hide the coords on sky map lol dont doxx yourself

  • a review of the guidelines so I can get webOS 2!

0
0
6
Open comments for this post

2h 22m 12s logged

MAJORRR Update

First app, context menu, and a LOT of stars 😭

Today I wanted to add an app. Not a standard one like notepad, music, file explorer… something that is different. So, naturally, I spent two hours coding my own star map using a ton of stars from the yale bright star catalogue (okay maybe not a ton but you get the idea). It takes the users location, calculates the chunk of sky above them (yes, you can do this) and shows the major stars visible to the naked eye on a turntable style minimap.

What the heck am I gonna do next

  • for one, the text on the map rotates with everything so i gotta fix that
  • THEN i’ll add a normal app like notepad lol
  • a background needs to be added too, also I might add a bg switcher.

ohhhh yeah and i added stuff from the guide like the topbar and time, that’s not the star of the show for this log though lol.

0
0
3
Open comments for this post

42m 30s logged

astrOS day 1:

I want to finish this project really efficiently, so I have mapped out what features I want (you will see as they come). Today, I finished the boot screen and styling for it, and made the file structure.

Not much, only 40 mins, but since its a roughly 2hr 30m project, 30m a day means I finish in 5 days.

Next devlog should hopefully be finishing the desktop design, probably ~1hr.

0
0
10

Delete project?

Are you sure you want to permanently delete this project? This action cannot be undone.

All devlogs, followers, and associated data will be removed.

Followers

Loading…