Skip to content
In development · Content subject to change without notice
Moreton Bay · Quandamooka Country
Shoreline
Dashboard
Community and Steward data · Updated in real time
📍 Report what you see
🌊 Shoreline Watch
📋 Steward Records


Loading…
Observations
Sites covered
Issues flagged
Recent observations
Pressure points this season
Most monitored sites
2024–25 Season
Field visits across Moreton Bay
Monthly field activity
Visits by site
SiteVisitsLast visit
🔒
Full assessment records — species counts, individual assessors, and disturbance data — are available to enrolled Stewards. Steward login →
Conversations With Birds const GATE_KEY = 'fsb_auth'; const isLoggedIn = localStorage.getItem(GATE_KEY) === '1' || sessionStorage.getItem(GATE_KEY) === '1'; const authBtn = document.getElementById('nav-auth-btn'); const pubNav = document.querySelector('.nav-public-links'); const stewNav = document.querySelector('.nav-steward-links'); const tier2 = document.getElementById('fsb-t2'); if (isLoggedIn) { if (pubNav) pubNav.style.display = 'none'; var regBtn = document.querySelector('.nav-register-btn'); if(regBtn) regBtn.style.display='none'; if (stewNav) stewNav.style.display = ''; if (tier2) tier2.style.display = ''; if (authBtn) { authBtn.textContent = 'Logout'; authBtn.href = '#'; authBtn.addEventListener('click', function(e) { e.preventDefault(); sessionStorage.removeItem(GATE_KEY); localStorage.removeItem(GATE_KEY); localStorage.removeItem('fsb_auth'); window.location.href = '/'; }); } } else { if (tier2) tier2.style.display = 'none'; } // Fix: add ?from=currentPath to Steward Login button so login returns here if (authBtn && !isLoggedIn) { var _fromPath = window.location.pathname; if (_fromPath && _fromPath !== '/' && !_fromPath.includes('password')) { authBtn.href = '/password?from=' + encodeURIComponent(_fromPath); } } // Active link var curPath = window.location.pathname.replace(/\/+$/, '') || '/'; document.querySelectorAll('.nav-links a').forEach(function(a) { var aPath = a.getAttribute('href') || ''; if (aPath && (curPath === aPath || (aPath !== '/' && curPath.startsWith(aPath)))) { a.classList.add('active'); } }); (function(){ var btn=document.getElementById('nav-hamburger'); if(!btn) return; var overlay=document.createElement('div'); overlay.className='nav-overlay'; document.body.appendChild(overlay); function getActiveNav(){ var all=document.querySelectorAll('.nav-links'); for(var i=0;i