;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Logo Pagbenk Seu dinheiro rende mais
Topo

Caçador de promoções cria site de busca de ofertas, e mania vira lucro

Pedro Eugênio usou uma habilidade pessoal para montar empresa e depois conquistou investimento - Divulgação
Pedro Eugênio usou uma habilidade pessoal para montar empresa e depois conquistou investimento Imagem: Divulgação

Larissa Coldibeli

Do UOL, em São Paulo

23/05/2013 06h00

O publicitário Pedro Eugênio, 33, transformou seu hobby em um negócio. O hábito de juntar cupons de desconto para compras em lojas virtuais o fez ganhar fama entre amigos, que recorriam a ele sempre que queriam fazer uma compra online.

De tanto ser procurado para essa finalidade, ele criou um site para reunir os cupons em um só lugar, para facilitar o o às promoções. Assim surgiu, em 2006, o site Busca Descontos.

“Em um fim de semana eu criei o site e todas as noites eu o abastecia com mais promoções. Aos poucos, os os foram crescendo. De uma visita por mês ou para uma por semana, depois para uma por dia, uma por hora, até que eu percebi que era uma grande oportunidade”, declara.

Depois de algum tempo, as lojas virtuais identificaram o número de visitantes que chegavam até suas páginas por meio do site de Eugênio e aram a procurá-lo para fazer anúncios. Assim, ele viu seu hobby se transformar numa fonte de renda.

Em 2010, com o negócio já bem estruturado, ele deixou o cargo de executivo em uma grande empresa para se dedicar exclusivamente ao empreendimento que, na época, rendia cerca de R$ 1 mil por mês.

No mesmo ano, ele conseguiu um aporte do grupo investidor Leedia. Por questões contratuais, ele não revela o faturamento atual da empresa.

“Eu acreditava na ideia e resolvi arriscar, mesmo com meus filhos gêmeos recém-nascidos. Se não desse certo, o máximo que ia acontecer era eu ter que pedir meu emprego de volta ou arrumar outra ocupação”, diz Eugenio.

O site reúne hoje 1.500 ofertas de cerca de 300 lojas virtuais, que são atualizadas diariamente, e tem 12 milhões de internautas cadastrados. O empresário conta que a criação do Busca Descontos não exigiu nenhum investimento.

"Apesar de não ser programador, eu sabia criar um site, ainda que básico, para começar o negócio", diz.

O lucro do site vem dos anúncios feitos pelas lojas virtuais.

Dicas do livro "A startup de $100" para abrir empresa

  • 1

    Ideia

    Você não precisa de muito dinheiro para começar um negócio, apenas um produto ou serviço, um grupo de pessoas dispostas a pagar por ele e um jeito de ser pago

  • 2

    Ação

    Combine sua paixão e habilidades com algo útil para as pessoas. Defina o que irá vender, crie um site –há opções grátis-, desenvolva uma oferta, assegure um jeito de ser pago e anuncie ao mundo

  • 3

    Promoção

    Promova os benefícios essenciais do seu produto ou serviço e não os recursos e características dele. Os benefícios essenciais geralmente se relacionam a necessidades emocionais

  • 4

    Clientes

    Utilize levantamentos para conhecer seus clientes existentes e potenciais. Quanto mais específico melhor. Pergunte: “qual é a coisa mais importante que posso fazer por você">var Collection = { "path" : "commons.uol.com.br/monaco/export/api.uol.com.br/collection/economia/noticias/data.json", "channel" : "economia", "central" : "economia", "titulo" : "Economia", "search" : {"tags":"22373"} };