Skip to content
In development · Content subject to change without notice
In development
For Shorebirds
Shorebird Steward Program
Home
Program
Who's Who
The Great Gamble
Site Network
Field Records
Shoreline Watch
Dashboard
About
Home
News
Records
Course
Materials
Tools ▾
AI Tutor
Roost Tool
Shoreline Tool
The Great Gamble
Background Reading
Register Interest
Steward Login
Shoreline Watch · Live Data
Moreton Bay
Shoreline Monitor
Community observations · Updated in real time
📍 Submit an Observation
—
Observations
—
Sites monitored
—
Issues flagged
⟳
Loading observations…
Recent Observations
Issues This Season
Most Monitored Sites
Recent Photos
Dashboard preview
— showing sample data. Connect a Google Sheet to see live community observations.
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