;(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

Brincadeira atrai patrocínio e vira negócio no Instagram

Daniela Arrais e Luiza Voll não imaginavam faturar com patrocínios quando criaram o Instamission - Divulgação
Daniela Arrais e Luiza Voll não imaginavam faturar com patrocínios quando criaram o Instamission Imagem: Divulgação

Larissa Coldibeli

Do UOL, em São Paulo

03/04/2013 06h00

A publicitária Luiza Voll e a jornalista Daniela Arrais são sócias na Contente, empresa de produção de conteúdo digital criada em 2010. Apesar de produzirem materiais a pedido das empresas, as empreendedoras e sua agência ficaram conhecidas por um projeto autoral, criado por elas sem a pretensão de ser comercial.

É o Instamission, que convoca os usuários do Instagram a fazer fotos relacionadas a um tema por semana. Cada um deles é considerado uma missão e pode render premiação aos participantes. O projeto, lançado em fevereiro de 2011, foi ganhando adeptos na rede social e chamou a atenção de empresas, que procuraram as empreendedoras com o objetivo de patrocinar missões e divulgar sua marca.

“O modelo de negócio das missões patrocinadas surgiu com a primeira demanda. Nós não tínhamos pensado nisso, nossa ideia era só diversão”, diz Luiza Voll. Cinco meses depois do lançamento do Instamission, foi feita a primeira missão patrocinada, que convidou as pessoas a fotografarem cenas dignas de filme, com o apoio de uma fabricante de TVs.

Empresas oferecem prêmios para atrair participantes

Para patrocinar uma missão, as empresas pagam um valor fixo à agência, como se comprassem um anúncio, e oferecem um prêmio aos participantes. “O prêmio é muito importante, deve ser algo de valor não só financeiro, mas deve trazer algum benefício ou experiência para o ganhador”, afirma a publicitária.

O engajamento das pessoas depende do tema da missão –quanto mais simples e atrativo, melhor– e do prêmio. As empreendedoras ajudam as empresas a formatar cada etapa do projeto, para que ele esteja alinhado com os interesses dos seguidores e participantes do Instamission. No entanto, elas não dão garantias de resultados.

“Já tivemos missões patrocinadas de grande sucesso, com mais de 14 mil fotos enviadas. Mas não podemos garantir a participação das pessoas, não é uma ciência exata”, declara Voll.

Apesar de a comunidade do Instamission não ser tão grande –possui cerca de 25 mil pessoas–, ela acredita que as empresas se interessam pelo patrocínio porque podem entrar em contato com um público relevante para elas, formado por pessoas antenadas, usuários frequentes de redes sociais e formadores de opinião.

Desde o lançamento, já foram feitas 152 missões, 40 delas patrocinadas. Com o sucesso do Instamission já consolidado, a empresa aposta agora em um novo projeto, o Cinemission. Ele utiliza o aplicativo Vine, ainda pouco conhecido no Brasil, que permite gravar e compartilhar vídeos.

Seguindo a mesma dinâmica do Instamission, os usuários são convocados a fazer filmes curtos, de poucos segundos, sobre o tema da missão.

Segundo Gabriel Borges, sócio da Ampfy, agência de comunicação especializada em mídias sociais, o segredo para que a empresa não morra com a derrocada de uma rede social é entender qual é seu negócio principal. "Neste caso, as empreendedoras entenderam que sua principal atividade é criar ações autorais, independentemente da rede social."