Dashboard

AI OS v3

🌐 Aktivni projekti

ProjektDomenaStatusStraniceCijena/mjKreiran

Web Projekti

NazivDomenaDjelatnostStatusFeaturesTip€/mjKreiran

📋 Osnovni podaci

🌐 DNS ?Nameserveri za vašu domenu. Postavite ih kod registrara domene (Namecheap, GoDaddy, Marcaria...). A zapis se kreira automatski prilikom deploya.

🏢 Impressum ?Podaci o tvrtki koji se prikazuju na stranici u footeru i na stranici Pravni podaci. OIB je obavezan za hrvatske tvrtke.

🖼

🧾 Racuni & slanje

OIB, broj, datum, opis, iznos, PDV

⚡ Servisi

Učitavanje...
'; var w=window.open('','_blank','width=700,height=800');if(w){w.document.write(html);w.document.close();setTimeout(function(){w.print();},400);} toast('Print otvoren'); } function emailRec(type,raw){ // raw may be JSON string (from table row) or object (from modal) var data = (typeof raw==='string') ? JSON.parse(decodeURIComponent(raw)) : raw; var to='', subj='', body=''; if(type==='booking'){ to = data.customer_email||''; subj = 'Vasa rezervacija — '+data.service+' — '+(data.booking_date||''); body = 'Postovani '+data.customer_name+',\n\n' +'potvrdjujemo Vasu rezervaciju:\n\n' +'Usluga: '+data.service+'\n' +'Datum: '+data.booking_date+' u '+data.booking_time+'\n' +'Trajanje: '+(data.duration_minutes||60)+' min\n' +'Cijena: €'+(data.price||0)+'\n\n' +'Hvala na povjerenju!\n\n' +(_project&&_project.company_name||''); } else if(type==='contact'){ to = data.email||''; subj = 'RE: Vas upit — '+(_project&&_project.company_name||''); body = 'Postovani '+data.name+',\n\n' +'hvala na Vasem upitu. Javit cemo Vam se u najkracem mogucncem roku.\n\n' +'Vas upit: '+( data.message||'')+'\n\n' +'S postovanjem,\n' +(_project&&_project.company_name||'') +(_project&&_project.company_phone?'\nTel: '+_project.company_phone:'') +(_project&&_project.company_email?'\nEmail: '+_project.company_email:''); } else if(type==='customer'){ to = data.email||''; subj = 'Obavijest — '+(_project&&_project.company_name||''); body = 'Postovani '+data.name+','; } else if(type==='invoice'){ to = data.customer_email||(_project&&_project.company_email)||''; subj = 'Racun '+data.invoice_number+' — '+(_project&&_project.company_name||''); body = 'U prilogu Vam saljemo racun '+data.invoice_number+'\n' +'Iznos: €'+data.total+'\n' +'Status: '+data.status +(data.due_date?'\nRok plaćanja: '+data.due_date:'')+'\n\n' +(_project&&_project.company_name||''); } var uri = 'mailto:'+encodeURIComponent(to) +'?subject='+encodeURIComponent(subj) +'&body='+encodeURIComponent(body); window.open(uri); toast('Email: '+to); } function tgRec(type,data){ var msg=type==='invoice'?'\uD83E\uDDFE Racun '+data.invoice_number+' | \u20ac'+data.total+' | '+data.status:type==='booking'?'\uD83D\uDCC5 '+data.customer_name+' | '+data.service+' | '+data.booking_date+' '+data.booking_time:type==='contact'?'\uD83D\uDCE8 '+data.name+' | '+data.email+'\n'+(data.message||''):'\uD83D\uDC65 '+data.name+' | \u20ac'+(data.total_spent||0); fetch('https://api.telegram.org/bot8535797835:AAFItT-92jzZ9NWFafLxn0dLa1_n2s-JE5Y/sendMessage',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({chat_id:'7969491558',text:'\uD83D\uDD14 RINET Builder\n\n'+msg})}).then(function(){toast('Telegram poslano!');}).catch(function(){toast('Telegram greska',true);}); } function markPaidRec(data){ if(!data||!_project)return; fetch(API+'/projects/'+_project.id+'/invoices/'+data.id,{method:'PUT',headers:{'Content-Type':'application/json'},body:JSON.stringify({status:'paid'})}).then(function(){toast('Oznaceno placenim!');closeRecord();loadInvoices(_project.id);}).catch(function(e){toast('Greska: '+e.message,true);}); } // ═══ WIZARD ═══ function openWizard(){_wizPage=1;updateWiz();document.getElementById("wizard-modal").classList.add("open"); ["wz-name","wz-industry","wz-domain","wz-description","wz-seo_keywords"].forEach(function(id){var el=document.getElementById(id);if(el)el.value="";}); ["wz-has_booking","wz-has_contact_form","wz-has_gallery","wz-ssl_enabled"].forEach(function(id){var el=document.getElementById(id);if(el)el.checked=true;}); ["wz-has_chatbot","wz-has_payments","wz-has_crm","wz-has_blog","wz-has_erp","wz-has_mail_server","wz-telegram_enabled","wz-fb_enabled"].forEach(function(id){var el=document.getElementById(id);if(el)el.checked=false;}); document.getElementById("wz-primary_color").value="#0ea5e9";document.getElementById("wz-secondary_color").value="#f59e0b";wizCalc(); } function closeWizard(){document.getElementById("wizard-modal").classList.remove("open");} function wizTypeChange(v){var pf=document.getElementById("wz-portal-fields");if(pf)pf.style.display=v==="portal_media"?"block":"none";} function wizStep(dir){ if(dir>0&&_wizPage===1){if(!document.getElementById("wz-name").value.trim()){toast("Unesite naziv!",true);return;}} _wizPage+=dir;if(_wizPage<1)_wizPage=1;if(_wizPage>4)_wizPage=4; if(_wizPage===4)buildSummary(); updateWiz(); } function updateWiz(){ document.querySelectorAll(".wiz-page").forEach(function(p){p.classList.remove("active");}); document.getElementById("wiz-"+_wizPage).classList.add("active"); document.querySelectorAll(".wizard-step").forEach(function(s,i){s.className="wizard-step"+(i<_wizPage-1?" done":i===_wizPage-1?" active":"");}); document.getElementById("wiz-prev").style.display=_wizPage>1?"inline-block":"none"; document.getElementById("wiz-next").style.display=_wizPage<4?"inline-block":"none"; document.getElementById("wiz-submit").style.display=_wizPage===4?"inline-block":"none"; } function wizCalc(){ var total=PRICES.base_site,items=["Web stranica (do 8 str.): €49"]; var map={has_booking:{p:"booking",l:"Rezervacije"},has_crm:{p:"crm",l:"CRM"},has_chatbot:{p:"chatbot",l:"AI Chatbot"},has_payments:{p:"payments",l:"Plaćanja"},has_gallery:{p:"gallery",l:"Galerija"},has_blog:{p:"blog",l:"Blog"},has_erp:{p:"erp",l:"Mini ERP"},has_mail_server:{p:"mail_basic",l:"Email"},telegram_enabled:{p:"telegram",l:"Telegram"},fb_enabled:{p:"fb_page",l:"Facebook"},whatsapp_enabled:{p:"whatsapp",l:"WhatsApp"}}; for(var f in map){var el=document.getElementById("wz-"+f);if(el&&el.checked){var pr=PRICES[map[f].p];if(pr>0){total+=pr;items.push(map[f].l+": €"+pr);}}} document.getElementById("wiz-price").textContent="€"+total; document.getElementById("wiz-price-items").innerHTML=items.join("
"); return total; } function buildSummary(){ var n=document.getElementById("wz-name").value,d=document.getElementById("wz-domain").value||n.toLowerCase().replace(/\s+/g,"-")+".rinet.one"; var feats=[]; ["has_booking:📅 Rezervacije","has_contact_form:✉️ Kontakt","has_gallery:🖼️ Galerija","has_chatbot:🤖 Chatbot","has_payments:💳 Plaćanja","has_crm:👥 CRM","has_blog:📝 Blog","has_erp:📦 ERP","has_mail_server:📧 Mail","telegram_enabled:📱 Telegram","fb_enabled:📘 Facebook","ssl_enabled:🔒 SSL"].forEach(function(s){ var parts=s.split(":");var el=document.getElementById("wz-"+parts[0]);if(el&&el.checked)feats.push(parts[1]); }); document.getElementById("wiz-summary").innerHTML= '
'+ 'Naziv:'+n+''+ 'Domena:'+d+''+ 'Djelatnost:'+(document.getElementById("wz-industry").value||"—")+''+ 'Stil:'+document.getElementById("wz-design_style").value+' / '+document.getElementById("wz-theme_mode").value+''+ 'Features:'+feats.join(" ")+'
'; document.getElementById("wiz-final-price").textContent="€"+wizCalc(); } async function wizSubmit(){ var name=document.getElementById("wz-name").value.trim();if(!name){toast("Unesite naziv!",true);return;} var body={name:name,domain:document.getElementById("wz-domain").value.trim()||name.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"")+".rinet.one", industry:document.getElementById("wz-industry").value.trim(),description:document.getElementById("wz-description").value.trim(), language:document.getElementById("wz-language").value,primary_color:document.getElementById("wz-primary_color").value, secondary_color:document.getElementById("wz-secondary_color").value,design_style:document.getElementById("wz-design_style").value, theme_mode:document.getElementById("wz-theme_mode").value, seo_keywords:document.getElementById("wz-seo_keywords").value?document.getElementById("wz-seo_keywords").value.split(",").map(function(s){return s.trim();}):[]}; ["has_booking","has_contact_form","has_gallery","has_chatbot","has_payments","has_crm","has_blog","has_erp","has_mail_server","telegram_enabled","fb_enabled","ssl_enabled"].forEach(function(f){ var el=document.getElementById("wz-"+f);if(el)body[f]=el.checked; }); if(body.has_payments)body.payment_platform="stripe"; body.project_type=document.getElementById("wz-type")?.value||"web_site"; if(body.project_type==="portal_media"){body.portal_admin_user=document.getElementById("wz-portal-admin-user")?.value||"admin";body.portal_admin_email=document.getElementById("wz-portal-admin-email")?.value||"";body.portal_admin_password_plain=document.getElementById("wz-portal-admin-pass")?.value||"";body.portal_chatbot_name=document.getElementById("wz-portal-chatbot")?.value||"AI Asistent";body.portal_brand_color=document.getElementById("wz-portal-color")?.value||"#059669";} body.monthly_price=wizCalc(); closeWizard(); try{var r=await fetch(API+"/projects",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});var d=(await r.json()).data; await openProject(d.id);buildProject();}catch(e){toast(t("msg_err")+e.message,true);} } // === LIGHT/DARK THEME TOGGLE === function toggleTheme(){ var r=document.documentElement; var cur=r.getAttribute("data-theme")||"dark"; var nxt=cur==="dark"?"light":"dark"; r.setAttribute("data-theme",nxt); localStorage.setItem("builder_theme",nxt); applyTheme(nxt); } function applyTheme(t){ var r=document.documentElement.style; if(t==="light"){ r.setProperty("--bg","#f5f5f7");r.setProperty("--s1","#ffffff");r.setProperty("--s2","#f0f0f2"); r.setProperty("--s3","#e8e8ea");r.setProperty("--b","#d1d1d6");r.setProperty("--b2","#c7c7cc"); r.setProperty("--t","#1d1d1f");r.setProperty("--t2","#636366");r.setProperty("--t3","#8e8e93"); } else { r.setProperty("--bg","#262624");r.setProperty("--s1","#2e2e2c");r.setProperty("--s2","#363634"); r.setProperty("--s3","#3e3e3c");r.setProperty("--b","#1e1e2e");r.setProperty("--b2","#2a2a3e"); r.setProperty("--t","#e8e8f0");r.setProperty("--t2","#9090a8");r.setProperty("--t3","#58586e"); } var btn=document.getElementById("theme-toggle"); if(btn)btn.textContent=t==="dark"?"☀️":"🌙"; } (function(){var saved=localStorage.getItem("builder_theme")||"dark";document.documentElement.setAttribute("data-theme",saved);applyTheme(saved);})(); loadDashboard(); // ═══ BUY DOMAIN VIA PORKBUN ═══ async function buyDomain(){ if(!_project) return; var domain = document.getElementById('pf-domain')?.value?.trim(); if(!domain){toast('Unesite domenu!',true);return;} if(!confirm('Kupiti domenu '+domain+' preko Porkbun?\n\nAko na Porkbun računu ima kredita, domena se registrira automatski.\nAko nema, otvorit će se Porkbun checkout stranica.')){return;} toast('Pokušavam registraciju '+domain+'...'); try{ var r = await fetch(API+'/projects/'+_project.id+'/register-domain', { method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify({domain: domain}) }); var d = (await r.json()).data; if(d.auto && d.status==='registered'){ toast('✅ '+domain+' registrirana! NS postavljeni na Hetzner.'); document.getElementById('pf-domain').value = domain; saveProject(); } else { // Manual — open Porkbun checkout var msg = d.message || 'Otvaramo Porkbun...'; toast(msg); if(d.links && d.links.length > 0){ window.open(d.links[0].url, '_blank'); } else { window.open('https://porkbun.com/checkout/search?q='+encodeURIComponent(domain), '_blank'); } } }catch(e){ toast('Greška: '+e.message, true); window.open('https://porkbun.com/checkout/search?q='+encodeURIComponent(domain), '_blank'); } } // ═══ BUILDER THEME TOGGLE ═══ var _builderDark = true; function toggleBuilderTheme(){ _builderDark = !_builderDark; var r = document.documentElement.style; if(_builderDark){ r.setProperty('--bg','#262624');r.setProperty('--s1','#2e2e2c');r.setProperty('--s2','#363634');r.setProperty('--s3','#3e3e3c'); r.setProperty('--b','#4a4a48');r.setProperty('--t','#e8e8f0');r.setProperty('--t2','#9090a8');r.setProperty('--t3','#6e6e7e'); } else { r.setProperty('--bg','#f0eeec');r.setProperty('--s1','#ffffff');r.setProperty('--s2','#f5f5f3');r.setProperty('--s3','#eaeae8'); r.setProperty('--b','#d0d0ce');r.setProperty('--t','#1a1a18');r.setProperty('--t2','#5a5a58');r.setProperty('--t3','#8a8a88'); } document.getElementById('builder-theme-btn').textContent = _builderDark ? '☀️ Light' : '🌙 Dark'; } // Add theme toggle button to sidebar footer (function(){ var footer = document.querySelector('.sidebar > div:last-child'); if(footer){ var btn = document.createElement('button'); btn.id='builder-theme-btn';btn.textContent='☀️ Light'; btn.style.cssText='margin-top:8px;background:var(--s2);border:1px solid var(--b);color:var(--t);padding:4px 10px;border-radius:4px;cursor:pointer;font-size:11px;width:100%;'; btn.onclick=toggleBuilderTheme; footer.appendChild(btn); } })(); // ═══ DOMAIN REGISTRATION CHECK ═══ var _domainPrice = 0; async function checkDomain(){ var domainEl = document.getElementById('pf-domain'); if(!domainEl || !domainEl.value) return; var domain = domainEl.value.trim(); if(!domain.includes('.')) return; var statusEl = document.getElementById('domain-check-status'); if(!statusEl) return; statusEl.innerHTML = '⏳ Provjeravam...'; try { var r = await fetch(API+'/domain-check/'+encodeURIComponent(domain)); var d = (await r.json()).data; _domainPrice = d.price_yearly; if(d.available){ // Registrar links + Buy button var regHtml = (d.registrars||[]).map(function(r,ri){ var rsym = r.currency==='EUR' ? '\u20ac' : (d.currency_symbol||'$'); var pt = r.price ? ' '+rsym+r.price+'/god' : ''; var badge = ri===0 ? 'preporučeno' : ''; if(ri===0){window._firstRegUrl=r.url;window._firstRegName=r.name;} return '
' +''+r.name+badge+' \u2197' +pt +''+(r.note||'')+'
'; }).join(''); var srcTag = d.source==='porkbun' ? '' : ' (fallback)'; var sym = d.currency_symbol || '$'; window._firstRegUrl = window._firstRegUrl || 'https://porkbun.com'; window._firstRegName = window._firstRegName || 'Porkbun'; statusEl.innerHTML = '
' +'
\u2705 Domena dostupna! '+sym+d.price_yearly+'/god ('+sym+d.price_monthly+'/mj)
' +'
'+regHtml+'
' +'
' +'' +'' +'
'; +'' +''; } else { var tsym = d.currency_symbol || '$'; statusEl.innerHTML = '
' +'
\u274c Domena zauzeta. Obnova: ~'+tsym+d.price_renew_yearly+'/god
' +'
' +'WHOIS \u2197' +'Porkbun \u2197' +'INWX \u2197' +'Namecheap \u2197' +'
'; +''; } calcPrice(); } catch(e) { statusEl.innerHTML = 'Greška provjere'; } } // ═══ ENHANCED PRICING WITH DOMAIN + DISCOUNT + STRIPE ═══ // ═══ STRIPE PAYMENT LINK ═══ async function sendPaymentLink(amountCents){ if(!_project){toast('Nema projekta',true);return;} if(amountCents < 50){toast('Minimalni iznos €0.50',true);return;} var desc = _project.name + ' — mjesečna pretplata RINET AI Web Builder'; try { var r = await fetch(API+'/projects/'+_project.id+'/checkout', { method: 'POST', headers: {'Content-Type':'application/json'}, body: JSON.stringify({ amount: amountCents, discount_pct: _discountPct, discount_eur: _discountEur, description: desc, domain_name: _project.domain }) }); var d = (await r.json()).data; if(d && d.checkout_url){ // Copy to clipboard navigator.clipboard.writeText(d.checkout_url).then(function(){ toast('Stripe link kopiran! €'+d.amount_eur+' — SEPA/kartice/iDEAL'); }).catch(function(){ prompt('Kopiraj Stripe payment link:', d.checkout_url); }); // Also open in new tab window.open(d.checkout_url, '_blank'); } else { toast('Stripe greška', true); } } catch(e){ toast('Greška: '+e.message, true); } } // ═══ INJECT DOMAIN CHECK UI ═══ (function(){ // Add domain check button after domain input var obs = new MutationObserver(function(){ var domainField = document.getElementById('pf-domain'); if(domainField && !document.getElementById('domain-check-btn')){ var wrapper = domainField.parentElement; // Add check button var btn = document.createElement('button'); btn.id='domain-check-btn'; btn.className='btn btn-s'; btn.style.cssText='margin-top:4px;font-size:11px;padding:4px 10px;'; btn.textContent='🔍 Provjeri dostupnost'; btn.onclick=function(e){e.preventDefault();checkDomain();}; wrapper.appendChild(btn); // Add status div var status = document.createElement('div'); status.id='domain-check-status'; status.style.cssText='font-size:11px;margin-top:4px;'; wrapper.appendChild(status); // Add domain registration toggle var regLabel = document.createElement('label'); regLabel.className='toggle'; regLabel.style.cssText='margin-top:6px;font-size:12px;'; regLabel.innerHTML=' 🌐 Dodaj registraciju domene kao uslugu'; wrapper.appendChild(regLabel); } }); obs.observe(document.body, {childList:true, subtree:true}); // Also try immediately setTimeout(function(){ var domainField = document.getElementById('pf-domain'); if(domainField && !document.getElementById('domain-check-btn')){ var wrapper = domainField.parentElement; var btn = document.createElement('button'); btn.id='domain-check-btn';btn.className='btn btn-s'; btn.style.cssText='margin-top:4px;font-size:11px;padding:4px 10px;'; btn.textContent='🔍 Provjeri dostupnost'; btn.onclick=function(e){e.preventDefault();checkDomain();}; wrapper.appendChild(btn); var status = document.createElement('div'); status.id='domain-check-status';status.style.cssText='font-size:11px;margin-top:4px;'; wrapper.appendChild(status); var regLabel = document.createElement('label'); regLabel.className='toggle';regLabel.style.cssText='margin-top:6px;font-size:12px;'; regLabel.innerHTML=' 🌐 Dodaj registraciju domene kao uslugu'; wrapper.appendChild(regLabel); } }, 500); })();