
SEO That Works

Google Ads That Hit Harder

Lower Maintenance Costs

Built by a seasoned team from Calgary and Zagreb, our websites deliver fast performance, better SEO, stronger Google Ads, and cleaner code—without the big-agency fluff.
class Task{constructor(title,dueDate=null){this.id=crypto.randomUUID();this.title=title;this.completed=false;this.createdAt=new Date();this.dueDate=dueDate?new Date(dueDate):null;}toggle(){this.completed=!this.completed;}}class TaskManager{constructor(storageKey="taskList"){this.storageKey=storageKey;this.tasks=this.loadTasks();}addTask(title,dueDate){const task=new Task(title,dueDate);this.tasks.push(task);this.saveTasks();}deleteTask(id){this.tasks=this.tasks.filter(task=>task.id!==id);this.saveTasks();}toggleTask(id){const task=this.tasks.find(t=>t.id===id);if(task){task.toggle();this.saveTasks();}}saveTasks(){localStorage.setItem(this.storageKey,JSON.stringify(this.tasks));}loadTasks(){const data=localStorage.getItem(this.storageKey);return data?JSON.parse(data).map(t=>Object.assign(new Task(),t)):[];}getSortedTasks(){return this.tasks.slice().sort((a,b)=>{if(a.completed!==b.completed)return a.completed-b.completed;if(a.dueDate&&b.dueDate)return new Date(a.dueDate)-new Date(b.dueDate);return 0;});}}const app=new TaskManager();const taskList=document.getElementById("taskList");const taskForm=document.getElementById("taskForm");const inputTitle=document.getElementById("taskTitle");const inputDate=document.getElementById("taskDueDate");function renderTasks(){taskList.innerHTML="";const tasks=app.getSortedTasks();if(tasks.length===0){const empty=document.createElement("p");empty.textContent="No tasks yet.";taskList.appendChild(empty);return;}tasks.forEach(task=>{const item=document.createElement("div");item.className=`task-item ${task.completed?"done":""}`;const label=document.createElement("label");label.innerHTML=`<input type="checkbox" ${task.completed?"checked":""} /><span>${task.title}</span>`;if(task.dueDate){const due=document.createElement("small");due.textContent="Due: "+new Date(task.dueDate).toLocaleDateString();item.appendChild(due);}const btnDelete=document.createElement("button");btnDelete.textContent="�";btnDelete.title="Delete task";btnDelete.classList.add("delete-btn");label.querySelector("input").addEventListener("change",()=>{app.toggleTask(task.id);renderTasks();});btnDelete.addEventListener("click",()=>{app.deleteTask(task.id);renderTasks();});item.appendChild(label);item.appendChild(btnDelete);taskList.appendChild(item);});}taskForm.addEventListener("submit",e=>{e.preventDefault();const title=inputTitle.value.trim();const due=inputDate.value;if(title){app.addTask(title,due);inputTitle.value="";inputDate.value="";renderTasks();}});document.addEventListener("DOMContentLoaded",()=>{renderTasks();});
We build from the ground up with search visibility in mind. Better rankings, more traffic, less guessing.
We build on Webflow, generating clean HTML, CSS, and JavaScript - eliminating plugin bloat and enhancing security.
Using licensed tools, we ensure every project is high-quality and professional.