This is a submission for the Hacktoberfest Open-Source AI Challenge, Week 1: Touch Grass.
#hf26challenge #devchallenge #opensource #ai
Repository: github.com/bhushanvidhate-27/horizon
Live demo: horizon-bhushanvidhate-27.onrender.com
Horizon is a daily outdoor planner that answers one simple question:
When is the best time for me to go outside today, and what can I see in the sky?
Enter a location and Horizon combines weather forecasts with astronomy data to recommend the best one-to-three-hour window for being outdoors. It considers temperature, rain probability, wind, cloud cover, UV, sunrise and sunset, Moon phase, visible planets, constellations, and upcoming sky events.
The result is intentionally short: a useful recommendation, a few things to look for, and a reason to put the phone away.
For example (real run for Hyderabad):
Your best outside window is 04:00β07:00
Weather: Clear sky, 26Β°C (feels 27Β°C), 0% chance of rain, wind 5 km/h, 0% cloud
Sun: up 06:08 / down 17:58
Moon: New Moon (0% lit) β dark skies, ideal for stargazing
Look up for: Aquila, Lyra, Cygnus, Sagittarius, Pegasus
Horizon chose that pre-dawn window because clear weather plus a New Moon creates the darkest, starriest conditions of the day. The scoring deliberately balances human comfort with what the sky actually has worth looking at.
Horizon is for people who want a reason to get outside without another screen-heavy app.
The screen is only the starting point. The real goal is to close the tab and look up.
A daily outside alert & sky event planner. Horizon tells you the best time to step outside today, what interesting things are happening in the sky, and then nudges you to put the phone away and actually go look.
It's built with the "Touch Grass" spirit: a short interaction that leads to a real-world experience. Ask once, then leave your phone in your pocket.
Submission for Hacktoberfest 2026 β Open-Source AI Challenge, Week 1: Touch Grass Brand-new project, built within the challenge window (Oct 5β11, 2026). Any commits after the Oct 11, 2026 11:59 PM PDT deadline will be noted here as required.
Horizon is an MIT-licensed, self-contained Python project. Its core works with zero paid APIs:
Optional partner integrations are auto-detected and never required:
horizon/
βββ agent.py # pipeline: location β sky β weather β news β narration β voice β storage
βββ sky.py # Skyfield astronomy
βββ weather.py # Open-Meteo window scoring
βββ llm.py # Gemma via Ollama / OpenRouter / AI Studio
βββ narrator.py # deterministic fallback
βββ news.py # SerpApi headlines
βββ voice.py # ElevenLabs TTS
βββ storage.py # MongoDB Atlas + SQLite fallback
βββ main.py # FastAPI + REST API
βββ cli.py # same pipeline from the terminal
Run it yourself:
git clone https://github.com/bhushanvidhate-27/horizon && cd horizon
uv venv && uv pip install -e ".[dev]"
uv run uvicorn horizon.main:app # β http://localhost:8000
A small agent pipeline, one stage per concern:
location β sky β weather β news β narration β (voice) β storage
| Stage | What it does | Technology |
|---|---|---|
| Location | City β lat/long (cached) | Open-Meteo geocoding |
| Sky | Sunrise/set, Moon, planets, constellations, meteors | Skyfield |
| Calendar | New/full moons, meteor peaks, equinoxes, oppositions | Skyfield |
| Weather | Scores every 1β3 h block for comfort + clear skies | Open-Meteo |
| News | Rare sky-event headlines | SerpApi (optional) |
| Narration | Turns facts into a warm human alert | Gemma (Ollama default) |
| Voice | Spoken version of the alert | ElevenLabs (optional) |
| Storage | Preferences + alert history | MongoDB Atlas / SQLite |
| Tracing | One transaction per alert, span per stage | Sentry (optional) |
Graceful degradation is intentional: missing keys never break the experience. The useful recommendation still appears using only open data and open weights.
Open data makes a real product possible for free.
Weather and astronomy are public knowledge. Open-Meteo and Skyfield let a weekend builder compute a genuinely useful recommendation without a billing account.
Open weights keep the intelligence inspectable.
Narration is the part most likely to hide bias or leak data, so it runs locally through Ollama by default. No prompt leaves the device unless you choose a hosted path. The model can be swapped with a one-line change.
Open source makes small tools durable.
Horizon is MIT-licensed and modular. If a provider changes, only one stage needs updating. The project stays understandable and improvable by anyone.
The most important output isnβt a model response β itβs you, outside.
[Add your honest outdoor note here. Example:
βI ran Horizon for Hyderabad on a clear New Moon morning. It recommended 04:00β07:00. I stepped outside just before 5 a.m. and could clearly see Lyra and Cygnus rising β exactly the dark-sky window it had chosen. That short interaction was the whole point.β]
This is the part I care about most: the screen interaction should be brief and the real-world experience longer.
Best Use of Gemma
Horizon uses Gemma to turn structured weather + sky data into warm, natural daily alerts. It runs locally through Ollama (open weights, no key) and also supports hosted paths. A deterministic template narrator keeps the app working when no model is reachable. (horizon/llm.py, horizon/narrator.py)
Best Use of Render
The live Horizon demo is deployed on Render:
https://horizon-bhushanvidhate-27.onrender.com
Best Use of ElevenLabs
Horizon can turn each daily alert into a short spoken narration so you can listen while getting ready to go outside. Audio is cached by content hash. (horizon/voice.py)
Best Use of MongoDB Atlas
When configured with MONGODB_URI, Horizon stores location preferences and alert history in MongoDB Atlas, with SQLite available as a local fallback. (horizon/storage.py)
Best Use of SerpApi
Horizon can include recent astronomy and rare-sky-event headlines through SerpApi, adding fresh context to a daily recommendation. (horizon/news.py)
Best Use of Sentry
Horizon traces its pipeline stages in Sentry, including location lookup, sky calculations, weather scoring, narration, voice generation, and storage. (horizon/agent.py)
Best Use of DigitalOcean
The repo ships a Dockerfile and a DigitalOcean App Platform spec (.do/app.yaml) with a /api/health health check.
Open-source + open-weight core
No paid API is required for the core experience (Open-Meteo + Skyfield + Gemma).
pytest --cov) β every network partner is monkey-patched so the suite runs in about a second offline.ruff + full test suite + packaging smoke test.
Built with open data, open weights, and the sincere hope that you close this tab and go outside. πΏ