This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
What I Built
Check out the luna movie - https://drive.google.com/drive/folders/1HbcCDIdcOdZ0juuN7QNdmM4CX20JvgaD?usp=sharing
Luna is a night-sky guide you set up by looking up, ask by pointing, and finish by putting your phone away.
Most stargazing apps keep your face in the screen. Luna is built around the opposite: every feature exists to get you outside, looking at the real sky, for longer.
- Sky Check. Setup doesn't ask you to fill in a form. It asks you to look up. Luna draws the constellation best placed in your sky right now at five levels of faintness, using real catalogue stars, and you pick the one that matches what you actually see. That sets your sky's limiting magnitude, and from then on Luna hides anything you couldn't see anyway. No more apps showing you 3,000 stars from a city terrace.
- Point and ask. Hold your phone up and the sky lens follows the compass and tilt sensors: 5,044 real Hipparcos stars, all 88 constellation figures, the planets, the Moon and bright deep-sky objects, computed for your place and second. Then ask, out loud or typed, "what's that bright one?" Gemma answers on the device.
- Answers you can trust under the sky. A language model will happily tell you Vega is in the east when it has set. Luna never lets the model state a position from memory. Its astronomy engine computes the facts, Gemma phrases them, and a verifier checks every object name, compass direction, height (in degrees and in fists held at arm's length) and clock time before you see or hear the answer. If anything fails, the answer is replaced by the engine's own and Luna shows you why.
- Tonight. The truly dark window, the best moon-free stretch, sun and moon in degrees, rise and set times, cloud cover by hour, and what's coming up: moon phases, eclipses, meteor showers.
- Places. Dark-sky sites sorted by distance. Navigate uses GPS and the compass to point an arrow and count down the distance, so it keeps working where the signal ends.
- Mine. Mark stars and get a nudge when they rise, give them nicknames that stay on your device, save tonight's sky as a lock-screen image, and print a cut-and-pin paper planisphere for your latitude, so next time you might not need the phone at all.
- Stories. Tap a bright star and press Listen for a short spoken story (recorded once with ElevenLabs, shipped as files, so it plays offline).
- Red-light mode protects the twenty minutes your eyes need to adjust to the dark.
Who it's for: anyone who has looked up and wondered "what is that?", on a city rooftop or a mountain pass, with or without signal.
How it gets you off the screen: the app is useless indoors on purpose. On a computer it says so up front, "Luna lives on your phone", with a QR code to carry it over (plus an honest preview for judges on laptops). On the phone, every answer ends by pointing you back at the sky.
Field test
At Midnight , I took Luna onto a street in Bangalore. I held the phone up to a bright star low in the south-east and Luna named it as Sirius.It matched . I asked "Where is jupiter rigth now?" and it auto-guided me and answered and help me spot jupiter in the sky. I Always wanted that! Never knew that star i saw so many times was JUPITER! Then I put the phone away and just looked up for a while embracing the beauty.
Demo
- Website: https://luna-3zla.onrender.com
- Get the app: https://luna-3zla.onrender.com/get (detects your device: Android APK download, iPhone Add to Home Screen steps, QR code on a computer)
- Open it in the browser: https://luna-3zla.onrender.com/sky
- Printable planisphere: https://luna-3zla.onrender.com/sky/print?lat=32.78
Code
Ishaan-Gpt / luna
Luna: an offline night-sky guide built on open models. Hacktoberfest 2026 Touch Grass.
Luna
A night-sky guide you set up by looking up, ask by pointing, and finish by putting your phone away. Built for the Hacktoberfest 2026 Open-Source AI Challenge, Week 1: Touch Grass.
- Landing:
/ - Get the app:
/get, which detects the device: an Android APK (plus Chrome's one-tap install), Add to Home Screen steps for iPhone, and on a computer a plain "Luna lives on your phone" screen with a QR code and an honest preview - App:
/sky(installable, works offline after one visit) - Printable planisphere:
/sky/print?lat=32.78
Luna is a phone app. It needs a compass, tilt sensors, GPS and the sky above you, so on a computer it says so up front and offers a preview (sky map, Tonight, Ask with Gemma, Places) with the phone-only features listed.
What it does
| Feature | How it works |
|---|---|
| Sky Check | Setup asks you to look up. Luna draws the constellation |
How I Built It
The open model: Gemma 4 E2B, on the device
Luna's brain is Gemma 4 E2B (Apache 2.0, the litert-community web build), running inside the browser on WebGPU through MediaPipe LLM Inference.
- The 2.0 GB model downloads once, with live progress and cancel, into Cache Storage, then stream-loads from there on every launch. No server ever sees a question.
- The MediaPipe runtime is self-hosted with the app, so it's cached for offline use like everything else.
- On my desktop GPU, grounded answers came back in 3.4 to 5.9 seconds. Three examples, all marked Checked against the sky:
- "Look to the east for Betelgeuse."
- "Jupiter is 3° up in the east-northeast and will set at 15:13."
- "The darkest window is from 19:19 to 04:53."
- On devices without WebGPU, or without the memory for the model, Ask still works: it answers straight from the sky engine and says so.
Grounding: the model phrases, the sky decides
question ─▶ resolve subject (nickname → name → constellation → "that one" = where the phone points) ─▶ sky engine computes facts (altitude, direction, rise / peak / set, moon, darkness) ─▶ Gemma writes the answer from those facts only ─▶ verifier checks every name, direction (±45°), height (fists / degrees) and time (±10 min) ─▶ pass: "Checked against the sky" fail: engine's answer + the reason, shown openly Every answer has a How Luna answered panel showing the facts it was given, the model's raw text and any problems the verifier found. I'd rather show the seams than ask people to trust a black box in the dark.
The sky engine
- Astronomy Engine (MIT) for the Sun, Moon, planets, rise and set times, eclipses and precession, so the lens works for any date from 1000 to 2999.
- Hipparcos stars, constellation figures and deep-sky objects from d3-celestial (BSD-3), built into a 187 KB catalogue.
- DeviceOrientation turned into where the back camera points (azimuth and altitude), and GPS via
watchPosition. - Forecasts come from Open-Meteo and are cached for offline use.
Offline, installable, everywhere
- Next.js web app with a service worker that caches the app, the catalogue, the AI runtime and the voice stories. After one visit it works with no signal.
- Android app: a signed Trusted Web Activity APK built with Bubblewrap, full screen through Digital Asset Links. It runs in Chrome's engine, so the sensors, WebGPU and offline mode behave exactly like the tested web app.
- iPhone: Apple only allows downloads from the App Store, so Luna installs from Safari as a home-screen app. The site says so plainly instead of pretending.
Partners
- Render hosts it from a one-file Blueprint (
render.yaml): build, start, done. The free plan sleeps when idle, so the service worker serves the cached app after 3.5 seconds rather than leaving you staring at a blank screen while the server wakes up. - ElevenLabs voices the star stories, at build time and not at runtime. The 25 short, fact-checked stories (the brightest stars, the Moon, the planets, the Orion Nebula, the Pleiades, Andromeda) were rendered once with
eleven_multilingual_v2and ship as MP3 files. No API key ships in the app, and they play under a mountain with zero bars.
Design

The landing page is a scroll-told story (GSAP, ScrollTrigger, Lenis) with procedural night art and a live sky drawn from the real catalogue for tonight. The app carries the same type and palette into a dark, red-safe UI with hand-drawn icons.
Why Does Open Innovation Matter?
Because the best skies have no signal.
A closed API would make Luna useless exactly where it matters: on a mountain pass, in a desert, at a dark-sky reserve. Open weights let the model travel with you, inside the phone, and answer every question for free.
Open weights also gave me control a hosted API wouldn't:
- Your location never leaves the device. A stargazing app knows where you are standing at night. That shouldn't be anyone else's business.
- No per-question cost. People ask a lot of questions under a sky full of stars. Nobody should be rationed.
- No black box. Because the model runs inside my own pipeline, I could wrap it in a verifier that checks its claims against physics before anyone acts on them. That's the difference between a chatbot and a guide you can trust in the dark.
And the rest of Luna is open in the same spirit: Astronomy Engine, the Hipparcos catalogue via d3-celestial, MediaPipe, Open-Meteo. All the code is on GitHub.
My Agent Session
Luna was built end to end in one long session with Claude Code: reverse-engineering the landing page's motion, building the sky engine and grounding verifier, getting Gemma 4 running on WebGPU, and shipping the Android app. The API key and personal details in it have been redacted.









