Context
Smart Air runs air-quality monitoring stations across Bangladesh. They needed people to see readings near them on their phone, a team-facing panel to run the service, and a way for anyone to ask questions about the air without reading charts.
What I built
- Mobile app (React Native, Expo). Stations near you with their current AQI, station detail and history charts, and an in-app assistant.
- Admin panel (React 19, MUI, TanStack Query). Users, admin roles, assistant chats, help requests, invitations and blog posts, behind admin and super-admin roles.
- Backend (FastAPI, MySQL). Station data and the assistant API used by both clients.
The assistant
Most people don’t know what an AQI of 158 means. The assistant takes a plain question (“What’s the air like in Dhaka?”) and answers from the live readings in MySQL, using a language model to turn the question into a query. It replies in terms of cigarettes smoked, a unit people feel, and offers two or three follow-up questions so the conversation keeps going without typing.
Decisions worth noting
- Show cigarettes, not only AQI. Same data, but people act on a number they can feel.
- Query live data instead of a document index. Readings change every hour, so the assistant queries the database directly rather than answering from a stale snapshot.
- One admin for everything the team touches. Users, content and support live in one panel, so the team doesn’t juggle tools.

