Today’s APOD was way too good… .
Spent most of the time redesigning the ISS object and figuring out the orbit calculations using the latitude and longitude from the API. There was a surprising amount of math involved, but it’s finally working. Still need to add proper error handling though—right now it just assumes everything goes perfectly (which APIs never do ).
Originally, I wanted this dashboard to have four different grid sections packed with various NASA APIs. But after building the first two rows, I realized it already feels pretty packed for a first release.
So… I’ve decided to ship with the current layout instead of cramming in more features.That doesn’t mean the other APIs are getting dropped though. Once this version is out, I’ll keep expanding the dashboard and fill those extra grid spots with more APIs.
For now… ship first, build more later
Devlog #3 – Got an Idea
For the past three days, I was going crazy with CSS and all its properties. Now I’ve decided to shift to Tailwind CSS.
I’ve also decided to scale this project beyond the original guide after discovering some really interesting NASA APIs that I want to integrate.
To kick off the implementation, I replaced the existing layout with display: grid and built the first grid for today using Three.js. I learned the beginner-level concepts first, then spent some time with the documentation before building this from scratch.
The feature is about halfway complete and currently involves a revolving Earth using the texture from NASA’s famous Blue Marble image.
I have heard styling is hard, but today I actually felt it.
Manually styled the entire webpage using raw CSS. No Tailwind, no Bootstrap—just pure CSS. Seeing the elements render all colourful on hot reload is such an awesome feeling.
The temptation (and addiction 😭) to keep styling forever is actually real…
Next devlog might be on styling again ig 😅
Setting up the project and learning how vite works took a lot of time but Worth it!!
70% of the total time went into history ,development and working of vite and other bundlers like webpack ,Rollup etc… Rest I spent in scripting part of the project
That’s it for today. Learned a lot more than I coded…
Devlog 3
Built an OAuth server using Express so users can install the bot into their own Slack workspaces via an “Add to Slack” button.
Got a shallow knowledge on how OAuth works and learnt how to build a express server to catch the code and proceed with OAuth
Deployed it as a second systemd daemon on Hack Club’s server. Now both the bot and the OAuth server run 24/7 without my laptop being on.
Devlog 2
Turns out one AI provider isn’t enough — so I added OpenAI support to the /summarize command via the -model flag.
The interesting part wasn’t the API call itself. It was realising that Gemini and OpenAI have completely different request formats — different URLs, different auth methods, different JSON body structures. So I had to refactor the whole AI section: pulled the Gemini logic into its own askGemini() function, then built an askOpenAI() twin next to it. Also learned the hard way that OpenAI’s free tier doesn’t exist for developers. Got a clean 429 back .
Finally SSHed into Hack Club’s server, set the bot up as a systemd service, and now it just… runs. 24/7.
Dev Log 1
Joined Stardance at the start of June — now it’s about to end. Spent a month learning a language that took its developer 10 days to prototype!
Finally shipped my first JS project: a Slack bot.
Still a bash loyalist at heart, so I built a CLI parser (a minimal implementation) that lets users interact with the bot like a command-line tool.
I’ve added a /summarize command to help me triage unread messages across Slack. It fetches the last n hours of messages (-time flag) from a target channel (selectable via -channel flag), pipes them to the Gemini API, and lets users fine-tune the AI’s output with a custom -prompt flag.
The dopamine hit of shipping this without blindly dumping AI-generated code was unmatched — the kind of serotonin you only get from debugging your own stack traces at 1 AM. And somewhere along the way, I learned to collaborate with the weirdo.