Boka en städare

1
Dina uppgifter
2
Tid & adress
3
Bekräfta
Boka din städning
Fyll i dina uppgifter – bekräftelse via mail inom 2 timmar
💚
Använd RUT-avdrag
Betala bara 50% – vi fixar resten med Skatteverket
🔒 Krypteras och hanteras säkert · Används bara för RUT-ansökan hos Skatteverket
🎟️ Har du en rabattkod?
Ange din kod direkt i Stripes betalningsfönster som öppnas när du klickar "Bekräfta bokning". Du ser ett fält för kampanjkod/rabattkod längst ner i kassan.
Ny kund? Prova: VALKOMMEN10
🛡️ 100% nöjdhetsgaranti – inte nöjd? Vi städar om gratis →
✓ Gratis avbokning upp till 24h
✓ Betalning via Swish efter städning
✓ Nöjdhetsgaranti
Hem Hitta städare Boka städning Hur det funkar Priser Tjänster Bli städare Boka nu →
function openMobMenu(){document.getElementById('mobOverlay').style.display='block';document.getElementById('mobPanel').classList.add('open');} function closeMobMenu(){document.getElementById('mobOverlay').style.display='none';document.getElementById('mobPanel').classList.remove('open');} function updateServiceInfo() { const svc = document.getElementById('service').value; const linkDiv = document.getElementById('service-info-link'); const link = document.getElementById('service-link'); const tabMap = { 'Hemstädning': '#svc-hem', 'Storstädning': '#svc-stor', 'Flyttstädning': '#svc-flytt', 'Fönsterputs': '#svc-fonster', 'Trapphus': '#svc-hem' }; if (svc && tabMap[svc]) { link.href = 'tjanster.html' + tabMap[svc]; linkDiv.style.display = 'block'; } else { linkDiv.style.display = 'none'; } calcHoursFromSqm(); } // ── ADRESS AUTOCOMPLETE (OpenStreetMap Nominatim) ──────── var _addrTimer = null; async function addrSearch(q) { clearTimeout(_addrTimer); const box = document.getElementById('addr-suggestions'); if (!box) return; if (!q || q.length < 3) { box.style.display='none'; return; } _addrTimer = setTimeout(async () => { try { const res = await fetch( `https://nominatim.openstreetmap.org/search?q=${encodeURIComponent(q+', Sverige')}&format=json&addressdetails=1&limit=5&countrycodes=se`, { headers: { 'Accept-Language': 'sv', 'User-Agent': 'Spick/1.0 hello@spick.se' } } ); const data = await res.json(); if (!data.length) { box.style.display='none'; return; } box.innerHTML = data.map(r => { const addr = r.display_name.split(', Sweden')[0]; const road = r.address?.road || ''; const num = r.address?.house_number || ''; const city = r.address?.city || r.address?.town || r.address?.municipality || ''; const post = r.address?.postcode || ''; const label = [road+' '+num, post+' '+city].filter(Boolean).join(', ').trim(); return `
📍 ${label || addr}
`; }).join(''); box.style.display = 'block'; } catch(e) { box.style.display='none'; } }, 350); } function selectAddr(label, lat, lng) { document.getElementById('address').value = label; document.getElementById('addr-suggestions').style.display = 'none'; // Spara koordinater för geo-matchning window._bookingLat = parseFloat(lat); window._bookingLng = parseFloat(lng); // Extrahera stad const parts = label.split(','); if (parts.length > 1) window._bookingCity = parts[parts.length-1].trim().replace(/^\d+ /, ''); } // Stäng dropdown vid klick utanför document.addEventListener('click', e => { if (!e.target.closest('.f')) { const box = document.getElementById('addr-suggestions'); if (box) box.style.display = 'none'; } }); // ── BANKID AUTOFYLL ─────────────────────────────────────── async function autofillViaBankID() { const pnr = document.getElementById('pnr')?.value?.replace(/[^0-9]/g,''); if (!pnr || pnr.length < 10) { alert('Fyll i personnumret först (YYYYMMDD-XXXX)'); return; } const btn = document.getElementById('bankid-fill-btn'); const status = document.getElementById('bankid-status'); btn.disabled = true; btn.textContent = '⏳ Verifierar...'; status.style.display = 'block'; status.style.background = '#EFF6FF'; status.style.color = '#1E40AF'; status.textContent = '🔵 BankID-verifiering startas – öppna din BankID-app...'; try { // Anropa BankID edge function const res = await fetch('https://urjeijcncsyuletprydy.supabase.co/functions/v1/bankid', { method: 'POST', headers: { 'Content-Type': 'application/json', 'apikey': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InVyamVpamNuY3N5dWxldHByeWR5Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzQyNzIyNDQsImV4cCI6MjA4OTg0ODI0NH0.CH5MSMaWTBfkuzZQOBKgxu-B6Vfy8w9DLh49WPU1Vd0' }, body: JSON.stringify({ action: 'start', personalNumber: pnr }) }); const data = await res.json(); if (data.demo) { // Demo-läge: simulera ett lyckat svar status.style.background = '#DCFCE7'; status.style.color = '#166534'; status.textContent = '✅ BankID verifierad! (Demo-läge – namn hämtat)'; // Fyll i demo-uppgifter (namn + adress via SPAR i produktion) const demoName = 'Anna Andersson'; const [first, ...rest] = demoName.split(' '); if (document.getElementById('fname') && !document.getElementById('fname').value) { document.getElementById('fname').value = first; document.getElementById('fname').dispatchEvent(new Event('input')); } if (document.getElementById('lname') && !document.getElementById('lname').value) { document.getElementById('lname').value = rest.join(' '); document.getElementById('lname').dispatchEvent(new Event('input')); } // I produktion: data.address fylls i automatiskt via SPAR // if (data.address?.full && document.getElementById('address')) { // document.getElementById('address').value = data.address.full; // } } else if (data.sessionId) { // Poll för svar let attempts = 0; const poll = setInterval(async () => { attempts++; if (attempts > 20) { clearInterval(poll); status.style.background = '#FEE2E2'; status.style.color = '#991B1B'; status.textContent = '❌ Tidsgräns – försök igen'; btn.disabled = false; btn.textContent = 'Autofyll'; return; } const pollRes = await fetch('https://urjeijcncsyuletprydy.supabase.co/functions/v1/bankid', { method: 'POST', headers: { 'Content-Type': 'application/json', 'apikey': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InVyamVpamNuY3N5dWxldHByeWR5Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzQyNzIyNDQsImV4cCI6MjA4OTg0ODI0NH0.CH5MSMaWTBfkuzZQOBKgxu-B6Vfy8w9DLh49WPU1Vd0' }, body: JSON.stringify({ action: 'poll', sessionId: data.sessionId }) }).then(r => r.json()); if (pollRes.status === 'complete') { clearInterval(poll); status.style.background = '#DCFCE7'; status.style.color = '#166534'; status.textContent = `✅ BankID verifierad! Välkommen, ${pollRes.givenName}!`; // Autofyll formuläret if (pollRes.givenName && document.getElementById('fname')) { document.getElementById('fname').value = pollRes.givenName; } if (pollRes.surname && document.getElementById('lname')) { document.getElementById('lname').value = pollRes.surname; } btn.textContent = '✅ Verifierad'; } }, 2000); } } catch(e) { status.style.background = '#FEE2E2'; status.style.color = '#991B1B'; status.textContent = '❌ Fel vid BankID-verifiering'; btn.disabled = false; btn.textContent = 'Autofyll'; } } >