<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bhushan Vidhate</title>
    <description>The latest articles on DEV Community by Bhushan Vidhate (@bhushan_vidhate).</description>
    <link>https://dev.to/bhushan_vidhate</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4168958%2Fa7a30c59-bfda-42c8-87ef-b28ec83154df.png</url>
      <title>DEV Community: Bhushan Vidhate</title>
      <link>https://dev.to/bhushan_vidhate</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bhushan_vidhate"/>
    <language>en</language>
    <item>
      <title>Horizon: a local AI sky planner that tells you when to step outside</title>
      <dc:creator>Bhushan Vidhate</dc:creator>
      <pubDate>Sat, 10 Oct 2026 15:46:05 +0000</pubDate>
      <link>https://dev.to/bhushan_vidhate/horizon-a-local-ai-sky-planner-that-tells-you-when-to-step-outside-1k70</link>
      <guid>https://dev.to/bhushan_vidhate/horizon-a-local-ai-sky-planner-that-tells-you-when-to-step-outside-1k70</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge, Week 1: Touch Grass&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;#hf26challenge&lt;/code&gt; &lt;code&gt;#devchallenge&lt;/code&gt; &lt;code&gt;#opensource&lt;/code&gt; &lt;code&gt;#ai&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8crkj7ypzztoixbchyng.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8crkj7ypzztoixbchyng.png" alt="Screenshot of Horizon’s daily outside recommendation" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/bhushanvidhate-27/horizon" rel="noopener noreferrer"&gt;github.com/bhushanvidhate-27/horizon&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://horizon-bhushanvidhate-27.onrender.com" rel="noopener noreferrer"&gt;horizon-bhushanvidhate-27.onrender.com&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Horizon&lt;/strong&gt; is a daily outdoor planner that answers one simple question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When is the best time for me to go outside today, and what can I see in the sky?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;The result is intentionally short: a useful recommendation, a few things to look for, and a reason to put the phone away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For example (real run for Hyderabad):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;
  
  
  Who It’s For
&lt;/h2&gt;

&lt;p&gt;Horizon is for people who want a reason to get outside without another screen-heavy app.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Busy people&lt;/strong&gt; who need one clear sentence (“go out at 6 p.m.”) instead of a dashboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Casual stargazers&lt;/strong&gt; who don’t know what’s overhead tonight but would love a reason to look.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Walkers, runners, and remote workers&lt;/strong&gt; who benefit from a nudge at the nicest, clearest part of the day.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The screen is only the starting point. The real goal is to close the tab and look up.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Try it live:&lt;/strong&gt; &lt;a href="https://horizon-bhushanvidhate-27.onrender.com" rel="noopener noreferrer"&gt;horizon-bhushanvidhate-27.onrender.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sample alert:&lt;/strong&gt; &lt;a href="https://github.com/bhushanvidhate-27/horizon/blob/main/examples/sample_alert.md" rel="noopener noreferrer"&gt;examples/sample_alert.md&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/BhushanVidhate-27" rel="noopener noreferrer"&gt;
        BhushanVidhate-27
      &lt;/a&gt; / &lt;a href="https://github.com/BhushanVidhate-27/horizon" rel="noopener noreferrer"&gt;
        horizon
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      hactoberfest dev challenge week 1 submission 
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🌇 Horizon&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/bhushanvidhate-27/horizon/actions/workflows/ci.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/bhushanvidhate-27/horizon/actions/workflows/ci.yml/badge.svg" alt="CI"&gt;&lt;/a&gt;
&lt;a href="https://github.com/BhushanVidhate-27/horizon/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://github.com/BhushanVidhate-27/horizon/pyproject.toml" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/13466c63b4f964f1bc47e46eabb6ea9ebff2cb7777cba82af790a55719bbbfda/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707974686f6e2d332e31302532422d626c75652e737667" alt="Python 3.10+"&gt;&lt;/a&gt;
&lt;a href="https://github.com/BhushanVidhate-27/horizon#-tests" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9f333efe5e9b41c0807d6b5149b1b213ba71f9631a6312ec194dd2d4276e2d9d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f74657374732d383425323070617373696e672d627269676874677265656e2e737667" alt="Tests"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A daily outside alert &amp;amp; sky event planner.&lt;/strong&gt; 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.&lt;/p&gt;
&lt;p&gt;It's built with the &lt;strong&gt;"Touch Grass"&lt;/strong&gt; spirit: a short interaction that leads to
a real-world experience. Ask once, then leave your phone in your pocket.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Submission for &lt;strong&gt;Hacktoberfest 2026 — Open-Source AI Challenge, Week 1: Touch Grass&lt;/strong&gt;
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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/BhushanVidhate-27/horizon/docs/screenshot.svg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FBhushanVidhate-27%2Fhorizon%2FHEAD%2Fdocs%2Fscreenshot.svg" alt="Horizon web UI"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ What it does&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best weather window&lt;/strong&gt; — scores every 1–3 hour block of the day using
&lt;a href="https://open-meteo.com/" rel="nofollow noopener noreferrer"&gt;Open-Meteo&lt;/a&gt; data (temperature, rain chance, wind
cloud cover, UV) and picks the nicest window to be outside.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sky events&lt;/strong&gt; — uses &lt;a href="https://rhodesmill.org/skyfield/" rel="nofollow noopener noreferrer"&gt;Skyfield&lt;/a&gt; to compute
for your location:…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/BhushanVidhate-27/horizon" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Horizon is an &lt;strong&gt;MIT-licensed&lt;/strong&gt;, self-contained Python project. Its &lt;strong&gt;core works with zero paid APIs&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open-Meteo&lt;/strong&gt; → weather + geocoding
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skyfield&lt;/strong&gt; → sunrise, Moon phase, planets, constellations, meteor showers, calendar events
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma&lt;/strong&gt; (open weights) → local narration via Ollama (or hosted via OpenRouter / AI Studio / HF)
&lt;/li&gt;
&lt;li&gt;Deterministic template narrator + local SQLite when no model or database is configured&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Optional partner integrations are auto-detected and never required:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Run it yourself:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/bhushanvidhate-27/horizon &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;horizon
uv venv &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; uv pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;".[dev]"&lt;/span&gt;
uv run uvicorn horizon.main:app   &lt;span class="c"&gt;# → http://localhost:8000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;A small agent pipeline, one stage per concern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;location → sky → weather → news → narration → (voice) → storage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Location&lt;/td&gt;
&lt;td&gt;City → lat/long (cached)&lt;/td&gt;
&lt;td&gt;Open-Meteo geocoding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sky&lt;/td&gt;
&lt;td&gt;Sunrise/set, Moon, planets, constellations, meteors&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Skyfield&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Calendar&lt;/td&gt;
&lt;td&gt;New/full moons, meteor peaks, equinoxes, oppositions&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Skyfield&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weather&lt;/td&gt;
&lt;td&gt;Scores every 1–3 h block for comfort + clear skies&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Open-Meteo&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News&lt;/td&gt;
&lt;td&gt;Rare sky-event headlines&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;SerpApi&lt;/strong&gt; (optional)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Narration&lt;/td&gt;
&lt;td&gt;Turns facts into a warm human alert&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Gemma&lt;/strong&gt; (Ollama default)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Voice&lt;/td&gt;
&lt;td&gt;Spoken version of the alert&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;ElevenLabs&lt;/strong&gt; (optional)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage&lt;/td&gt;
&lt;td&gt;Preferences + alert history&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;MongoDB Atlas&lt;/strong&gt; / SQLite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tracing&lt;/td&gt;
&lt;td&gt;One transaction per alert, span per stage&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Sentry&lt;/strong&gt; (optional)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Graceful degradation is intentional: missing keys never break the experience. The useful recommendation still appears using only open data and open weights.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Open Innovation Matters
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Open data makes a real product possible for free.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Weather and astronomy are public knowledge. Open-Meteo and Skyfield let a weekend builder compute a genuinely useful recommendation without a billing account.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open weights keep the intelligence inspectable.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open source makes small tools durable.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Horizon is MIT-licensed and modular. If a provider changes, only one stage needs updating. The project stays understandable and improvable by anyone.&lt;/p&gt;

