// Custom Wall Mural — product configurator // WC product ID: 10198 | Material: vinyl only | Qty: 1 | Custom size only const MURAL_WC_ID = 10198; const MURAL_SCHEMA = { '@context':'https://schema.org','@type':'Product', name:'Custom Wall Mural', description:'Custom printed vinyl wall murals. Wipe-clean, repositionable, printed to your exact dimensions. Printed in Sydney, Australia.', image:'https://kingkongstickers.com.au/assets/bedroom-mural.jpeg', brand:{'@type':'Brand',name:'King Kong Stickers'}, offers:{'@type':'AggregateOffer',priceCurrency:'AUD',lowPrice:'149',availability:'https://schema.org/InStock',seller:{'@type':'Organization',name:'King Kong Stickers'}}, additionalProperty:[ {'@type':'PropertyValue',name:'Material',value:'Wipe-clean vinyl wallpaper'}, {'@type':'PropertyValue',name:'Installation',value:'Paste-the-wall'}, {'@type':'PropertyValue',name:'Finish',value:'Satin'}, {'@type':'PropertyValue',name:'Turnaround',value:'5 business days'}, {'@type':'PropertyValue',name:'Size',value:'Custom — any width and height'}, ] }; const MURAL_FAQ_SCHEMA = { '@context':'https://schema.org','@type':'FAQPage', mainEntity:[ {'@type':'Question',name:'What material are your wall murals printed on?',acceptedAnswer:{'@type':'Answer',text:'Our murals are printed on wipe-clean satin vinyl wallpaper. It is durable, moisture-resistant, and suitable for living rooms, kids rooms, and feature walls.'}}, {'@type':'Question',name:'How do I install a vinyl wall mural?',acceptedAnswer:{'@type':'Answer',text:'Our murals are paste-the-wall — apply standard wallpaper paste to the wall surface, then hang the panels. No specialist needed. We include a full installation guide with every order.'}}, {'@type':'Question',name:'Can I remove and reuse the mural?',acceptedAnswer:{'@type':'Answer',text:'The mural can be removed, but it is not designed for repeated repositioning. Paste-the-wall installation bonds more permanently than self-adhesive options.'}}, {'@type':'Question',name:'What file format do I need?',acceptedAnswer:{'@type':'Answer',text:'PDF, AI, PSD, or high-resolution JPG/PNG. Minimum 150dpi at print size. We review every file and send a digital proof before printing.'}}, {'@type':'Question',name:'How long does delivery take?',acceptedAnswer:{'@type':'Answer',text:'5 business days from proof approval to dispatch, plus 2–5 days shipping. Most customers receive their mural within 8–10 business days.'}}, ] }; // Area-based pricing: $89/m² with $149 minimum const muralPrice = (wCm, hCm) => { const w = parseFloat(wCm) || 0; const h = parseFloat(hCm) || 0; if (!w || !h) return null; const areaSqM = (w * h) / 10000; const raw = Math.max(149, Math.round(areaSqM * 89 * 100) / 100); return { total: raw, areaSqM: +areaSqM.toFixed(2) }; }; const MuralProduct = ({ go }) => { useSEO({ title: 'Custom Wall Murals Australia — Printed to Your Size', description: 'Custom vinyl wall murals printed to your exact dimensions. Wipe-clean, paste-the-wall installation. Printed in Sydney. Free proof before we print.', schema: [MURAL_SCHEMA, MURAL_FAQ_SCHEMA], }); const [widthCm, setWidthCm] = React.useState(''); const [heightCm, setHeightCm] = React.useState(''); const [tab, setTab] = React.useState('description'); const [file, setFile] = React.useState(null); const [upState, setUpState] = React.useState('idle'); const [saved, setSaved] = React.useState(()=>localStorage.getItem('kk_saved_mural')==='1'); const toggleSave = () => { const n=!saved; setSaved(n); n ? localStorage.setItem('kk_saved_mural','1') : localStorage.removeItem('kk_saved_mural'); }; const pricing = muralPrice(widthCm, heightCm); // artwork upload (same token system as die-cut) const handleFile = async (f) => { if (!f) return; setFile(f); setUpState('uploading'); try { const fd = new FormData(); fd.append('artwork', f); const r = await fetch('/wp-json/kk/v1/upload-artwork', { method:'POST', body:fd }); const d = await r.json(); if (d.token) { localStorage.setItem('kk_art_token', d.token); setUpState('done'); } else { setUpState('error'); } } catch { setUpState('error'); } }; const handleOrder = () => { if (!pricing) return; const token = localStorage.getItem('kk_art_token'); const p = new URLSearchParams({ 'add-to-cart': MURAL_WC_ID, quantity: 1 }); if (token) p.set('kk_art', token); // pass dimensions + authoritative price as meta for the order p.set('mural_width_cm', widthCm); p.set('mural_height_cm', heightCm); p.set('kk_price', pricing.total.toFixed(2)); p.set('kk_size', `${widthCm}cm × ${heightCm}cm`); window.location.href = '/cart/?' + p.toString(); }; const images = [ 'assets/bedroom-mural.jpeg', 'assets/brick-lifestyle.jpeg', 'assets/sticker-collection.jpeg', ]; const [activeImg, setActiveImg] = React.useState(0); const tabContent = { description: (

