A private boutique agency serving the most exclusive bayside communities of Victoria. Personal, unhurried, and profoundly experienced — we negotiate the properties others can't.
We built Brighton Bay RE on a single belief: exceptional properties deserve exceptional care. Our mature, experienced agents give every client all the time they need — no pressure, no shortcuts, just profound local knowledge and unwavering commitment.
Private Sales
We specialise exclusively in private treaty and off-market transactions, protecting both buyer and seller from the noise of the public market.
Local Mastery
Two decades living and working across Bayside gives us insight no database can replicate. We know every street, every neighbour, every nuance.
Skilled Negotiation
Our results come from expertise at the negotiating table — patient, strategic, and always in our clients' best interests.
Personal Service
No handoffs, no junior agents. The same experienced principal handles your property from first conversation to settlement.
What We Offer
A full suite of private services.
01
Private Sales & Negotiations
Our core speciality. We manage discreet sales from initial pricing counsel through to settlement, always protecting confidentiality and maximising outcome.
02
Buyers Advocacy
Representing your interests exclusively — we source, assess and negotiate on your behalf, leveraging deep market relationships to access properties before they reach the public.
03
Short-Term Accommodation
Flexible short-term accommodation solutions for renovations, insurance claims, settlement delays, family visits and more — premium furnished properties arranged with complete discretion and care.
We concentrate on a defined geography of excellence — the bayside councils of Port Phillip, Bayside, Glen Eira and Kingston. Depth of focus delivers depth of result.
Brighton
Port Phillip / Bayside
Our home ground. Iconic bay frontages, grand period residences and Melbourne's most prestigious school belt.
Sandringham
Bayside Council
A village feel with blue-ribbon coastal lifestyle. Increasingly sought after for luxury new builds and refined renovations.
Elwood & St Kilda
Port Phillip Council
Eclectic, cosmopolitan and deeply desirable. Art deco buildings and beachside culture at their finest.
Caulfield & Elsternwick
Glen Eira Council
Established family suburbs with exceptional school zones, thriving retail strips and strong investment fundamentals.
Beaumaris
Bayside Council
A quiet coastal gem with a loyal community. Midcentury architecture and rare land sizes make this a standout market.
Moorabbin & Cheltenham
Kingston Council
Strong owner-occupier demand, improving stock quality and excellent transport links drive sustained value.
Hampton & Highett
Bayside / Kingston
Family-favourite suburbs with beach access, village shopping strips and consistent capital growth year on year.
Bentleigh & McKinnon
Glen Eira Council
Perennial demand driven by school zone prestige and village lifestyle. Some of Melbourne's most tightly held streets.
Our Service Areas
Bayside · Port Phillip · Glen Eira · Kingston
Brighton
Sandringham
Beaumaris
Hampton
Elwood
St Kilda
Caulfield
Elsternwick
Bentleigh
McKinnon
Moorabbin
Cheltenham
Client Voices
What our clients say of us.
"
★★★★★
We had tried two other agents with no result. Brighton Bay RE quietly found us a buyer within three weeks — all handled with complete discretion and at a price that exceeded our expectations significantly.
RH
Robert & Margaret H.
Brighton — Private Sale, $5.4M
"
★★★★★
The experience was entirely unlike dealing with a large agency. We were never rushed, never pressured — just thoughtful advice and outstanding negotiation. We secured our Elwood home off-market before it was ever listed.
SA
Sophie A.
Elwood — Buyers Advocacy
"
★★★★★
Twenty years of managing my Brighton Bay apartment and never a moment of stress. The team treat my property as if it were their own. I would not consider anyone else for management or an eventual sale.
JL
James L.
Brighton Bay Apartments — 20yr Client
"
★★★★★
Deeply knowledgeable, refreshingly honest and always available. In a sea of agents chasing the next commission, Brighton Bay RE felt like a trusted advisor whose only interest was our best outcome.
TW
Thomas & Karen W.
Sandringham — Sale & Purchase
Our Sister Business
Brighton Bay Apartments.
For over twenty years, Brighton Bay Apartments has been synonymous with quality residential property management across the bayside. A trusted name, a personal service — and the foundation on which Brighton Bay RE was built.
20+ years of uninterrupted residential management
Premium long-term tenancy placement across Bayside
Personal property manager — never a call centre
Seamless transition from management to private sale
Why Bayside's premium tier is defying the broader market correction
Despite headwinds affecting the broader Melbourne market, properties above $3M in Brighton, Sandringham and Beaumaris have shown remarkable resilience. Supply constraints, lifestyle migration from the inner city and a return of expatriate buyers are driving demand that significantly outpaces available stock.
March 2025 · 6 min read
Suburb Focus
The quiet rise of Bentleigh & McKinnon
February 2025 · 4 min read
Selling Guide
Five reasons a private sale may suit your property
January 2025 · 5 min read
Begin a Conversation
Private consultation.
We do not rush and we do not pressure. Contact us for a confidential, obligation-free discussion about your property — whether you are considering selling, buying, or simply want an honest assessment of your options.
Monday — Saturday, 9am — 6pm After hours by arrangement
Enquiry received.
Thank you for reaching out. A member of our team will be in touch within one business day. All enquiries are handled with complete confidentiality.
Email preview — [email protected]Placeholder · connect live email service to activate
1 / 1
▶
No video available for this property
Bedrooms
Bathrooms
Car Spaces
Land m²
Property Features
Your Agent
G
Geoffrey Hartley
Principal & Licensed Agent
Lic. No. 078XXXX
Enquire About This Property
function loadGFont(fam){
if(!fam)return;
var id='gf-'+fam.replace(/\s/g,'-');
if(document.getElementById(id))return;
var l=document.createElement('link');l.id=id;l.rel='stylesheet';
l.href='https://fonts.googleapis.com/css2?family='+encodeURIComponent(fam)+':ital,wght@0,300;0,400;0,500;0,600;1,300;1,400&display=swap';
document.head.appendChild(l);
}
/* ═══════════════════════════════════════════════════════
LOCAL STORAGE — persists all admin changes across reloads
Keys: bbr_props, bbr_enquiries, bbr_testis, bbr_articles,
bbr_tabvis, bbr_siteconfig, bbr_hero, bbr_design
═══════════════════════════════════════════════════════ */
var LS = {
save: function(key, val){ try{ localStorage.setItem('bbr_'+key, JSON.stringify(val)); }catch(e){} },
load: function(key){ try{ var v=localStorage.getItem('bbr_'+key); return v?JSON.parse(v):null; }catch(e){ return null; } },
clear: function(key){ try{ localStorage.removeItem('bbr_'+key); }catch(e){} }
};
/* ═══════════════════════════════════════════════════════
SUPABASE + FORMSPREE CONFIG
═══════════════════════════════════════════════════════ */
var SUPABASE_URL = 'https://fgugmemuvliwvyjxxuri.supabase.co';
var SUPABASE_KEY = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImZndWdtZW11dmxpd3Z5anh4dXJpIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzU1OTA2MTUsImV4cCI6MjA5MTE2NjYxNX0.kA7zruuNjqiDSs-za63D0BCtWId_eTbS_4SYqmwas5k';
var FORMSPREE_URL = 'https://formspree.io/f/mreodplr';
var sb = null;
try {
// Support both anon JWT key (eyJ...) and newer publishable key (sb_publishable_...)
/* Public site - anon read only, no auth session needed */
sb = supabase.createClient(SUPABASE_URL, SUPABASE_KEY, {
auth: {
persistSession: false,
autoRefreshToken: false,
detectSessionInUrl: false
},
global: {
headers: {
'apikey': SUPABASE_KEY,
'Authorization': 'Bearer ' + SUPABASE_KEY
}
}
});
console.log('Supabase client initialised');
} catch(e) {
console.warn('Supabase init failed, using localStorage only:', e);
}
/* Helper — save a full prop object to Supabase */
var DEFAULT_PROPS=[
{id:1,status:'sale',title:'A Grand Victorian Residence',suburb:'Brighton',council:'Port Phillip',price:'$6,800,000 \u2014 $7,200,000',beds:5,baths:4,cars:3,land:'820',photos:['https://images.unsplash.com/photo-1600596542815-ffad4c1539a9?w=800&q=80','https://images.unsplash.com/photo-1600566753086-00f18fb6b3ea?w=600&q=80','https://images.unsplash.com/photo-1600210492493-0946911123ea?w=600&q=80'],img:'https://images.unsplash.com/photo-1600596542815-ffad4c1539a9?w=800&q=80',desc:'A supremely grand Victorian residence commanding one of Brighton\'s most coveted positions. Five luxurious bedrooms, four marble-appointed bathrooms and an entertainer\'s garden of rare scale.',features:['Grand north-facing garden','Marble kitchen & scullery','Ducted heating & cooling','Home theatre','Heated pool','Double garage','Wine cellar','Library'],video:''},
{id:2,status:'sale',title:'Coastal Contemporary',suburb:'Sandringham',council:'Bayside',price:'$4,200,000',beds:4,baths:3,cars:2,land:'650',photos:['https://images.unsplash.com/photo-1512917774080-9991f1c4c750?w=800&q=80','https://images.unsplash.com/photo-1600585154526-990dced4db0d?w=600&q=80','https://images.unsplash.com/photo-1600607687920-4e2a09cf159d?w=600&q=80'],img:'https://images.unsplash.com/photo-1512917774080-9991f1c4c750?w=800&q=80',desc:'A sleek architecturally designed coastal home moments from the Sandringham beachfront. Four generous bedrooms, three bathrooms and a seamless indoor-outdoor lifestyle.',features:['Polished concrete floors','Architect designed','650m\u00b2 prime block','Alfresco entertaining','Blackbutt timber joinery','Double garage','Walk to beach','Solar panels'],video:''},
{id:3,status:'sale',title:'Art Deco Masterpiece',suburb:'Elwood',council:'Port Phillip',price:'$3,100,000 \u2014 $3,400,000',beds:3,baths:2,cars:1,land:'420',photos:['https://images.unsplash.com/photo-1568605114967-8130f3a36994?w=800&q=80','https://images.unsplash.com/photo-1583608205776-bfd35f0d9f83?w=600&q=80','https://images.unsplash.com/photo-1598228723793-52759bba239c?w=600&q=80'],img:'https://images.unsplash.com/photo-1568605114967-8130f3a36994?w=800&q=80',desc:'A superbly preserved Art Deco home in the heart of Elwood. Original leadlight windows, ornate cornices and terrazzo details combine with a thoroughly modern kitchen.',features:['Original leadlight windows','Art Deco cornices','Terrazzo entry','Updated kitchen','Rear courtyard','Off-street parking','Walk to beach','Heritage overlay'],video:''},
{id:4,status:'rental',title:'Penthouse with Bay Views',suburb:'Brighton',council:'Port Phillip',price:'$1,800 per week',beds:3,baths:2,cars:2,land:'\u2014',photos:['https://images.unsplash.com/photo-1545324418-cc1a3fa10c00?w=800&q=80','https://images.unsplash.com/photo-1502672260266-1c1ef2d93688?w=600&q=80','https://images.unsplash.com/photo-1616137422495-1e9e46e2aa77?w=600&q=80'],img:'https://images.unsplash.com/photo-1545324418-cc1a3fa10c00?w=800&q=80',desc:'An exceptional top-floor apartment with sweeping Bayside views, three bedrooms, two bathrooms and two secure car spaces.',features:['Panoramic bay views','Fully furnished','Secure building','Two car spaces','Ducted reverse cycle','Rooftop terrace','Concierge','Available now'],video:''},
{id:5,status:'rental',title:'Classic Period Terrace',suburb:'St Kilda East',council:'Port Phillip',price:'$1,100 per week',beds:3,baths:2,cars:1,land:'285',photos:['https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=800&q=80','https://images.unsplash.com/photo-1484154218962-a197022b5858?w=600&q=80','https://images.unsplash.com/photo-1556909114-f6e7ad7d3136?w=600&q=80'],img:'https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=800&q=80',desc:'A beautifully maintained Victorian terrace with three bedrooms, two bathrooms and a private rear courtyard. Moments from the St Kilda East village.',features:['Victorian features','Updated kitchen','Private courtyard','Secure parking','Air conditioning','Timber floors','Walk to tram','Long term'],video:''},
{id:6,status:'sold',title:'Beachside Family Home',suburb:'Beaumaris',council:'Bayside',price:'Sold $5,100,000',beds:5,baths:3,cars:2,land:'740',photos:['https://images.unsplash.com/photo-1600047509807-ba8f99d2cdde?w=800&q=80','https://images.unsplash.com/photo-1600585154340-be6161a56a0c?w=600&q=80','https://images.unsplash.com/photo-1600566753190-17f0baa2a6c3?w=600&q=80'],img:'https://images.unsplash.com/photo-1600047509807-ba8f99d2cdde?w=800&q=80',desc:'A landmark Beaumaris family home sold by private negotiation. Introduced to a single qualified buyer from our private register, achieving a result above expectations.',features:['Private sale','Sold in 18 days','Off-market','Single buyer','Result above reserve','Complete discretion','Vacant possession','5 bed 3 bath'],video:''},
{id:7,status:'sold',title:'Mid-Century Entertainer',suburb:'Hampton',council:'Bayside',price:'Sold $3,750,000',beds:4,baths:2,cars:2,land:'620',photos:['https://images.unsplash.com/photo-1570129477492-45c003edd2be?w=800&q=80','https://images.unsplash.com/photo-1580587771525-78b9dba3b914?w=600&q=80','https://images.unsplash.com/photo-1576941089067-2de3c901e126?w=600&q=80'],img:'https://images.unsplash.com/photo-1570129477492-45c003edd2be?w=800&q=80',desc:'A superb mid-century home sold privately following a discreet three-week campaign.',features:['Private negotiation','Sold in 21 days','620m\u00b2 block','Period character','Heated pool','Double garage','3-week campaign','Above range'],video:''},
{id:8,status:'sold',title:'Blue-Chip Caulfield Estate',suburb:'Caulfield North',council:'Glen Eira',price:'Sold $6,250,000',beds:6,baths:4,cars:3,land:'900',photos:['https://images.unsplash.com/photo-1613490493576-7fde63acd811?w=800&q=80','https://images.unsplash.com/photo-1600563438938-a9a27216b4f5?w=600&q=80','https://images.unsplash.com/photo-1592595896616-c37162298647?w=600&q=80'],img:'https://images.unsplash.com/photo-1613490493576-7fde63acd811?w=800&q=80',desc:'One of Caulfield North\'s finest estates sold through a carefully managed private process achieving a suburb record.',features:['Suburb record','Private process','Pre-qualified buyers','900m\u00b2 allotment','6 bed + study','Pool & spa','Triple garage','School zone #1'],video:''}
];
var props=LS.load('props')||DEFAULT_PROPS;
var enquiries=LS.load('enquiries')||[];
var DEFAULT_TESTIS=[
{id:1,name:'Robert & Margaret H.',loc:'Brighton \u2014 Private Sale, $5.4M',text:'We had tried two other agents with no result. Brighton Bay RE quietly found us a buyer within three weeks \u2014 all handled with complete discretion and at a price that exceeded our expectations significantly.',vis:true},
{id:2,name:'Sophie A.',loc:'Elwood \u2014 Buyers Advocacy',text:'The experience was entirely unlike dealing with a large agency. We were never rushed, never pressured \u2014 just thoughtful advice and outstanding negotiation. We secured our Elwood home off-market before it was ever listed.',vis:true},
{id:3,name:'James L.',loc:'Brighton Bay Apartments \u2014 20yr Client',text:'Twenty years of managing my Brighton Bay apartment and never a moment of stress. The team treat my property as if it were their own. I would not consider anyone else for management or an eventual sale.',vis:true},
{id:4,name:'Thomas & Karen W.',loc:'Sandringham \u2014 Sale & Purchase',text:'Deeply knowledgeable, refreshingly honest and always available. In a sea of agents chasing the next commission, Brighton Bay RE felt like a trusted advisor whose only interest was our best outcome.',vis:true}
];
var testisData=LS.load('testis')||DEFAULT_TESTIS;
var DEFAULT_ARTICLES=[
{id:1,big:true,img:'https://images.unsplash.com/photo-1560518883-ce09059eeffa?w=900&q=80',tag:'Market Report',title:'Why Bayside\'s premium tier is defying the broader market correction',excerpt:'Despite headwinds affecting the broader Melbourne market, properties above $3M in Brighton, Sandringham and Beaumaris have shown remarkable resilience. Supply constraints and lifestyle migration are driving demand that outpaces available stock.',meta:'March 2025 \u00b7 6 min read',vis:true},
{id:2,big:false,img:'https://images.unsplash.com/photo-1582407947304-fd86f028f716?w=600&q=80',tag:'Suburb Focus',title:'The quiet rise of Bentleigh & McKinnon',excerpt:'',meta:'February 2025 \u00b7 4 min read',vis:true},
{id:3,big:false,img:'https://images.unsplash.com/photo-1600585154340-be6161a56a0c?w=600&q=80',tag:'Selling Guide',title:'Five reasons a private sale may suit your property',excerpt:'',meta:'January 2025 \u00b7 5 min read',vis:true}
];
var articlesData=LS.load('articles')||DEFAULT_ARTICLES;
var tabVis=LS.load('tabvis')||{sale:true,rental:true,sold:true};
var currentGalIdx=0;
var currentGalPhotos=[];
/* ── GALLERY ── */
function galNav(dir){
if(!currentGalPhotos.length)return;
currentGalIdx=(currentGalIdx+dir+currentGalPhotos.length)%currentGalPhotos.length;
galShow(currentGalIdx);
}
function galShow(idx){
currentGalIdx=idx;
var img=document.getElementById('mgal-main-img');
img.style.opacity='0';
setTimeout(function(){img.src=currentGalPhotos[idx];img.style.opacity='1';},150);
document.getElementById('mgal-count').textContent=(idx+1)+' / '+currentGalPhotos.length;
document.querySelectorAll('.mgal-thumb').forEach(function(t,i){t.classList.toggle('active',i===idx);});
var thumbs=document.getElementById('mgal-thumbs');
var active=thumbs.querySelectorAll('.mgal-thumb')[idx];
if(active)active.scrollIntoView({behavior:'smooth',block:'nearest',inline:'center'});
}
function buildGallery(p){
var photos=p.photos&&p.photos.length?p.photos.filter(Boolean):[p.img,p.img2,p.img3].filter(Boolean);
if(!photos.length&&p.img)photos=[p.img];
currentGalPhotos=photos;currentGalIdx=0;
var main=document.getElementById('mgal-main-img');
if(main){main.src=photos[0]||'';main.style.opacity='1';}
var cnt=document.getElementById('mgal-count');
if(cnt)cnt.textContent='1 / '+photos.length;
var prev=document.getElementById('mgal-prev');
var next=document.getElementById('mgal-next');
if(prev)prev.style.display=photos.length<=1?'none':'flex';
if(next)next.style.display=photos.length<=1?'none':'flex';
var thumbs=document.getElementById('mgal-thumbs');
if(thumbs){
thumbs.innerHTML=photos.map(function(url,i){
return '';
}).join('');
thumbs.style.display=photos.length>1?'flex':'none';
}
}
/* ── LISTINGS ── */
function renderProps(filter){
var g=document.getElementById('pg');
var list=filter==='all'?props:props.filter(function(p){return p.status===filter;});
g.innerHTML=list.map(function(p){
var bc=p.status==='sale'?'bs':p.status==='rental'?'br':'bd';
var bl=p.status==='sale'?'For Sale':p.status==='rental'?'For Rent':'Sold';
return '
';
}).join('');
fuObserve();
}
function filterProps(type,btn){
if(btn){document.querySelectorAll('.tab').forEach(function(t){t.classList.remove('active');});if(btn.classList)btn.classList.add('active');}
renderProps(type);
}
/* ── MODAL ── */
function mGalTab(tab,btn){
document.querySelectorAll('.mgal-tab').forEach(function(t){t.classList.remove('active');});
btn.classList.add('active');
document.getElementById('mgal-photos').style.display=tab==='photos'?'block':'none';
document.getElementById('mgal-video').style.display=tab==='video'?'block':'none';
}
function buildVideoEmbed(url){
if(!url||typeof url!=='string'||url.trim()==='')return null;
try{
var yt=url.match(/(?:youtube\.com\/watch\?v=|youtu\.be\/)([a-zA-Z0-9_-]{11})/);
if(yt&&yt[1])return '';
var vi=url.match(/vimeo\.com\/(\d+)/);
if(vi&&vi[1])return '';
if(url.match(/\.mp4(\?|$)/i))return '';
}catch(e){}
return null;
}
function openModal(id){
try{
var p=props.find(function(x){return x.id===id;});if(!p){console.warn('openModal: prop id '+id+' not found');return;}
document.getElementById('msub').textContent=p.suburb+' \u00b7 '+p.council;
document.getElementById('mtit').textContent=p.title;
document.getElementById('mpr').textContent=p.price;
document.getElementById('ms1').textContent=p.beds;
document.getElementById('ms2').textContent=p.baths;
document.getElementById('ms3').textContent=p.cars;
document.getElementById('ms4').textContent=p.land;
document.getElementById('mdesc').textContent=p.desc;
buildGallery(p);
var b=document.getElementById('mbadge');
b.textContent=p.status==='sale'?'For Sale':p.status==='rental'?'For Rent':'Sold';
b.className='mstat-b '+(p.status==='sale'?'bs':p.status==='rental'?'br':'bd');
document.getElementById('mfg').innerHTML=(p.features||[]).map(function(f){return '
'+f+'
';}).join('');
document.getElementById('mok').style.display='none';
['me1','me2','me3','me4'].forEach(function(i){document.getElementById(i).value='';});
document.querySelectorAll('.mgal-tab').forEach(function(t){t.classList.remove('active');});
document.querySelector('.mgal-tab').classList.add('active');
document.getElementById('mgal-photos').style.display='block';
document.getElementById('mgal-video').style.display='none';
var vidBtn=document.getElementById('vid-tab-btn');
var vidWrap=document.getElementById('vid-wrap');
vidWrap.innerHTML='';
if(p.video){
var embed=buildVideoEmbed(p.video);
vidBtn.style.display='block';
if(embed){vidWrap.innerHTML=embed;document.getElementById('vid-empty').style.display='none';}
else{document.getElementById('vid-empty').style.display='flex';}
} else {
vidBtn.style.display='none';
}
var ov=document.getElementById('modal-ov');
ov.classList.add('open');ov.scrollTop=0;document.body.style.overflow='hidden';
}catch(err){console.error('openModal error:',err);}
}
function closeModal(){document.getElementById('modal-ov').classList.remove('open');document.body.style.overflow='';}
function closeModalOut(e){if(e.target===document.getElementById('modal-ov'))closeModal();}
function submitModalEnq(){
var n=document.getElementById('me1').value,em=document.getElementById('me2').value;
if(!n||!em){alert('Please enter your name and email.');return;}
var menq={name:n,email:em,phone:document.getElementById('me3').value,type:'Property Enquiry',msg:document.getElementById('me4').value,date:new Date().toLocaleDateString('en-AU'),ref:'BBR-'+Date.now().toString().slice(-6)};
enquiries.push(menq);
LS.save('enquiries',enquiries);
sbSaveEnquiry(menq);
/* Also send to Formspree from modal */
fetch(FORMSPREE_URL,{method:'POST',headers:{'Content-Type':'application/json','Accept':'application/json'},body:JSON.stringify({name:menq.name,email:menq.email,phone:menq.phone,enquiry_type:menq.type,message:menq.msg,reference:menq.ref,_subject:'Property Enquiry — Brighton Bay RE · '+menq.ref})}).catch(function(){});
document.getElementById('mok').style.display='block';renderEnq();
}
/* ── ADMIN ── */
/* ═══════════════════════════════════════════════════════
MULTI-USER ADMIN — roles: super | manager | agent | viewer
═══════════════════════════════════════════════════════ */
function closePwModal(){
document.getElementById('pw-modal').style.display='none';
document.getElementById('pw-input').value='';
document.getElementById('pw-err').style.display='none';
document.body.style.overflow='';
}
function quickEdit(id){
closeAdmin();
document.getElementById('adm-ov').classList.add('open');
document.body.style.overflow='hidden';
var editBtn=document.querySelector('.atb[onclick*="edit"]');
if(editBtn)aTab('edit',editBtn);
setTimeout(function(){
var sel=document.getElementById('edit-sel');
sel.value=id;loadEdit();
},50);
}
function buildEditPhotoRows(urls){
var list=document.getElementById('edit-photos-list');if(!list)return;
list.innerHTML='';
(urls&&urls.length?urls:['']).forEach(function(url){addEditPhotoRow(url);});
}
function addEditPhotoRow(url){
var list=document.getElementById('edit-photos-list');if(!list)return;
if(list.children.length>=10)return;
var row=document.createElement('div');row.style.cssText='display:flex;gap:8px;align-items:center';
var img=document.createElement('img');img.style.cssText='width:56px;height:38px;object-fit:cover;border:.5px solid rgba(184,150,90,.3);flex-shrink:0;background:#111';
var inp=document.createElement('input');inp.className='edit-photo-input';
inp.style.cssText='flex:1;background:var(--navy);border:.5px solid rgba(184,150,90,.2);padding:10px 12px;font-family:Jost,sans-serif;font-size:12px;color:#fff;outline:none';
inp.placeholder='https://images.unsplash.com/photo-...?w=800&q=80';
inp.value=url||'';
if(url)img.src=url;
inp.addEventListener('input',function(){if(this.value.trim())img.src=this.value.trim();});
var del=document.createElement('button');del.className='smb del';del.textContent='\u00d7';del.style.padding='8px 12px';
del.onclick=function(){row.remove();};
row.appendChild(img);row.appendChild(inp);row.appendChild(del);
list.appendChild(row);
}
function rebuildTestis(){
var tg=document.getElementById('testi-section');if(!tg)return;
var visible=testisData.filter(function(t){return t.vis;});
if(!visible.length)return;
tg.innerHTML=visible.map(function(t){
var init=t.name.split(' ').filter(function(w){return w.length>1;}).map(function(w){return w[0];}).slice(0,2).join('');
return '
“
★★★★★
'+t.text+'
'+init+'
'+t.name+'
'+t.loc+'
';
}).join('');
fuObserve();
}
function rebuildInsights(){
var ig=document.getElementById('insights-grid');if(!ig)return;
var visible=articlesData.filter(function(a){return a.vis;});
if(!visible.length)return;
ig.innerHTML=visible.map(function(a){
return '
'+a.tag+'
'+a.title+'
'+(a.big&&a.excerpt?'
'+a.excerpt+'
':'')+'
'+a.meta+'
';
}).join('');
fuObserve();
}
function rebuildTabBar(){
var bar=document.getElementById('tab-bar');bar.innerHTML='';
[{k:'sale',l:'For Sale'},{k:'rental',l:'Rentals'},{k:'sold',l:'Sold'}].forEach(function(d){
if(!tabVis[d.k])return;
var btn=document.createElement('button');btn.className='tab';btn.textContent=d.l;var k=d.k;btn.onclick=function(){filterProps(k,btn);};bar.appendChild(btn);
});
var first=bar.querySelector('.tab');
if(first){first.classList.add('active');filterProps(first.textContent==='For Sale'?'sale':first.textContent==='Rentals'?'rental':'sold',first);}
else{document.getElementById('pg').innerHTML='
No listing tabs visible.
';}
}
/* ── Supabase enquiry save (used by contact form) ── */
function sbSaveEnquiry(e){
if(!sb)return;
sb.from('enquiries').insert({
name:e.name, email:e.email, phone:e.phone||'',
enquiry_type:e.type, message:e.msg||'',
reference:e.ref||''
}).then(function(r){if(r.error)console.warn('Enquiry save error:',r.error);});
}
/* ── renderEnq is admin-only — stub for public site ── */
function renderEnq(){}
function submitEnquiry(ev){
ev.preventDefault();
var first=document.getElementById('cf1').value.trim();
var last=document.getElementById('cf2').value.trim();
var email=document.getElementById('cf3').value.trim();
var phone=document.getElementById('cf4').value.trim();
var type=document.getElementById('cf5').value;
var msg=document.getElementById('cf6').value.trim();
if(!first||!email){alert('Please enter your name and email.');return;}
var btn=document.getElementById('cfbtn');
btn.textContent='Sending…';btn.disabled=true;
var ref='BBR-'+Date.now().toString().slice(-6);
/* Safety timeout - re-enable button after 15s if no response */
var timeout=setTimeout(function(){
btn.textContent='Send Private Enquiry →';btn.disabled=false;
alert('The request timed out. Please check your connection and try again.');
},15000);
function onSuccess(){
clearTimeout(timeout);
var enq={name:first+' '+last,email:email,phone:phone,type:type,msg:msg,date:new Date().toLocaleDateString('en-AU'),ref:ref};
enquiries.push(enq);
LS.save('enquiries',enquiries);
sbSaveEnquiry(enq);
document.getElementById('cform').style.display='none';
var fok=document.getElementById('fok');fok.classList.add('show');
document.getElementById('fref').textContent='Reference: '+ref;
var ep=document.getElementById('eprev');ep.classList.add('show');
document.getElementById('epb').innerHTML=
'