This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
Stargrass is an offline night sky guide. The model never invents a number, it just picks the right tool and phrases what the astronomy code found.
What does it do?
Just give it your location, by GPS or by hand. It tells you when full darkness starts and ends tonight, what the moon is doing, and which planets and stars are up right now, with a compass direction and height in fists (one fist is about 10 degrees).
Then there's the ask box, which answers basic questions from the data. Basically a feature for the ones too lazy to read four cards, so they'd rather just ask. Hehe
Demo
Prepare once on wifi, and after that it works in airplane mode. There's a red night mode too, since a bright screen ruins your dark adaptation.
Code
Stargrass
An offline night sky guide. You ask a question in plain language, it answers in one to three sentences, and you look up. The screen stays dark, the phone goes back in the pocket.
Live at stargrass.vercel.app. Started October 6, 2026 for the DEV Hacktoberfest Open Source AI Challenge, Week 1 (Touch Grass).
Why
The best skies have no signal. Stargrass is prepared once on wifi and used in airplane mode after that: the app shell, the star catalogue and, on WebGPU devices, the model weights all live on the device. Your location never leaves it. There is no backend, no account and no analytics.
How it works
Code computes, the model narrates. Every position, rise time and phase comes from the astronomy-engine library. A question is routed to one of four tools (tonight, moon, what is up, find an object), the tool computes the real numbers, and…
How I Built It
SvelteKit with a static build, so the whole app is just files, and a service worker caches them for offline use.
All astronomy comes from astronomy-engine. Every position, rise time and moon phase is computed there, never by the model. Questions route to one of four tools (tonight, moon, what's up, find an object), the tool computes the answer, and a template phrases it.
On devices with WebGPU, a Gemma 1B model runs in the browser via WebLLM and handles the routing and wording after a one-time download. On every other device, a keyword router does the same job with no model at all. I built a 26-question eval set for it: the baseline scored 23/26, and the three misses were questions like "is it dark yet" that a normal person actually asks. After fixing the router, 26/26.
Honest status: my test phone reports no GPU adapter (WebGPU exists on it, requestAdapter() returns null), so keyword mode is the path I could verify for real, including offline with the server killed. The model path is wired and unit tested, and it activates on devices that can run it.
Why Does Open Innovation Matter?
Because the app has to work with no signal, a hosted API was never an option. Open weights make it possible to download the model onto the phone once and keep it there, with no key, no bill and no server seeing your location or questions. And since it's one string in one constant, anyone can swap Gemma for whatever open model runs better next year.
Top comments (0)