1<!DOCTYPE html><html lang="en" data-theme="light"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/22a5144ee8d83bca-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/7d4881bb7e1bf84d-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" imageSrcSet="/_next/image?url=%2Flogo-aqi.png&w=48&q=75 1x, /_next/image?url=%2Flogo-aqi.png&w=96&q=75 2x"/><link rel="stylesheet" href="/_next/static/css/32ced6f1633ce9ae.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-1d666f331214eee0.js"/>
1<script src="/_next/static/chunks/4bd1b696-778ec8b57ec8ff68.js" async=""></script>
1<script src="/_next/static/chunks/684-29f24d2b429405e2.js" async=""></script>
1<script src="/_next/static/chunks/main-app-df55f4bdaf350cb2.js" async=""></script>
1<script src="/_next/static/chunks/648-9b246fe09630e975.js" async=""></script>
1<script src="/_next/static/chunks/app/page-225dc42a0c5de966.js" async=""></script>
1<meta name="next-size-adjust" content=""/>
1<script>(function(){try{var t=localStorage.getItem('bnu-aqi-theme');document.documentElement.dataset.theme=t==='dark'?'dark':'light';}catch(e){document.documentElement.dataset.theme='light';}})();</script>
1<title>BNU AQI Dashboard</title><meta name="description" content="Indoor air quality monitoring across Beaconhouse National University schools - pollutant trends, ventilation and the effect of indoor plants."/><link rel="icon" href="/logo-aqi.png"/><link rel="apple-touch-icon" href="/logo-aqi.png"/>
1<script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script>
1<script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script>
1</head><body class="__variable_246ccd __variable_c29908 font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><div class="min-h-screen bg-page"><div aria-hidden="true" class="pointer-events-none fixed inset-x-0 top-0 z-50 h-0.5 overflow-hidden transition-opacity duration-200 opacity-0"></div><header class="themed border-b border-line bg-card"><div class="mx-auto flex max-w-[1400px] items-center gap-4 px-4 py-4 sm:px-6 lg:px-8"><img alt="" width="44" height="44" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" srcSet="/_next/image?url=%2Flogo-aqi.png&w=48&q=75 1x, /_next/image?url=%2Flogo-aqi.png&w=96&q=75 2x" src="/_next/image?url=%2Flogo-aqi.png&w=96&q=75"/><div class="min-w-0 flex-1"><h1 class="truncate text-lg font-semibold tracking-tight text-ink">BNU AQI Dashboard</h1><p class="truncate text-xs text-ink-3">Indoor air quality across Beaconhouse National University</p></div><button type="button" aria-label="Switch to dark theme" title="Switch to dark theme" class="themed grid h-9 w-9 place-items-center rounded-lg border border-line bg-card text-ink-2 transition-colors hover:border-line-strong hover:text-ink focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/30"><svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon "><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg></button></div></header><div class="themed sticky top-0 z-30 border-b border-line bg-card/95 backdrop-blur"><div class="mx-auto flex max-w-[1400px] flex-col gap-3 px-4 py-3 sm:px-6 lg:px-8"><div class="w-full sm:w-auto sm:max-w-[420px]">
1<div role="tablist" aria-label="Dashboard view" class="themed inline-flex w-full rounded-lg border border-line bg-card-muted p-0.5"><button role="tab" aria-selected="true" type="button" class="flex flex-1 items-center justify-center gap-1.5 whitespace-nowrap rounded-[0.4rem] font-medium transition-colors px-3 py-1.5 text-sm bg-card text-ink shadow-card"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-trending-up "><polyline points="22 7 13.5 15.5 8.5 10.5 2 17"></polyline><polyline points="16 7 22 7 22 13"></polyline></svg>Trends over time</button><button role="tab" aria-selected="false" type="button" class="flex flex-1 items-center justify-center gap-1.5 whitespace-nowrap rounded-[0.4rem] font-medium transition-colors px-3 py-1.5 text-sm text-ink-3 hover:text-ink-2"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-git-compare "><circle cx="18" cy="18" r="3"></circle><circle cx="6" cy="6" r="3"></circle><path d="M13 6h3a2 2 0 0 1 2 2v7"></path><path d="M11 18H8a2 2 0 0 1-2-2V9"></path></svg>Plants vs no plants</button></div></div><div class="grid grid-cols-2 gap-3 sm:grid-cols-4"><div class="animate-pulse rounded-lg bg-line h-[58px]"></div><div class="animate-pulse rounded-lg bg-line h-[58px]"></div><div class="animate-pulse rounded-lg bg-line h-[58px]"></div><div class="animate-pulse rounded-lg bg-line h-[58px]"></div></div></div></div><main class="mx-auto max-w-[1400px] px-4 py-6 sm:px-6 lg:px-8"><div aria-busy="false" class="transition-opacity duration-200 opacity-100"><div class="space-y-6"><section class="grid grid-cols-2 gap-4 md:grid-cols-4"><div class="themed rounded-2xl border border-line bg-card px-4 py-4 shadow-card"><div class="flex items-center gap-2.5"><span class="grid h-9 w-9 shrink-0 place-items-center rounded-xl" style="color:#2a78d6;background-color:#2a78d61f"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-gauge "><path d="m12 14 4-4"></path><path d="M3.34 19a10 10 0 1 1 17.32 0"></path></svg></span><span class="min-w-0 truncate text-[0.7rem] font-semibold uppercase tracking-wide text-ink-3">Average Score</span></div><div class="mt-3 flex items-baseline gap-1.5"><span class="font-semibold leading-none text-ink text-3xl">0.0</span></div><div class="mt-2 min-h-5"><span class="inline-flex items-center gap-1.5 rounded-full bg-card-muted px-2 py-0.5 text-xs font-medium text-ink-2"><span class="h-2 w-2 shrink-0 rounded-full" style="background-color:#d03b3b"></span>Bad</span></div></div><div class="themed rounded-2xl border border-line bg-card px-4 py-4 shadow-card"><div class="flex items-center gap-2.5"><span class="grid h-9 w-9 shrink-0 place-items-center rounded-xl" style="color:#1baf7a;background-color:#1baf7a1f"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-down-circle "><circle cx="12" cy="12" r="10"></circle><path d="M12 8v8"></path><path d="m8 12 4 4 4-4"></path></svg></span><span class="min-w-0 truncate text-[0.7rem] font-semibold uppercase tracking-wide text-ink-3">Lowest Score</span></div><div class="mt-3 flex items-baseline gap-1.5"><span class="font-semibold leading-none text-ink text-3xl">0.0</span></div><div class="mt-2 min-h-5"><span class="text-xs text-ink-3">Single lowest reading</span></div></div><div class="themed rounded-2xl border border-line bg-card px-4 py-4 shadow-card"><div class="flex items-center gap-2.5"><span class="grid h-9 w-9 shrink-0 place-items-center rounded-xl" style="color:#eb6834;background-color:#eb68341f"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-circle "><circle cx="12" cy="12" r="10"></circle><path d="m16 12-4-4-4 4"></path><path d="M12 16V8"></path></svg></span><span class="min-w-0 truncate text-[0.7rem] font-semibold uppercase tracking-wide text-ink-3">Highest Score</span></div><div class="mt-3 flex items-baseline gap-1.5"><span class="font-semibold leading-none text-ink text-3xl">0.0</span></div><div class="mt-2 min-h-5"><span class="text-xs text-ink-3">
1Single highest reading</span></div></div><div class="themed rounded-2xl border border-line bg-card px-4 py-4 shadow-card"><div class="flex items-center gap-2.5"><span class="grid h-9 w-9 shrink-0 place-items-center rounded-xl" style="color:#4a3aa7;background-color:#4a3aa71f"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-clock "><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg></span><span class="min-w-0 truncate text-[0.7rem] font-semibold uppercase tracking-wide text-ink-3">Peak hour</span></div><div class="mt-3 flex items-baseline gap-1.5"><span class="font-semibold leading-none text-ink text-3xl">â</span></div><div class="mt-2 min-h-5"><span class="text-xs text-ink-3">Highest average air quality score</span></div></div></section><section class="themed rounded-2xl border border-line bg-card shadow-card"><header class="flex flex-wrap items-start justify-between gap-3 border-b border-line px-5 py-4"><div class="min-w-0"><h2 class="flex items-center gap-2 text-[0.95rem] font-semibold text-ink"><svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-trending-up text-accent"><polyline points="22 7 13.5 15.5 8.5 10.5 2 17"></polyline><polyline points="16 7 22 7 22 13"></polyline></svg><span class="truncate">Air Quality Score through </span></h2><p class="mt-0.5 text-xs text-ink-3">Daily average · </p></div></header><div class="px-5 py-4"><div class="flex min-h-[200px] flex-col items-center justify-center gap-3 rounded-lg border border-dashed border-line px-6 py-10 text-center"><p class="max-w-sm text-sm text-ink-3">No readings for this selection.</p></div></div></section><div class="grid grid-cols-1 gap-6 lg:grid-cols-3"><section class="themed rounded-2xl border border-line bg-card shadow-card lg:col-span-2"><header class="flex flex-wrap items-start justify-between gap-3 border-b border-line px-5 py-4"><div class="min-w-0"><h2 class="flex items-center gap-2 text-[0.95rem] font-semibold text-ink"><svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-activity text-accent"><path d="M22 12h-4l-3 9L9 3l-3 9H2"></path></svg><span class="truncate">Air Quality Score by time of day</span></h2><p class="mt-0.5 text-xs text-ink-3">Average across every day in the month; the peak hour is highlighted</p></div></header><div class="px-5 py-4"><div class="flex min-h-[200px] flex-col items-center justify-center gap-3 rounded-lg border border-dashed border-line px-6 py-10 text-center"><p class="max-w-sm text-sm text-ink-3">No readings for this selection.</p></div></div></section><section class="themed rounded-2xl border border-line bg-card shadow-card"><header class="flex flex-wrap items-start justify-between gap-3 border-b border-line px-5 py-4"><div class="min-w-0"><h2 class="flex items-center gap-2 text-[0.95rem] font-semibold text-ink"><svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-gauge text-accent"><path d="m12 14 4-4"></path><path d="M3.34 19a10 10 0 1 1 17.32 0"></path></svg><span class="truncate">Air quality score bands</span></h2><p class="mt-0.5 text-xs text-ink-3">Share of readings in each band</p></div></header><div class="px-5 py-4"><div class="flex min-h-[200px] flex-col items-center justify-center gap-3 rounded-lg border border-dashed border-line px-6 py-10 text-center"><p class="max-w-sm text-sm text-ink-3">No readings for this selection.</p></div><p class="mt-4 border-t border-line pt-3 text-xs leading-relaxed text-ink-3">The sensor score runs 0 to 100 and rises as conditions improve, so a higher share in the upper bands is better.</p></div></section></div><section class="themed rounded-2xl border border-line bg-card shadow-card"><header class="flex flex-wrap items-start justify-between gap-3 border-b border-line px-5 py-4"><div class="min-w-0"><h2 class="flex items-center gap-2 text-[0.95rem] font-semibold text-ink"><svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layers text-accent"><path d="m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"></path><path d="m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65"></path><path d="m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65"></path></svg><span class="truncate">Pollutants through the month</span></h2><p class="mt-0.5 text-xs text-ink-3">Each pollutant on its own scale â they are measured in different units and do not sum</p></div></header><div class="px-5 py-4"><div class="flex min-h-[200px] flex-col items-center justify-center gap-3 rounded-lg border border-dashed border-line px-6 py-10 text-center"><p class="max-w-sm text-sm text-ink-3">No readings for this selection.</p></div></div></section><div class="grid grid-cols-1 gap-6 lg:grid-cols-3"><section class="themed rounded-2xl border border-line bg-card shadow-card lg:col-span-2"><header class="flex flex-wrap items-start justify-between gap-3 border-b border-line px-5 py-4"><div class="min-w-0"><h2 class="flex items-center gap-2 text-[0.95rem] font-semibold text-ink"><svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-grid3x3 text-accent"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M3 9h18"></path><path d="M3 15h18"></path><path d="M9 3v18"></path><path d="M15 3v18"></path></svg><span class="truncate">Air Quality Score by weekday and hour</span></h2><p class="mt-0.5 text-xs text-ink-3">Stronger colour means a higher average; blank cells were never sampled</p></div></header><div class="px-5 py-4"><div class="flex min-h-[200px] flex-col items-center justify-center gap-3 rounded-lg border border-dashed border-line px-6 py-10 text-center"><p class="max-w-sm text-sm text-ink-3">No readings for this selection.</p></div></div></section><section class="themed rounded-2xl border border-line bg-card shadow-card"><header class="flex flex-wrap items-start justify-between gap-3 border-b border-line px-5 py-4"><div class="min-w-0"><h2 class="flex items-center gap-2 text-[0.95rem] font-semibold text-ink"><svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-scatter-chart text-accent"><circle cx="7.5" cy="7.5" r=".5"></circle><circle cx="18.5" cy="5.5" r=".5"></circle><circle cx="11.5" cy="11.5" r=".5"></circle><circle cx="7.5" cy="16.5" r=".5"></circle><circle cx="17.5" cy="14.5" r=".5"></circle><path d="M3 3v18h18"></path></svg><span class="truncate">PM2.5 against PM10</span></h2><p class="mt-0.5 text-xs text-ink-3">0 sampled readings</p></div></header><div class="px-5 py-4"><div class="flex min-h-[200px] flex-col items-center justify-center gap-3 rounded-lg border border-dashed border-line px-6 py-10 text-center"><p class="max-w-sm text-sm text-ink-3">No readings for this selection.</p></div></div></section></div></div></div><div class="mt-10 space-y-6"><section class="themed rounded-2xl border border-line bg-card shadow-card rise"><header class="flex flex-wrap items-start justify-between gap-3 border-b border-line px-5 py-4"><div class="min-w-0"><h2 class="flex items-center gap-2 text-[0.95rem] font-semibold text-ink"><span class="truncate">About Sensors & Data Collection</span></h2><p class="mt-0.5 text-xs text-ink-3">Awair sensors logging at five-minute intervals</p></div></header><div class="px-5 py-4"><div class="grid gap-6 md:grid-cols-[minmax(0,3fr)_minmax(0,2fr)] md:items-stretch">
1<div class="space-y-4 text-justify text-sm leading-relaxed text-ink-2 hyphens-auto"><p>Our ground-based sensor network is strategically deployed across selected indoor spaces at BNU to capture real-world indoor environmental conditions. Sensors are placed across different rooms and building settings, including spaces with and without indoor plants, allowing us to compare air-quality conditions and assess how plant-based interventions perform under different indoor environments. The deployment provides continuous, location-specific measurements that capture variations across spaces and over time. These ground observations also provide a reliable basis for evaluating environmental conditions alongside building, occupancy, and ventilation characteristics.</p></div><div class="relative min-h-[200px] overflow-hidden rounded-xl border border-line bg-card-muted p-4 md:h-full"><img alt="An Awair air quality sensor of the type deployed across campus" loading="lazy" decoding="async" data-nimg="fill" class="object-contain p-2" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(max-width: 768px) 100vw, 50vw" srcSet="/_next/image?url=%2Fawair.png&w=384&q=75 384w, /_next/image?url=%2Fawair.png&w=640&q=75 640w, /_next/image?url=%2Fawair.png&w=750&q=75 750w, /_next/image?url=%2Fawair.png&w=828&q=75 828w, /_next/image?url=%2Fawair.png&w=1080&q=75 1080w, /_next/image?url=%2Fawair.png&w=1200&q=75 1200w, /_next/image?url=%2Fawair.png&w=1920&q=75 1920w, /_next/image?url=%2Fawair.png&w=2048&q=75 2048w, /_next/image?url=%2Fawair.png&w=3840&q=75 3840w" src="/_next/image?url=%2Fawair.png&w=3840&q=75"/></div></div></div></section><section class="themed rounded-2xl border border-line bg-card shadow-card rise"><header class="flex flex-wrap items-start justify-between gap-3 border-b border-line px-5 py-4"><div class="min-w-0"><h2 class="flex items-center gap-2 text-[0.95rem] font-semibold text-ink"><span class="truncate">Why PM2.5 matters</span></h2><p class="mt-0.5 text-xs text-ink-3">Share of global deaths from each condition attributable to PM2.5 exposure</p></div></header><div class="px-5 py-4"><div class="grid gap-8 md:grid-cols-2 md:items-center"><figure class="min-w-0"><div style="height:300px" aria-hidden="true"></div><figcaption class="mt-3 text-xs text-ink-3">Approximate share of global deaths from each condition attributed to fine particulate exposure.</figcaption></figure><div class="space-y-4"><p class="text-justify text-sm leading-relaxed text-ink-2 hyphens-auto">PM2.5 describes particles 2.5 micrometres across or smaller â roughly thirty times finer than a human hair. They pass the body's natural filters, settle deep in the lungs and cross into the bloodstream, which is why a single pollutant shows up behind such different diseases.</p><div class="overflow-hidden rounded-xl border border-line bg-card-muted p-4"><img alt="Diagram comparing the size of PM2.5 particles with a human hair and a grain of sand" loading="lazy" width="800" height="520" decoding="async" data-nimg="1" class="h-auto w-full object-contain" style="color:transparent" sizes="(max-width: 768px) 100vw, 45vw" srcSet="/_next/image?url=%2Fpm25.png&w=384&q=75 384w, /_next/image?url=%2Fpm25.png&w=640&q=75 640w, /_next/image?url=%2Fpm25.png&w=750&q=75 750w, /_next/image?url=%2Fpm25.png&w=828&q=75 828w, /_next/image?url=%2Fpm25.png&w=1080&q=75 1080w, /_next/image?url=%2Fpm25.png&w=1200&q=75 1200w, /_next/image?url=%2Fpm25.png&w=1920&q=75 1920w, /_next/image?url=%2Fpm25.png&w=2048&q=75 2048w, /_next/image?url=%2Fpm25.png&w=3840&q=75 3840w" src="/_next/image?url=%2Fpm25.png&w=3840&q=75"/></div></div></div></div></section><section class="themed rounded-2xl border border-line bg-card shadow-card rise"><header class="flex flex-wrap items-start justify-between gap-3 border-b border-line px-5 py-4"><div class="min-w-0"><h2 class="flex items-center gap-2 text-[0.95rem] font-semibold text-ink"><span class="truncate">The plants used in the planted rooms</span></h2><p class="mt-0.5 text-xs text-ink-3">Selected for tolerance of low indoor light and for their filtering behaviour</p></div></header><div class="px-5 py-4"><div class="grid grid-cols-2 gap-5 lg:grid-cols-4"><figure class="group"><div class="relative aspect-4/3 overflow-hidden rounded-xl border border-line bg-card-muted"><img alt="Aloe Vera" loading="lazy" decoding="async" data-nimg="fill" class="object-contain p-3 transition-transform duration-300 group-hover:scale-105" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(max-width: 640px) 50vw, 25vw" srcSet="/_next/image?url=%2Faelovera.jpeg&w=256&q=75 256w, /_next/image?url=%2Faelovera.jpeg&w=384&q=75 384w, /_next/image?url=%2Faelovera.jpeg&w=640&q=75 640w, /_next/image?url=%2Faelovera.jpeg&w=750&q=75 750w, /_next/image?url=%2Faelovera.jpeg&w=828&q=75 828w, /_next/image?url=%2Faelovera.jpeg&w=1080&q=75 1080w, /_next/image?url=%2Faelovera.jpeg&w=1200&q=75 1200w, /_next/image?url=%2Faelovera.jpeg&w=1920&q=75 1920w, /_next/image?url=%2Faelovera.jpeg&w=2048&q=75 2048w, /_next/image?url=%2Faelovera.jpeg&w=3840&q=75 3840w" src="/_next/image?url=%2Faelovera.jpeg&w=3840&q=75"/></div><figcaption class="mt-3"><p class="text-sm font-semibold text-ink">Aloe Vera</p><p class="text-xs italic text-ink-3">Aloe barbadensis miller</p></figcaption></figure><figure class="group"><div class="relative aspect-4/3 overflow-hidden rounded-xl border border-line bg-card-muted"><img alt="Bamboo Palm" loading="lazy" decoding="async" data-nimg="fill" class="object-contain p-3 transition-transform duration-300 group-hover:scale-105" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(max-width: 640px) 50vw, 25vw" srcSet="/_next/image?url=%2Fbambo-palm.
1jpg&w=256&q=75 256w, /_next/image?url=%2Fbambo-palm.jpg&w=384&q=75 384w, /_next/image?url=%2Fbambo-palm.jpg&w=640&q=75 640w, /_next/image?url=%2Fbambo-palm.jpg&w=750&q=75 750w, /_next/image?url=%2Fbambo-palm.jpg&w=828&q=75 828w, /_next/image?url=%2Fbambo-palm.jpg&w=1080&q=75 1080w, /_next/image?url=%2Fbambo-palm.jpg&w=1200&q=75 1200w, /_next/image?url=%2Fbambo-palm.jpg&w=1920&q=75 1920w, /_next/image?url=%2Fbambo-palm.jpg&w=2048&q=75 2048w, /_next/image?url=%2Fbambo-palm.jpg&w=3840&q=75 3840w" src="/_next/image?url=%2Fbambo-palm.jpg&w=3840&q=75"/></div><figcaption class="mt-3"><p class="text-sm font-semibold text-ink">Bamboo Palm</p><p class="text-xs italic text-ink-3">Chamaedorea seifrizii</p></figcaption></figure><figure class="group"><div class="relative aspect-4/3 overflow-hidden rounded-xl border border-line bg-card-muted"><img alt="Snake Plant" loading="lazy" decoding="async" data-nimg="fill" class="object-contain p-3 transition-transform duration-300 group-hover:scale-105" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(max-width: 640px) 50vw, 25vw" srcSet="/_next/image?url=%2FDracaena-Trifasciata.jpeg&w=256&q=75 256w, /_next/image?url=%2FDracaena-Trifasciata.jpeg&w=384&q=75 384w, /_next/image?url=%2FDracaena-Trifasciata.jpeg&w=640&q=75 640w, /_next/image?url=%2FDracaena-Trifasciata.jpeg&w=750&q=75 750w, /_next/image?url=%2FDracaena-Trifasciata.jpeg&w=828&q=75 828w, /_next/image?url=%2FDracaena-Trifasciata.jpeg&w=1080&q=75 1080w, /_next/image?url=%2FDracaena-Trifasciata.jpeg&w=1200&q=75 1200w, /_next/image?url=%2FDracaena-Trifasciata.jpeg&w=1920&q=75 1920w, /_next/image?url=%2FDracaena-Trifasciata.jpeg&w=2048&q=75 2048w, /_next/image?url=%2FDracaena-Trifasciata.jpeg&w=3840&q=75 3840w" src="/_next/image?url=%2FDracaena-Trifasciata.jpeg&w=3840&q=75"/></div><figcaption class="mt-3"><p class="text-sm font-semibold text-ink">Snake Plant</p><p class="text-xs italic text-ink-3">Sansevieria trifasciata</p></figcaption></figure><figure class="group"><div class="relative aspect-4/3 overflow-hidden rounded-xl border border-line bg-card-muted"><img alt="Lady Palm" loading="lazy" decoding="async" data-nimg="fill" class="object-contain p-3 transition-transform duration-300 group-hover:scale-105" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(max-width: 640px) 50vw, 25vw" srcSet="/_next/image?url=%2Flady-palm.jpeg&w=256&q=75 256w, /_next/image?url=%2Flady-palm.jpeg&w=384&q=75 384w, /_next/image?url=%2Flady-palm.jpeg&w=640&q=75 640w, /_next/image?url=%2Flady-palm.jpeg&w=750&q=75 750w, /_next/image?url=%2Flady-palm.jpeg&w=828&q=75 828w, /_next/image?url=%2Flady-palm.jpeg&w=1080&q=75 1080w, /_next/image?url=%2Flady-palm.jpeg&w=1200&q=75 1200w, /_next/image?url=%2Flady-palm.jpeg&w=1920&q=75 1920w, /_next/image?url=%2Flady-palm.jpeg&w=2048&q=75 2048w, /_next/image?url=%2Flady-palm.jpeg&w=3840&q=75 3840w" src="/_next/image?url=%2Flady-palm.jpeg&w=3840&q=75"/></div><figcaption class="mt-3"><p class="text-sm font-semibold text-ink">Lady Palm</p><p class="text-xs italic text-ink-3">Rhapis excelsa</p></figcaption></figure></div></div></section><section class="themed rounded-2xl border border-line bg-card shadow-card rise"><header class="flex flex-wrap items-start justify-between gap-3 border-b border-line px-5 py-4"><div class="min-w-0"><h2 class="flex items-center gap-2 text-[0.95rem] font-semibold text-ink"><span class="truncate">Program leads</span></h2></div></header><div class="px-5 py-4"><div class="grid gap-6 md:grid-cols-3"><article class="flex flex-col items-center text-center"><img alt="Dr. Moeed Yusuf" loading="lazy" width="112" height="112" decoding="async" data-nimg="1" class="h-28 w-28 rounded-full border border-line object-cover" style="color:transparent" srcSet="/_next/image?url=https%3A%2F%2Fstatic.tossdown.
1com%2Fbnu%2F6ac8ea42-c8d3-4df4-9ac0-ef51236d7908.webp&w=128&q=75 1x, /_next/image?url=https%3A%2F%2Fstatic.tossdown.com%2Fbnu%2F6ac8ea42-c8d3-4df4-9ac0-ef51236d7908.webp&w=256&q=75 2x" src="/_next/image?url=https%3A%2F%2Fstatic.tossdown.com%2Fbnu%2F6ac8ea42-c8d3-4df4-9ac0-ef51236d7908.webp&w=256&q=75"/><h3 class="mt-4 text-sm font-semibold text-ink">Dr. Moeed Yusuf</h3><p class="mt-0.5 text-xs font-medium text-accent-ink">Policy Adviser</p><p class="mt-3 text-xs leading-relaxed text-ink-3">A scholar of political science and international relations who has taught at Boston University and LUMS, served as Pakistanâs youngest National Security Adviser, and held senior roles at Harvardâs Kennedy School and the U.S. Institute of Peace. Author of Brokered Bargaining (Stanford, 2018) and currently a Senior Fellow at Harvardâs Belfer Center.</p></article><article class="flex flex-col items-center text-center"><img alt="Dr. Usman Nazir" loading="lazy" width="112" height="112" decoding="async" data-nimg="1" class="h-28 w-28 rounded-full border border-line object-cover" style="color:transparent" srcSet="/_next/image?url=https%3A%2F%2Fstatic.tossdown.
1com%2Fbnu%2Ff1250d06-600e-424c-9ce3-5babe8f53949.webp&w=128&q=75 1x, /_next/image?url=https%3A%2F%2Fstatic.tossdown.com%2Fbnu%2Ff1250d06-600e-424c-9ce3-5babe8f53949.webp&w=256&q=75 2x" src="/_next/image?url=https%3A%2F%2Fstatic.tossdown.com%2Fbnu%2Ff1250d06-600e-424c-9ce3-5babe8f53949.webp&w=256&q=75"/><h3 class="mt-4 text-sm font-semibold text-ink">Dr. Usman Nazir</h3><p class="mt-0.5 text-xs font-medium text-accent-ink">Research Scientist, Group Head</p><p class="mt-3 text-xs leading-relaxed text-ink-3">Group head at Beaconhouse National Universityâs Center for AI Research, working on satellite imagery and remote sensing. Previously at LUMS, Oxford and Leeds on poverty mapping, environmental health and vehicle emissions. Recipient of the Facebook CV4GC award and a Commonwealth Split-Site PhD Scholarship.</p></article><article class="flex flex-col items-center text-center"><img alt="Hafiz Muhammad Abubakar" loading="lazy" width="112" height="112" decoding="async" data-nimg="1" class="h-28 w-28 rounded-full border border-line object-cover" style="color:transparent" srcSet="/_next/image?url=%2Fabubakar.jpg&w=128&q=75 1x, /_next/image?url=%2Fabubakar.jpg&w=256&q=75 2x" src="/_next/image?url=%2Fabubakar.jpg&w=256&q=75"/><h3 class="mt-4 text-sm font-semibold text-ink">Hafiz Muhammad Abubakar</h3><p class="mt-0.5 text-xs font-medium text-accent-ink">Associate Researcher, Lead Data Analyst</p><p class="mt-3 text-xs leading-relaxed text-ink-3">Works on statistical modelling, geospatial analysis and remote sensing, with publications at NeurIPS, AAAI, ICONIP and IGARSS covering air pollution mapping, flood impact and waste classification. Focused on turning measurement into decisions that hold up in policy.</p></article></div></div></section></div></main><footer class="themed mt-12 border-t border-line bg-card"><div class="mx-auto grid max-w-[1400px] gap-10 px-4 py-12 sm:px-6 md:grid-cols-3 lg:px-8"><div><div class="flex items-center gap-3"><img alt="" loading="lazy" width="44" height="44" decoding="async" data-nimg="1" class="rounded-lg" style="color:transparent" srcSet="/_next/image?url=%2Flogo-aqi.png&w=48&q=75 1x, /_next/image?url=%2Flogo-aqi.png&w=96&q=75 2x" src="/_next/image?url=%2Flogo-aqi.png&w=96&q=75"/><div><p class="text-sm font-semibold text-ink">BNU AQI Initiative</p><p class="text-xs text-ink-3">Beaconhouse National University</p></div></div><p class="mt-4 max-w-sm text-xs leading-relaxed text-ink-3">Monitoring indoor air quality across campus and testing natural purifiers, so decisions about the spaces people study and work in are made on measurement rather than assumption.</p></div><nav aria-label="Quick links"><h3 class="text-xs font-semibold uppercase tracking-wide text-ink-3">Quick links</h3><ul class="mt-4 space-y-2.5 text-sm text-ink-2"><li><a href="/underconstruction" class="transition-colors hover:text-accent-ink">About us</a></li><li><a href="/underconstruction" class="transition-colors hover:text-accent-ink">Our methodology</a></li><li><a href="/underconstruction" class="transition-colors hover:text-accent-ink">Services</a></li><li><a href="/underconstruction" class="transition-colors hover:text-accent-ink">Privacy policy</a></li></ul></nav><div><h3 class="text-xs font-semibold uppercase tracking-wide text-ink-3">Contact</h3><ul class="mt-4 space-y-3 text-sm text-ink-2"><li class="flex gap-2.5"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-map-pin mt-0.5 shrink-0 text-ink-3"><path d="M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z"></path><circle cx="12" cy="10" r="3"></circle></svg><span>Beaconhouse National University,<br/>13-KM Off Raiwind Road, Lahore, Pakistan</span></li><li class="flex items-center gap-2.5"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-globe shrink-0 text-ink-3"><circle cx="12" cy="12" r="10"></circle><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path><path d="M2 12h20"></path></svg><a href="https://www.bnu.edu.pk" target="_blank" rel="noopener noreferrer" class="transition-colors hover:text-accent-ink">bnu.edu.pk</a></li><li class="flex items-center gap-2.5"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewB
1ox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-mail shrink-0 text-ink-3"><rect width="20" height="16" x="2" y="4" rx="2"></rect><path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"></path></svg><a href="mailto:[email protected]" class="transition-colors hover:text-accent-ink">[email protected]</a></li><li class="flex items-center gap-2.5"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-phone shrink-0 text-ink-3"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path></svg><span>+92-33-60617000</span></li></ul></div></div><div class="border-t border-line px-4 py-5 sm:px-6 lg:px-8"><div class="mx-auto flex max-w-[1400px] flex-col gap-1 text-xs text-ink-3 sm:flex-row sm:items-center sm:justify-between"><span>© <!-- -->2026<!-- --> BNU AQI Dashboard. All rights reserved.</span></div></div></footer></div><!--$--><!--/$-->
1<script src="/_next/static/chunks/webpack-1d666f331214eee0.js" async=""></script>
1<script>(self.__next_f=self.__next_f||[]).push([0])</script>
1<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[87555,[],\"\"]\n3:I[31295,[],\"\"]\n4:I[90894,[],\"ClientPageRoot\"]\n5:I[22077,[\"648\",\"static/chunks/648-9b246fe09630e975.js\",\"974\",\"static/chunks/app/page-225dc42a0c5de966.js\"],\"default\"]\n8:I[59665,[],\"OutletBoundary\"]\nb:I[74911,[],\"AsyncMetadataOutlet\"]\nd:I[59665,[],\"ViewportBoundary\"]\nf:I[59665,[],\"MetadataBoundary\"]\n11:I[26614,[],\"\"]\n:HL[\"/_next/static/media/22a5144ee8d83bca-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/7d4881bb7e1bf84d-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/32ced6f1633ce9ae.css\",\"style\"]\n"])</script>
1<script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"TUhh7P6OQylzkdWLlG_MF\",\"p\":\"\",\"c\":[\"\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/32ced6f1633ce9ae.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"data-theme\":\"light\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){try{var t=localStorage.getItem('bnu-aqi-theme');document.documentElement.dataset.theme=t==='dark'?'dark':'light';}catch(e){document.documentElement.dataset.theme='light';}})();\"}}]}],[\"$\",\"body\",null,{\"className\":\"__variable_246ccd __variable_c29908 font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L4\",null,{\"Component\":\"$5\",\"searchParams\":{},\"params\":{},\"promises\":[\"$@6\",\"$@7\"]}],null,[\"$\",\"$L8\",null,{\"children\":[\"$L9\",\"$La\",[\"$\",\"$Lb\",null,{\"promise\":\"$@c\"}]]}]]}],{},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$1\",\"rj87KyBI6ECAGRX9pl_blv\",{\"children\":[[\"$\",\"$Ld\",null,{\"children\":\"$Le\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],[\"$\",\"$Lf\",null,{\"children\":\"$L10\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$11\",\"$undefined\"],\"s\":false,\"S\":true}\n"])</script>
1<script>self.__next_f.push([1,"12:\"$Sreact.suspense\"\n13:I[74911,[],\"AsyncMetadata\"]\n6:{}\n7:{}\n10:[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$12\",null,{\"fallback\":null,\"children\":[\"$\",\"$L13\",null,{\"promise\":\"$@14\"}]}]}]\n"])</script>
1<script>self.__next_f.push([1,"a:null\n"])</script>
1<script>self.__next_f.push([1,"e:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n9:null\n"])</script>
1<script>self.__next_f.push([1,"c:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"BNU AQI Dashboard\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Indoor air quality monitoring across Beaconhouse National University schools - pollutant trends, ventilation and the effect of indoor plants.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/logo-aqi.png\"}],[\"$\",\"link\",\"3\",{\"rel\":\"apple-touch-icon\",\"href\":\"/logo-aqi.png\"}]],\"error\":null,\"digest\":\"$undefined\"}\n14:{\"metadata\":\"$c:metadata\",\"error\":null,\"digest\":\"$undefined\"}\n"])</script>
1</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.