Your wall, your rules. Upload any photo, artwork, or pattern — we print it as a single seamless mural sized to exactly fit your wall.

Printed on wipe-clean satin vinyl wallpaper using wide-format pigment inks. Colours stay vivid for 10+ years without fading. The surface cleans up with a damp cloth — ideal for kids' rooms and high-traffic walls.

What's included

Material specs

), artwork: (

File requirements

Not sure if your file is good enough? Upload it and our artwork team will check it within 2 hours and let you know before we print anything.

Custom design service

No artwork? No problem. We can source, retouch, or create a design for your mural — go('contact')} style={{color:'var(--orange)',fontWeight:700}}>get in touch for a quote.

), install: (

Installation — paste-the-wall method

  1. Prepare the wall — clean, dry, smooth. Fill any holes or cracks first.
  2. Mix wallpaper paste — standard paste from any hardware store. Follow paste instructions.
  3. Apply paste to wall (not the mural) — work one panel width at a time.
  4. Hang the first panel — align to a plumb vertical line. Smooth out any air with a wallpaper brush or squeegee.
  5. Butt-join panels — each panel is numbered. Match the edges carefully.
  6. Trim edges — use a sharp knife and straight edge along skirting and ceiling.
  7. Leave to dry — 24 hours before touching. Keep the room ventilated.
Tip: Measure your wall height accurately. Add 50mm to both width and height dimensions when ordering — it gives you room to trim and align precisely.
), }; return (
{/* breadcrumb */}
go('home')} style={{cursor:'pointer'}}>Home / Shop / Custom Wall Mural
{/* hero */}
{/* LEFT — gallery */}
Custom wall mural — King Kong Stickers
New product Vinyl wallpaper
{images.map((src,i)=>( ))}
{/* feature pills */}
{[ { i:, h:'Printed in Sydney' }, { i:, h:'Wipe-clean vinyl' }, { i:, h:'Free shipping' }, { i:, h:'Free proof first' }, ].map((f,i)=>(
{f.i}
{f.h}
))}
{/* RIGHT — configurator */}
// PRODUCT — MURAL001

Custom
Wall Mural

Printed to your exact dimensions on wipe-clean satin vinyl. Any photo, artwork, or pattern — seamless and sized to fit your wall perfectly.

{/* dimensions — custom only */}
Enter your wall size
Width (cm)
setWidthCm(e.target.value)} style={{width:'100%',padding:'14px 16px',border:'2.5px solid var(--ink)',borderRadius:12,fontSize:20,fontWeight:700,fontFamily:'var(--mono)',background:'#fff',outline:'none',boxSizing:'border-box'}} />
×
Height (cm)
setHeightCm(e.target.value)} style={{width:'100%',padding:'14px 16px',border:'2.5px solid var(--ink)',borderRadius:12,fontSize:20,fontWeight:700,fontFamily:'var(--mono)',background:'#fff',outline:'none',boxSizing:'border-box'}} />
{pricing && (
Area: {pricing.areaSqM} m² Material: Vinyl wallpaper Qty: 1
)}
💡 Measure your wall and add 5cm to each edge for trimming. Panel joins are invisible once installed.
{/* artwork upload */}
Don't have artwork ready? Order now — our team will contact you within 2 hours to collect your file.
{/* price + CTA */}
{pricing ? ( <>
Total — {widthCm}cm × {heightCm}cm
${pricing.total.toFixed(2)}
${(pricing.total / pricing.areaSqM).toFixed(0)}/m² · free shipping · GST included
) : ( <>
Enter your dimensions above to see pricing.
From $149
($89/m²)
)}
✓ 100% reprint guarantee ✓ Pay by Card, PayPal, Afterpay
{/* TABS */}
{[['description','Description'],['artwork','Artwork Guide'],['install','Installation']].map(([k,l])=>( ))}
{tabContent[tab]}
{/* FAQ */}

Common questions

{MURAL_FAQ_SCHEMA.mainEntity.map((q,i)=>(
{q.name} +

{q.acceptedAnswer.text}

))}
); };