Díky aplikaci nakoupíte v Costa Coffee a pekařství Paul mnohem levněji

Sdílet

Nákupy s aplikací Too Good To Go
Autor: Too Good To Go
Nákupy s Too Good To Go
Chtít si pochutnat na dobrém jídle a přitom za to neutratit moc, není nic špatného. Je to možné třeba díky aplikaci, která prodává nespotřebované potraviny z kaváren a restaurací. Zároveň tak zabráníte tomu, aby skončilo vyhozené v odpadu.

Aplikaci Too Good To Go si v Česku doposud stáhlo přes 100 000 uživatelů, kteří jejím prostřednictvím zachránili před vyhozením již více než 100 000 porcí zvaných Dobrovaky. A spolupráce s dalšími podniky, které nechtějí svými potravinami a nápoji plýtvat, pokračuje. Společnost rozšiřuje spolupráci s řetězcem Costa Coffee a navazuje novou s Paulem. Aplikace zatím zahrnuje podniky především v Praze. 

Dle průzkumu společnosti Too Good To Go a výzkumné agentury STEM/MARK 87 procent Čechů zaujímá k plýtvání jídlem negativní postoj a celých 90 procent souhlasí s tím, že by podniky měly nabízet zbylé potraviny na konci dne za lepší ceny, aby se zamezilo jejich vyhození.

Už 25 poboček Costa Coffee 

Uživatelé aplikace Too Good To Go si nyní mohou koupit přebytečné, ale stále dobré jídlo už z 25 kaváren Costa Coffee v Praze, Brně a Liberci. Doposud se z řetězce podařilo před vyhozením zachránit více než 5 000 Dobrovaků. 

Nejnovějšími přírůstky v aplikaci jsou pražské pobočky Costa Coffee v OC Palladium, na Václavském náměstí, v NC Fénix, na Letišti Václava Havla a v Italské ulici.

Galerie: Jak funguje aplikace Too Good To Go?

Zákazníci mohou z kaváren Costa Coffee zachraňovat mix produktů jako jsou bagety, croissanty, sendviče, sladké pečivo a nápoje ve 2 cenových kategoriích: 99 korun za potraviny v hodnotě 300 korun nebo 125 korun místo původních 375 korun.

Francouzské pečivo s velkou slevou

Nově Too Good To Go spojila své síly v boji proti plýtvání se sítí pekařství Paul. Nově tak díky aplikaci můžete koupit neprodané jídlo z vybraných poboček za sníženou cenu.

Too Good To Go a spolupráce s francouzským pekařstvím Paul

Too Good To Go a spolupráce s pekařstvím Paul

Autor: Too Good To Go

„V pekařství Paul věříme, že o planetu je třeba pečovat se stejnou láskou, s jakou pečeme naše produkty. Proto jsme se rozhodli spojit síly s řešením Too Good To Go, které předchází plýtvání potravinami a dává jim druhou šanci. Díky této moderní aplikaci máme možnost oslovit zákazníky se zájmem o udržitelnost a nabídnout jim kvalitní pečivo za zlomek původní ceny. Prostředí aplikace je velice intuitivní. Udržitelnost pro nás navíc není jen trend, ale závazek,“ říká Jana Zástěrová, marketingová manažerka pekařství Paul.

Používáte aplikace na nákup zlevněného jídla?

Na počátku spolupráce budou v aplikaci Too Good To Go k dispozici dvě pražské pobočky pekařství PAUL – I.P. Pavlova a Chodov. Po počáteční testovací fázi se plánují připojit další lokality.

Uživatelé Too Good To Go mohou v Dobrovacích z pekařství najít jak sezónní potraviny a speciality, tak i pochoutky ze stálé nabídky, jako jsou čerstvé bagety, croissanty, tradiční francouzské dezerty, sendviče nebo quiche za 49 Kč (běžná cena 149 Kč) nebo za 65 Kč (původní cena 195 Kč).

Autor článku

Redaktorka serveru Vitalia.cz se zaměřuje zejména na kvalitu potravin a kvalitu jejich prodeje. Věnuje se také zdravotní problematice.

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).