# Sobuj Ghonta (সবুজ ঘণ্টা) — The Green Hour: Screen-Minimizing Urban Nature Companion

> Source: <https://dev.to/rahmansayem163/sobuj-ghonta-sbuj-ghnnttaa-the-green-hour-screen-minimizing-urban-nature-companion-48ej>
> Published: 2026-10-07 14:11:54+00:00

*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass Submission 🌿](https://dev.to/challenges/hacktoberfest-week1-2026-10-05)*

Four billion people live in dense metropolitan cities. When hackathons announce themes like **"Touch Grass"**, the tacit assumption is that you live a short drive from pristine mountain trails or manicured suburban nature reserves.

For those of us living in megacities like Dhaka, that is not reality. Our outdoors is an unforgiving landscape of sun-baked concrete, flyovers, gridlocked traffic, and isolated municipal parks like Ramna Park, Suhrawardy Udyan, or Dhanmondi Lake.

Stepping outside in dense tropical cities comes with genuine environmental hazards:

Worse yet, existing outdoor navigation and fitness apps create a glaring paradox: **to navigate nature, they demand that you stay glued to a glowing glass screen.**

I built **Sobuj Ghonta (সবুজ ঘণ্টা — "The Green Hour")** to solve this. It is an ambient, mobile-first, bilingual (Bangla + English) Progressive Web App designed with a singular architectural mandate: **find your safe green window, get you outside safely, and then get out of your way.**

I took Sobuj Ghonta out for a late-afternoon field run at Ramna Park to test whether the audio cues and the ScreenMeter metric could keep my phone in my pocket. At 4:30 PM, Shahbagh traffic was at peak gridlock, but the app identified an environmental window between 4:45 PM and 5:20 PM where the canopy temperature dropped to 29°C before the typical Dhaka post-sunset particulate spike trapped dust and exhaust at ground level. I plugged in my earphones, started the session, and walked the inner loop.

**Where I went:** Ramna Park, Dhaka (starting from the Arunodoy gate, looping clockwise past the central lake, and cutting toward the tennis complex).

**AQI that day:** US AQI 162 (Unhealthy), with high PM2.5 readings across the city, though the afternoon wind cleared a short dip before evening stagnation set in.

**What the plan got right:** It routed me away from the perimeter paved road toward the dirt path under the rain tree canopy, where radiant heat was noticeably lower. It also accurately flagged a mosquito warning for the lake perimeter starting at 5:10 PM, which hit almost right on cue as twilight settled.

**What it got wrong:** The Overpass query routed me through a footpath near the park nursery that was padlocked for ground maintenance. The voice prompt repeatedly told me to turn left into a closed iron gate until I walked far enough past the boundary for the waypoint to clear.

**How long I looked at the screen:** ScreenMeter logged 52 seconds of active screen time across a 34-minute walk (a 2.5% screen-to-walk ratio). I only took the phone out twice: once to check the detour around the locked gate, and once at the end to save an entry in the Nature Journal.

**Ambient, screen-minimizing outdoor companion for safe urban green discovery.**

Built for the [DEV Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass](https://dev.to/challenges/hacktoberfest-week1-2026-10-05).

For over four billion people living in dense urban centers, "touching grass" isn't a 10-minute drive to an alpine hiking trail. In high-density cities like Dhaka, Kolkata, or Bangkok, nature is found in fragmented municipal parks, lakeside promenades, and pocket gardens—tucked behind concrete flyovers and heavy traffic.

To make matters harder, urban nature outings require navigating **environmental realities**: air quality spikes (US AQI > 150), tropical heat waves, intense midday UV radiation, sudden monsoon thunderstorms, and vector-borne mosquito seasons. Worse yet, conventional fitness and navigation apps do the opposite of helping you disconnect—bombarding you with screens, alerts, and map tapping.

**Sobuj Ghonta (সবুজ ঘণ্টা — "The Green Hour")** flips the script:

`npm test`), 16 production integration checks (` scripts/fullQaRunner.mjs`), and 8 deployment smoke tests (` scripts/smoke.mjs`).
Rather than delegating environmental safety decisions to probabilistic LLM hallucinations, Sobuj Ghonta calculates an objective 0–100 hourly score in deterministic JavaScript (`server/services/scoring.js`):

```
// Heuristic scoring: base 100 with environmental penalties and golden-hour bonus
if (aqi > 200) aqiPenalty = 60 + (aqi - 200) * 0.25;
if (apparentTemp > 38) heatPenalty = 35 + (apparentTemp - 38) * 5;
if (isThunder) rainPenalty = 55;
if (!isDaylight) darknessPenalty = 25;
if (isGoldenHour && aqi <= 150 && rainPenalty <= 10) goldenHourBonus = +12;
```

Public health recommendations cannot tolerate hallucinations. In `server/services/guardrails.js`, strict rules validate and sanitize Gemma's structured JSON output:

```
export function validateAndCorrectPlan(plan, guardrails, language = 'en') {
  const corrected = { ...plan };
  // If AQI exceeds hazardous thresholds, override effort level
  if (guardrails.flags.hazardousAqi) {
    corrected.effort_level = 'rest';
  } else if (guardrails.flags.unhealthyAqi && corrected.effort_level === 'strenuous') {
    corrected.effort_level = 'gentle';
  }
  // Guarantee mandatory medical disclaimer and mosquito alerts
  ...
  return corrected;
}
```

`gemma_api` ↔ `ollama`)
In `server/services/llm/adapter.js`, an adapter pattern supports both cloud inference via Google AI Studio (`gemma-4-26b-a4b-it`) and 100% offline edge execution via local **Ollama** (` gemma2:9b`). System constraints are injected directly into the user turn to honor Gemma's prompt contract, and outputs are sanitized defensively with automated markdown fence stripping and regex fallbacks.