&lt;p&gt;The most important output isn’t a model response — it’s &lt;em&gt;you, outside&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Taking It Outside
&lt;/h2&gt;

&lt;p&gt;[Add your honest outdoor note here. Example:&lt;br&gt;&lt;br&gt;
“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.”]&lt;/p&gt;

&lt;p&gt;This is the part I care about most: the screen interaction should be brief and the real-world experience longer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Gemma&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
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. (&lt;code&gt;horizon/llm.py&lt;/code&gt;, &lt;code&gt;horizon/narrator.py&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Render&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The live Horizon demo is deployed on Render:&lt;br&gt;&lt;br&gt;
&lt;a href="https://horizon-bhushanvidhate-27.onrender.com" rel="noopener noreferrer"&gt;https://horizon-bhushanvidhate-27.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of ElevenLabs&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
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. (&lt;code&gt;horizon/voice.py&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of MongoDB Atlas&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
When configured with &lt;code&gt;MONGODB_URI&lt;/code&gt;, Horizon stores location preferences and alert history in MongoDB Atlas, with SQLite available as a local fallback. (&lt;code&gt;horizon/storage.py&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of SerpApi&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Horizon can include recent astronomy and rare-sky-event headlines through SerpApi, adding fresh context to a daily recommendation. (&lt;code&gt;horizon/news.py&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Sentry&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Horizon traces its pipeline stages in Sentry, including location lookup, sky calculations, weather scoring, narration, voice generation, and storage. (&lt;code&gt;horizon/agent.py&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of DigitalOcean&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The repo ships a Dockerfile and a DigitalOcean App Platform spec (&lt;code&gt;.do/app.yaml&lt;/code&gt;) with a &lt;code&gt;/api/health&lt;/code&gt; health check.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open-source + open-weight core&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
No paid API is required for the core experience (Open-Meteo + Skyfield + Gemma).&lt;/p&gt;

&lt;h2&gt;
  
  
  Engineering Quality
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;84 offline unit tests at ~95% coverage&lt;/strong&gt; (&lt;code&gt;pytest --cov&lt;/code&gt;) — every network partner is monkey-patched so the suite runs in about a second offline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI on GitHub Actions&lt;/strong&gt; (Python 3.10–3.12): &lt;code&gt;ruff&lt;/code&gt; + full test suite + packaging smoke test.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graceful degradation everywhere&lt;/strong&gt;: missing keys never break the pipeline.&lt;/li&gt;
&lt;li&gt;Full architecture, API reference and setup notes live in the &lt;a href="https://github.com/bhushanvidhate-27/horizon/blob/main/README.md" rel="noopener noreferrer"&gt;README&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What’s Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Push notifications at the start of the best window&lt;/li&gt;
&lt;li&gt;Telegram / WhatsApp bot (“send me my Horizon”)&lt;/li&gt;
&lt;li&gt;Red-light night mode for dark-adapted eyes&lt;/li&gt;
&lt;li&gt;Aurora (NOAA Kp) and ISS-pass alerts&lt;/li&gt;
&lt;li&gt;Atlas Vector Search over past alerts&lt;/li&gt;
&lt;li&gt;Multi-day planner + iCal export of the sky calendar&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Built with open data, open weights, and the sincere hope that you close this tab and go outside. 🌿&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
