
Saans: Helping People Understand the Air Around Them with AWS
Saans is an India-focused air-quality companion that turns air data into information people can use in daily life. Instead of displaying a number without context, Saans brings together nearby monitor readings, forecasts, weather, health guidance, route comparisons, and local alerts. We built Saans around a simple question: What does the air mean for me, where I live and travel?
Saans asks a few questions to make its guidance more relevant: what to call you, your age group, how much time you spend outdoors, what your home environment is like, and whether you have a health condition that may affect your response to pollution. You can also opt in to email alerts.
The answers help select a persona, such as an outdoor worker, commuter, child, older adult, or someone with a heart or lung condition. Saans combines that context with local pollutant levels and air-quality bands to choose relevant advice. For instance, when pollution is high, someone who works outdoors may see suggestions to reduce exertion or use a well-fitted N95. Someone with asthma may see advice to keep their prescribed reliever plan in mind.
This is rules-based educational guidance, not a diagnosis or a clinical risk score. The profile is kept on the device for normal use. If someone opts into email alerts, their email, location, and alert preferences are stored by the backend so those alerts can be sent.

One app, two perspectives
Saans has two views: Citizen and Government. Citizen view includes Today, Overview, Airspace, Health, Trip Planner, Daily Challenge, and More. Government view includes Overview, Area Watch, and More. Ask Saans is available through a chat button on product pages.
Citizen view
Today: Understand the air today
Today brings together local air conditions, the dominant pollutant, an indicative AQI, a short forecast, and suggestions shaped by the user’s profile. The app distinguishes model-based AQI from an official CPCB reading. Its backend endpoint combines provider data and guidance in Lambda, with API Gateway serving requests and DynamoDB caching responses.

Overview: Explore forecasts and recent history
Overview includes hourly air information, historical PM2.5 and ventilation trends, a backtest comparing stagnant and ventilated days, explanations of unusual periods, and CSV download. The backend fetches forecast and history data, caches history for six hours, and can use Bedrock, Gemini, or weather-based rules to explain unusual patterns. An optional Delhi ward forecast is a separate, heavier component that reads forecast artifacts from S3.

Airspace: Find nearby monitors
Airspace displays nearby monitors on a map, with readings, reporting information, and freshness context. Users can search for Indian places or use a location option. Amazon Location Service supports place search, with Open-Meteo geocoding as a fallback. Air observations are supplied through the backend API.

Health: Understand possible health effects
Health presents pollutants from highest to lowest and lets users select one to see where it may affect the respiratory system, along with short- and long-term effects, WHO guideline comparisons, and practical suggestions. The lung animation is an educational illustration. Red highlighting indicates areas associated with a pollutant, not detected injury. This section uses air data and the user’s locally derived persona, alongside health guidance in the app. It does not make a diagnosis.

Trip Planner: Compare routes and departure times
Trip Planner compares up to three driving routes using estimated PM2.5, visibility, hazy kilometres, journey time, and available nearby monitor readings. On shorter trips, it can show how much of the route has monitor coverage. When routes have similar estimated air, the faster route can be recommended to reduce time travelling. People can also compare departure hours over the next day. Lambda combines route data from OSRM with forecast and visibility data. DynamoDB caches trip results. Route estimates are not street-level guarantees.

Daily Challenge: Learn one concept at a time
Daily Challenge offers one air-awareness question a day in English or Hindi, a streak, and a recent-question strip. Older questions can be practised without changing the score. The quiz and progress run on the device. They do not require a separate AWS database feature.

More: Manage preferences and learn how to use Saans
More contains profile, language, location, health settings, reduced motion, how-to guidance, data and privacy information, and the option to replay the welcome screen. Most preferences stay on the device. If someone opts into email alerts, the backend stores their subscriber details and preferences in DynamoDB and uses SNS for delivery.

