-
-
Next 24 hours and the smog clock, in Uzbek: the morning peak on the walk to school
-
One tap to Telegram, and anonymous "Smoke nearby?" neighbour reports
-
Printable poster with a QR code for the school door
-
Right now in Tashkent, for kids & school
-
A smog day (real data for Lahore as an example): the screen turns hazy and the answer is "stay inside"
-
On any phone: Uzbek, Russian, English, light and dark
Inspiration
Tashkent's air isn't equally bad all day. When we looked at hourly PM2.5 for the city over the last week (Copernicus CAMS forecast), we saw a clear rhythm: the air is dirtiest around 08:00 and cleanest around 16:00. On average it was 3.4× dirtier at 08:00 than at 16:00, so the walk to school was "unhealthy for sensitive groups" (AQI ~102) while the afternoon was moderate.
That means a family or a school could lower the exposure just by choosing the right hour. But nobody does it, because the information never reaches them as a decision.
Data:
- Hourly PM2.5 for Tashkent (Copernicus CAMS via Open-Meteo), Oct 16–23, 2026: morning peak around 08:00, 3.4× dirtier than at 16:00. The walk to school (07:00–09:00) averaged AQI 102. Anyone can reproduce this in the app's Smog clock.
- WHO: 93% of the world's children under 15 breathe air with PM2.5 above WHO guideline levels (WHO, "Air pollution and child health", 2018: https://www.who.int/publications/i/item/air-pollution-and-child-health).
- US EPA: children, older adults and people with asthma are sensitive groups that should limit outdoor exertion when AQI is above 100 (https://www.airnow.gov/aqi/aqi-basics/).
Why not just use Google Weather or IQAir? The data already exists there, and that's exactly the problem: it exists, but it isn't used. Those apps show a number ("AQI 93") or a generic tip, and only to someone who opens the app and checks. A PE teacher planning a lesson, a parent getting kids ready at 7:30, or a grandmother without a smartphone never does. Nafas doesn't add new data. It changes who gets the answer, in what form and where:
| Weather apps | Nafas | |
|---|---|---|
| Output | A number + generic advice | A decision for a specific group: "PE in the gym", "air the room at 14:00" |
| Time | "Now" and a general chart | The school day: tomorrow's walk to school, the best window for PE |
| Delivery | You have to open it | It comes to you: class and mahalla Telegram chats, a 07:00 channel post, a poster on the school door |
| Language | Often English or numbers only | Uzbek, Russian, English |
| Community | None | Neighbours report smoke the model can't see |
What it does
- One clear answer right now for three groups: Kids & school, Asthma / elderly / pregnant, Everyone & sport: Go outside / Only for a short time / Better stay inside, always with the reason (air, cold, heat, rain, wind). The whole screen turns hazy as pollution rises.
- Tomorrow's walk to school: the 07:00–09:00 forecast with a plain tip, so parents can plan the evening before.
- Next 24 hours: an hourly chart coloured by the decision, school hours marked, today's best window.
- What to do now: windows open or closed, PE inside or outside, an N95/FFP2 mask, the inhaler, don't burn leaves.
- Smog clock: the average for each hour over the past 7 days, which shows the city's daily rhythm.
- Telegram, where people already are: one tap sends today's plan to a class or family chat. A "smog alert" asks neighbours not to burn leaves or trash. A free GitHub Actions job posts the plan to a Telegram channel every day at 07:00.
- "Smoke nearby?": anyone can report smoke (burning leaves, trash, coal, dust, traffic) in one of Tashkent's 12 districts. Reports are anonymous (type, district and time only) and show up on the site.
- Printable A4 poster with a QR code for school entrances and staff rooms, for people without smartphones.
- Installable PWA that works offline: without internet it shows the last saved forecast and its time.
How we built it
- Data: Open-Meteo APIs (Copernicus CAMS air-quality forecast, weather, geocoding). They're free and need no API key.
- Decision logic: hourly PM2.5 is converted to US AQI with the EPA 2024 breakpoints. Each group has its own limits (sensitive: short time above AQI 50, inside above 100; others: above 100 / 150), plus "feels like" cold and heat, rain/snow and wind. The worst factor wins. The same module runs in the browser, on the poster and in the Telegram jobs.
- Frontend: plain HTML, CSS and JavaScript (ES modules), with no framework and no build step. Uzbek (Latin), Russian and English. A service worker and manifest make it a PWA.
- No servers: GitHub Pages hosts the site. GitHub Actions runs a daily 07:00 post and a 15-minute job that reads smoke reports from the Telegram bot (deep links) and commits an anonymous reports.json that the site reads.
- Accessibility: every answer has a shape + a word + a colour (never colour alone), large type, light/dark mode, screen-reader labels and keyboard support.
AI disclosure: We used Claude (Anthropic) as an AI coding assistant. It wrote most of the code and translations, and it produced the demo video. The video narration is an AI voice (Kokoro TTS). We chose the problem, set the requirements, tested the app with real Tashkent data and reviewed the Uzbek and Russian text.
Challenges we ran into
- The daily AQI hid the story. The standard US AQI is a 24-hour average, so it barely changes during the day. When we switched to hourly PM2.5, the morning peak showed up clearly, and that became the core idea.
- Not lying with the data. At AQI 70–95 the first version said "clean air, open the windows". We changed it so airing advice follows the real AQI and moderate air is called moderate.
- Collecting neighbour reports without a server or database: we used Telegram deep links + scheduled GitHub Actions + a JSON file in the repo.
- Writing simple, natural Uzbek and Russian advice instead of technical terms.
Accomplishments that we're proud of
- A real, reproducible insight from open data: the 08:00 peak on the walk to school.
- Everything is free to run: no servers, no API keys, no accounts.
- It reaches people who will never install an app: Telegram chats and a paper poster.
What we learned
How air quality is actually measured and modelled (PM2.5, AQI breakpoints, why a 24-hour average hides daily peaks); that the hard part isn't the data but delivery and trust; and how far you can get with no backend at all.
What's next
- Add real ground sensors (city monitoring stations, low-cost sensors at schools) next to the model forecast.
- A bot that teachers add to their own class chat, with their own lesson times.
- Evening alerts before a bad morning, so parents can plan the walk to school.
- Test it with schools and a mahalla committee in our district.
Built With
- copernicus
- css3
- github
- github-actions
- html5
- javascript
- node.js
- open-meteo
- pwa
- telegram-bot-api
Log in or sign up for Devpost to join the conversation.