When building audio walk narration, commercial paid TTS services created an unnecessary cost barrier. We designed an automated fallback chain in `server/services/tts/index.js`:

`gemini-3.8-flash-tts`):` GEMMA_API_KEY`). Generates 24 kHz studio-quality audio in English and Bengali (`bn-BD`). When encountering Google's free-tier 3 RPM quota limit, it handles backoff automatically.`facebook/mms-tts-ben` & `eng`):` HF_TOKEN`.
The application is deployed to Render using a declarative Blueprint ([`render.yaml`](https://github.com/SayemR0018/sobujGhonta/blob/main/render.yaml)):

`app.set('trust proxy', 1)`) so sliding-window rate limiting works accurately.` 20.18.0` in `.node-version` and `package.json`.`/health` verified without external API dependencies.
Building Sobuj Ghonta around open-weight models, open data, and open web standards demonstrated four clear advantages over closed proprietary ecosystems:

**Model Swappability & Offline Sovereignty:**

A closed AI application is forever tethered to remote billing, latency, and vendor terms. Sobuj Ghonta's open architecture allows anyone to run `LLM_PROVIDER=ollama` with `gemma2:9b` on a consumer laptop. The entire loop — weather scoring, green space navigation, and AI walk generation — runs 100% offline with **zero API toll**.

**Data Sovereignty & Location Privacy:**

Personal location coordinates, walking routines, and photos of nature are deeply private. By relying on public open data (Open-Meteo and OpenStreetMap) and storing journal entries exclusively in on-device **IndexedDB**, the user's physical presence is never tracked, monetized, or sold into advertising profiles.

**Where Open Beat Closed (Heuristic Guardrails):**

Commercial closed chat APIs tend to produce verbose, conversational essays that encourage prolonged screen interaction. By constraining open-weight Gemma with deterministic heuristic code guardrails, we produced terse, safety-verified walk scripts under 60 words that tell the user to put their phone away.

**Cultural & Linguistic Inclusion:**

Open-weight models and open web standards allowed us to deliver first-class Bengali localization with native typography (`Hind Siliguri`), serving communities in South Asia that are routinely overlooked by Western-centric wellness applications.

This project was architected, implemented, and verified using **Google Antigravity** (`gemini_cli`). Real agent session transcripts were curated, sanitized of secrets, and saved through **DevRelay**:

*(Direct Session Link: [https://dev.to/agent_sessions/sobuj-ghonta-architecture-free-tts-chain-full-qa-render-deployment-with-antigravity-d7vlbw](https://dev.to/agent_sessions/sobuj-ghonta-architecture-free-tts-chain-full-qa-render-deployment-with-antigravity-d7vlbw))*

`gemma-4-26b-a4b-it`) and fully offline local `gemma2:9b`).` render.yaml`