Government view
Overview: Review the broader picture
Government Overview presents the same kind of air and historical context as the Citizen Overview, for a location-based review.
Area Watch: Explore possible regional context
Area Watch combines available fire hotspots with wind and weather information, including the upwind area. NASA FIRMS data requires a configured key. The upwind wedge and smoke path are heuristic or illustrative. They are not a validated plume model or proof that a particular fire caused local pollution. The backend retrieves and processes the available sources through Lambda.

Government advisory: Preview local communication
From Government view, an operator can preview a bilingual advisory based on area data for opted-in subscribers nearby. The project’s advisory interface is labelled simulated. The walkthrough should not imply that real alerts are being sent unless the AWS delivery path has been verified. The designed workflow uses SNS, while EventBridge Scheduler and Step Functions support scheduled subscriber alert processing.

Ask Saans
Ask Saans: Ask questions in everyday language
The chat button lets users ask about air conditions and guidance using local context and profile information. Its backend tries Amazon Bedrock, then Gemini if configured, then deterministic rules. Provider keys are kept server-side in Systems Manager Parameter Store SecureString parameters rather than frontend code.

How AWS fits into the architecture
Saans uses AWS for website hosting, backend APIs, data caching, secure configuration, and alert workflows.
The web app is hosted with AWS Amplify Hosting. Amplify supports deploying a website from a Git repository or through a manual deployment workflow, which fits Saans’s static PWA frontend.
The frontend sends requests to an Amazon API Gateway HTTP API, which routes them to AWS Lambda functions. Lambda handles tasks such as assembling air and weather data, preparing historical responses, comparing routes, and answering assistant requests. HTTP APIs can integrate directly with Lambda, giving the app a serverless API path without a continuously running application server.
Saans uses Amazon DynamoDB as a short-lived cache for responses, reducing repeated calls to external data providers. Cache records carry an expiration time through DynamoDB Time to Live (TTL). The app checks that expiration when deciding whether cached data is still usable; DynamoDB deletes expired items asynchronously, typically within a few days of the timestamp. Separately, people who opt into email alerts have subscriber records stored for the alert workflow until they unsubscribe.
External API keys are configured on the backend, not in browser code. Saans uses AWS Systems Manager Parameter Store SecureString parameters for encrypted configuration values, with access controlled through IAM permissions. SecureString values use AWS KMS encryption.
For alerts, Amazon SNS supports email delivery. Amazon EventBridge Scheduler starts a AWS Step Functions workflow on a schedule; Step Functions processes subscribers in limited batches and supports retries for failures.
Amazon Bedrock can power Ask Saans when configured. The assistant can fall back to Gemini or deterministic rules if a model provider is unavailable. Amazon Location Service supports place search, and an optional forecasting component can use encrypted Amazon S3 storage.
Amazon CloudWatch collects logs and application metrics for operational visibility. The infrastructure is described in AWS SAM and CloudFormation templates, so the backend resources can be managed as code.
Cost-conscious choices and current limitations
We designed the backend to avoid a permanently running application server. The API has a low request throttle, and the cache table uses deliberately small provisioned capacity. The subscriber table uses on-demand billing and has a configured cap. These controls help limit usage, but they do not guarantee that AWS costs will stay below a particular amount; budget alerts are warnings, not spending caps.
Saans is a live-data prototype, and its limitations matter. Model-based AQI is indicative, not an official CPCB measurement. Forecasts and route scores are estimates, and regional forecast grids cannot resolve every street-level difference. Fire and wind visualizations help explain possible context but do not calculate a validated smoke plume. Health guidance is educational and should not replace medical advice.
Our next steps are to validate data quality across more Indian cities, review multilingual health guidance, test the advisory workflow with appropriate subscribers, and verify that each AWS component is deployed and monitored as intended.
Saans aims to make air quality easier to understand and to help citizens and local authorities act on that understanding.
Enjoyed reading this content? Let the author know!
Your likes, comments, shares, and saves help creators reach more builders.
Loading recommendations
Loading article