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

Rappi terá entrega de sorvete e batata frita em 15 minutos, diz CEO

A CEO do Rappi no Brasil, Tijana Jankovic - Rappi/Divulgação
A CEO do Rappi no Brasil, Tijana Jankovic Imagem: Rappi/Divulgação

Mariana Desidério

do UOL, em São Paulo

23/10/2022 04h00

O aplicativo de entregas Rappi está trabalhando para ampliar suas entregas super-rápidas em meio a uma forte disputa com seu principal concorrente no Brasil, o iFood. A ideia é que, ainda neste ano, o app seja capaz de entregar alimentos sensíveis, como sorvete, açaí e batata frita em um prazo de 15 minutos.

O aplicativo já tem a modalidade de entrega turbo, que chega em dez minutos à casa do cliente. A modalidade funciona para produtos de supermercado que estão disponíveis nas dark stores do Rappi. Hoje são 100 lojas do tipo, em 13 cidades brasileiras, com até 1.500 itens disponíveis, incluindo por exemplo o álbum e figurinhas da Copa do Mundo. O serviço cresceu 113% no primeiro semestre de 2022, em comparação com o mesmo período do ano anterior, quando o app começou a operar nesse modelo.

"Vemos a possibilidade de expandir esse conceito em outras verticais", diz Tijana Jankovic, CEO do Rappi no Brasil, em entrevista ao UOL. Essa expansão vem ocorrendo de forma gradual e, segundo a empresa, já é possível encontrar entregas de restaurantes em 20 minutos, por exemplo.

Que produtos vão ter entrega rápida? Dentre os segmentos elegíveis para a extensão da entrega rápida estão itens de farmácia e comida, em especial aqueles em que a velocidade interfere de forma significativa na qualidade do produto. A ideia é ampliar as entregas rápidas a tempo de aproveitar a demanda que deve vir com a Copa do Mundo.

A novidade tem como meta ampliar a fidelização do cliente brasileiro ao aplicativo, em especial o cliente prime, que paga uma ao Rappi todo mês. O consumidor também deve esperar a ampliação dos benefícios para s — a meta é adicionar dois novos benefícios por mês.

A modalidade, que inclui descontos em compras no app, do HBO Max e descontos em aluguel de carros, vai começar a ficar mais forte também em estabelecimentos físicos. Ou seja, o cliente ganha algum benefício no salão do restaurante ou nas lojas parceiras, mesmo em compras feitas presencialmente. Hoje mais da metade dos clientes do Rappi no Brasil são s prime.

Qual é a disputa com o iFood? O reforço da modalidade de s vem em um momento de disputas no setor. De um lado, o Rappi acusa o iFood de práticas anticompetitivas e foi ao Cade contra o competidor. O processo, que inclui outras empresas e entidades, deve ter um desfecho ainda esse ano.

A principal queixa do Rappi envolve os contratos de exclusividade firmados pelo iFood com restaurantes estratégicos, como Mc Donald's e Outback. O iFood diz que sua atuação ocorre dentro dos limites da legislação concorrencial. Na outra ponta, o Rappi vê o avanço de serviços de entregas de compras como o Shopper. Não à toa, em março deste ano o Uber Eats deixou de operar no Brasil.

Segundo Jankovic, ainda que a decisão do Cade não seja favorável ao Rappi, a empresa não pretende deixar o país. A executiva afirma que o mercado brasileiro é o mais estratégico para o Rappi, por seu alto potencial de crescimento. Fundado na Colômbia, o Rappi está atualmente em nove países da América Latina.