(function () { function setupPapayaMenu() { const menu = document.getElementById('papaya-menu'); if (!menu) return; const toggle = menu.querySelector('.papaya-menu__toggle'); const links = menu.querySelector('.papaya-menu__mobile-links'); if (!toggle || !links) return; /* OPEN / CLOSE MENU */ toggle.addEventListener('click', function () { const willOpen = links.hidden; links.hidden = !willOpen; toggle.setAttribute( 'aria-expanded', String(willOpen) ); toggle.setAttribute( 'aria-label', willOpen ? 'Close navigation menu' : 'Open navigation menu' ); }); /* CLOSE AFTER SELECTING A LINK */ links.querySelectorAll('a').forEach(function (link) { link.addEventListener('click', function () { links.hidden = true; toggle.setAttribute( 'aria-expanded', 'false' ); toggle.setAttribute( 'aria-label', 'Open navigation menu' ); }); }); /* CLOSE WITH ESCAPE KEY */ document.addEventListener('keydown', function (event) { if (event.key === 'Escape' && !links.hidden) { links.hidden = true; toggle.setAttribute( 'aria-expanded', 'false' ); toggle.setAttribute( 'aria-label', 'Open navigation menu' ); toggle.focus(); } }); } if (document.readyState === 'loading') { document.addEventListener( 'DOMContentLoaded', setupPapayaMenu, { once: true } ); } else { setupPapayaMenu(); } })();

A local reward
every time you move.

Imagine:
A free coffee after your morning run.
Discounted brunch after your weekend ride.
Free coffee, discounts and more from local businesses

Join a growing community making movement
more rewarding.

PAPAYA

How to unlock rewards

In three simple steps:

1. Move

Track your walk, run, ride, swim or workout.

2. Earn

Verify your activity by uploading a screenshot from your fitness app

3. Enjoy

Redeem your rewards at local cafés and restaurants

Start enjoying local rewards today.

FAQs.

Everything you need to know about moving, unlocking and enjoying rewards with papaya.

What is papaya?

papaya is a Perth-based start-up building a new way to help people become healthier, fitter and happier through physical activity. We are currently beta testing in Perth. papaya is free for all beta users.

What rewards can I unlock?

Free access to users. Win-win!

One reward per activity, per day, per user.

Rewards can be free coffees or discounts on food or purchases from our local partners.

Explore papaya rewards
Which fitness apps can I use?

A screenshot from any fitness app (Strava, Garmin Connect, Apple Health, Google Fit or other) will be enough to verify activity.

No smartwatch? No worries, just download Strava and use it on your phone for free.

Download Strava
Which activities are eligible?

Any activity that can be recorded on a smartwatch or fitness app is eligible.

This includes running, cycling (MTB or road), swimming (pool or ocean), brisk walking (> 5 Kms), hiking, gym workouts, pilates, team sports, and many other activities.

How long is my activity valid?

Activities completed within the last 7 days are eligible.

How many rewards can I redeem?

One reward per activity per day. Some partner rewards may have expiry dates or limited availability.

Terms and conditions will be shown before redemption.

Does papaya have an app?

papaya is currently web-based. For quicker access to your rewards, add the papaya rewards page to your phone's Home Screen — just like an app.

Watch this short video for instructions
NEW REWARDS PARTNER

EFFAE rewards you for being active.

Your movement is now worth even more. Discover two ways to unlock EFFAE credit!

$25EFFAE CREDITEvery 5 verified activities

Move more. Unlock $25. Repeat!

  1. Get active! Walk, run, cycle, swim, hit the gym or enjoy your favourite activity.
  2. Visit the papaya rewards page and select the EFFAE $25 Credit reward.
  3. Submit your verified activity and continue unlocking the EFFAE reward until you complete 5 activities.
Keep moving, keep getting rewarded! Unlock another $25 EFFAE credit for every additional 5 verified activities.
Unlock your EFFAE reward →
$50EFFAE CREDITMonthly top Pioneer prize

Be our top Pioneer of the month!

The papaya user who redeems the most rewards during the month wins $50 EFFAE credit.

Every papaya reward counts — from coffee and food to fitness, wellness and more. You don't need to select an EFFAE reward to participate in this competition.

🏆 No extra registration needed! Just keep moving, unlocking and redeeming papaya rewards.
Explore all papaya rewards →
Explore rewards   →

Free to join. No extra competition registration needed.

EFFAE women's activewear collection
MOVE.EARN.ENJOY.
OUR WHY

Physical inactivity contributes
to chronic disease and
poor mental health.

Physical inactivitycontributes to chronic diseaseand poor mental health.

Too many Australians aren’t moving enough — and this is affecting our health, our communities and our future.

THE GREAT NEWS?
Moving more
can make a
difference.

Linked to chronic disease and poor mental health:

Type 2 diabetes
Type 2
diabetes
(20%)
Coronary heart disease
Coronary
heart
disease
(16%)
Dementia
Dementia(12%)
Stroke
Stroke(9%)
Cancer
Cancer(3–17%)(depending on cancer type)
Linked to chronic disease and poor mental health View↓
Type 2 diabetes
20%
Coronary heart disease
16%
Dementia
12%
Stroke
9%
Cancer Depending on cancer type
3–17%

Research shows that even relatively small increases in physical activity can significantly reduce the risk of developing chronic disease and improve our mental health.

Sources: Australian Institute of Health and Welfare (AIHW), 2017; AIHW, 2023.

Because every
move matters.

Each one of us can do something about it.

By moving a little more, you can improve your own health — and inspire your family, friends and those around you to move more too.

And that’s where papaya comes in.

At papaya, we’re not building just another fitness app. We’re building a community that makes being active more rewarding, engaging and enjoyable.

And you are playing an important role in making it happen.

People running outdoors in Perth
A MESSAGE FROM OUR FOUNDER

I’m building a future where healthier choices are easier — and more rewarding.

I’m Carlos, founder of papaya.

As a biomedical scientist, I’ve spent more than 20 years researching diseases like cancer and other chronic illnesses.

Along the way, I also faced my own health challenges and discovered how profoundly regular physical activity transformed my wellbeing.

That journey inspired me to build papaya.

My vision is simple: a future where being active becomes an easier and more rewarding part of everyday life — helping more people live healthier lives and reducing the impact of chronic disease and poor mental health in our communities.

Thank you for supporting papaya during this early validation stage — and for helping us build what comes next.

Let’s build that future together.
Carlos Aya-Bonilla, founder of papaya
Dr Carlos Aya-Bonilla, PhD
Cancer Scientist & Founder, papaya
20+ years in cancer research
LinkedIn →
OUR VILLAGE

Big challenge. A bigger village.

At papaya, we're setting out to help create a future where physical activity reduces the impact of chronic disease and poor mental health.

We're building an ecosystem that brings together individuals, fitness and physical activity organisations, local businesses, community organisations and local governments around one common goal:

healthier, more active communities.

Want to be part of our village and help build a healthier future?

Explore partnership opportunities
Loading our village…
Built together. Moving Perth forward.
(function () { /* GOOGLE SHEET — SAME AS WORKING PARTNERS PAGE */ const CSV_BASE_URL = 'https://docs.google.com/spreadsheets/d/e/2PACX-1vQGzHxb_v4B1chJlPyNoXnD9O5GxhVjr8joinvjEg2habwTuKmL4D56eueEM9hXNZJto3iDxi34TVS4/pub?gid=1624697227&single=true&output=csv'; const CSV_URL = CSV_BASE_URL + '&papaya_partner_refresh=' + Date.now(); const root = document.getElementById('papayaVillageGroups'); if (!root) return; const categoryMap = { 'Local Business Partners': 'Local Business Partners', 'Local Business Partner': 'Local Business Partners', 'Fitness Clubs & Communities': 'Active Communities', 'Fitness Clubs and Communities': 'Active Communities', 'Active Communities': 'Active Communities', 'Organisations & Community Partners': 'Community Organisations', 'Organizations & Community Partners': 'Community Organisations', 'Community Organisations': 'Community Organisations', 'Supporting Organisations': 'Supporting Organisations' }; const categoryOrder = [ 'Local Business Partners', 'Active Communities', 'Community Organisations', 'Supporting Organisations' ]; /* CSV PARSER */ function parseCSV(text) { const rows = []; let row = []; let field = ''; let inQuotes = false; for (let i = 0; i < text.length; i++) { const char = text[i]; const next = text[i + 1]; if (char === '"') { if (inQuotes && next === '"') { field += '"'; i++; } else { inQuotes = !inQuotes; } } else if (char === ',' && !inQuotes) { row.push(field); field = ''; } else if ( (char === '\n' || char === '\r') && !inQuotes ) { if (char === '\r' && next === '\n') i++; row.push(field); field = ''; if (row.some(cell => cell.trim() !== '')) { rows.push(row); } row = []; } else { field += char; } } row.push(field); if (row.some(cell => cell.trim() !== '')) { rows.push(row); } return rows; } function normaliseURL(url) { const value = String(url || '').trim(); if (!value) return ''; if ( value.startsWith('https://') || value.startsWith('http://') ) { return value; } return 'https://' + value; } function normaliseText(value) { return String(value || '') .toLowerCase() .trim() .replace(/\s+/g, ' '); } function normaliseLogoURL(value) { return String(value || '') .trim() .toLowerCase() .split('?')[0]; } function removeDuplicates(items) { const seenNames = new Set(); const seenLogos = new Set(); const unique = []; items.forEach(item => { const nameKey = normaliseText(item.name); const logoKey = normaliseLogoURL(item.logo); if ( (nameKey && seenNames.has(nameKey)) || (logoKey && seenLogos.has(logoKey)) ) { return; } if (nameKey) seenNames.add(nameKey); if (logoKey) seenLogos.add(logoKey); unique.push(item); }); return unique; } /* RENDER PARTNERS */ function renderVillage(data) { root.innerHTML = ''; const groups = {}; data.forEach(item => { const mappedCategory = categoryMap[item.category] || item.category || 'Other Partners'; if (!groups[mappedCategory]) { groups[mappedCategory] = []; } groups[mappedCategory].push(item); }); const orderedCategories = [ ...categoryOrder.filter(category => groups[category]), ...Object.keys(groups).filter( category => !categoryOrder.includes(category) ) ]; orderedCategories.forEach(category => { const section = document.createElement('div'); section.className = 'papaya-village__group'; const heading = document.createElement('h3'); heading.className = 'papaya-village__group-title'; heading.textContent = category; const grid = document.createElement('div'); grid.className = 'papaya-village__logo-grid'; groups[category].forEach(item => { const element = document.createElement( item.website ? 'a' : 'div' ); element.className = 'papaya-village__logo'; if (item.website) { element.href = normaliseURL(item.website); element.target = '_blank'; element.rel = 'noopener noreferrer'; element.setAttribute('aria-label', item.name); element.title = item.name; } function showFallback() { const fallback = document.createElement('span'); fallback.className = 'papaya-village__fallback'; fallback.textContent = item.name; element.appendChild(fallback); } if (item.logo) { const image = document.createElement('img'); image.src = item.logo; image.alt = item.name; image.loading = 'lazy'; image.addEventListener('error', () => { image.remove(); showFallback(); }, { once: true }); element.appendChild(image); } else { showFallback(); } grid.appendChild(element); }); section.appendChild(heading); section.appendChild(grid); root.appendChild(section); }); } /* FETCH SHEET */ fetch(CSV_URL, { cache: 'no-store' }) .then(response => { if (!response.ok) { throw new Error('Unable to load partner data.'); } return response.text(); }) .then(csv => { const rows = parseCSV(csv); if (rows.length < 2) { throw new Error('No partner data found.'); } const headers = rows[0].map(value => value.trim().toLowerCase() ); function columnIndex(name) { return headers.indexOf(name.toLowerCase()); } const orderIndex = columnIndex('Order'); const nameIndex = columnIndex('Name'); const categoryIndex = columnIndex('Category'); const logoIndex = columnIndex('Logo URL'); const websiteIndex = columnIndex('Website URL'); const activeIndex = columnIndex('Active'); /* SAME REQUIRED COLUMNS AS WORKING CODE */ if ( nameIndex === -1 || categoryIndex === -1 || logoIndex === -1 || activeIndex === -1 ) { throw new Error( 'Required spreadsheet columns not found.' ); } let partners = rows .slice(1) .map(row => ({ order: orderIndex >= 0 ? Number(row[orderIndex] || 9999) : 9999, name: String(row[nameIndex] || '').trim(), category: String(row[categoryIndex] || '').trim(), logo: String(row[logoIndex] || '').trim(), /* WEBSITE URL IS OPTIONAL */ website: websiteIndex >= 0 ? String(row[websiteIndex] || '').trim() : '', active: String(row[activeIndex] || '') .trim() .toLowerCase() })) .filter(item => item.name && ( item.active === 'true' || item.active === 'yes' || item.active === '1' ) ) .sort((a, b) => a.order - b.order); partners = removeDuplicates(partners); if (partners.length === 0) { throw new Error('No active partners found.'); } renderVillage(partners); }) .catch(error => { console.error('papaya Our Village:', error); root.innerHTML = '
' + 'Our partner network is growing. ' + 'Please check back shortly.' + '
'; }); })();
(function () { var SHEET = 'https://docs.google.com/spreadsheets/d/e/2PACX-1vQGzHxb_v4B1chJlPyNoXnD9O5GxhVjr8joinvjEg2habwTuKmL4D56eueEM9hXNZJto3iDxi34TVS4/pub?gid=1607702540&single=true&output=csv'; var track = document.getElementById('paTrack'); var viewport = document.getElementById('paViewport'); var prev = document.getElementById('paPrev'); var next = document.getElementById('paNext'); var counter = document.getElementById('paCounter'); var dotsBox = document.getElementById('paDots'); if (!track || !viewport) return; var slides = []; var dots = []; var current = 0; var timer = null; var startX = 0; var endX = 0; /* ================================ CSV PARSER ================================ */ function parseCSV(text) { var rows = []; var row = []; var cell = ''; var quoted = false; for (var i = 0; i < text.length; i++) { var c = text[i]; if (c === '"') { if (quoted && text[i + 1] === '"') { cell += '"'; i++; } else { quoted = !quoted; } } else if (c === ',' && !quoted) { row.push(cell); cell = ''; } else if ( (c === '\n' || c === '\r') && !quoted ) { if ( c === '\r' && text[i + 1] === '\n' ) { i++; } row.push(cell); cell = ''; if (row.join('').trim()) { rows.push(row); } row = []; } else { cell += c; } } row.push(cell); if (row.join('').trim()) { rows.push(row); } return rows; } /* ================================ CLOUDINARY URL ================================ */ function optimiseImage(url) { if ( url.indexOf('res.cloudinary.com') !== -1 && url.indexOf('/upload/') !== -1 && url.indexOf('/upload/f_auto') === -1 ) { return url.replace( '/upload/', '/upload/f_auto,q_auto/' ); } return url; } /* ================================ MOVE CAROUSEL ================================ */ function goTo(index) { if (!slides.length) return; if (index < 0) { index = slides.length - 1; } if (index >= slides.length) { index = 0; } current = index; var slide = slides[current]; var position = slide.offsetLeft - (viewport.clientWidth - slide.offsetWidth) / 2; track.style.transform = 'translate3d(' + (-position) + 'px,0,0)'; slides.forEach(function (item, i) { item.classList.toggle( 'active', i === current ); }); dots.forEach(function (item, i) { item.classList.toggle( 'active', i === current ); }); if (counter) { counter.textContent = String(current + 1).padStart(2, '0') + ' / ' + String(slides.length).padStart(2, '0'); } } /* ================================ AUTOPLAY ================================ */ function stopAuto() { if (timer) { clearInterval(timer); timer = null; } } function startAuto() { stopAuto(); if (slides.length < 2) return; if ( window.matchMedia && window.matchMedia( '(prefers-reduced-motion: reduce)' ).matches ) { return; } timer = setInterval(function () { goTo(current + 1); }, 5500); } /* ================================ RENDER ================================ */ function render(photos) { track.innerHTML = ''; dotsBox.innerHTML = ''; photos.forEach(function (photo, index) { var slide = document.createElement('div'); slide.className = 'pa-slide'; var wrapper = document.createElement('div'); wrapper.className = 'pa-photo'; var img = document.createElement('img'); img.src = optimiseImage(photo.url); img.alt = 'papaya community in action'; img.draggable = false; img.loading = index < 2 ? 'eager' : 'lazy'; wrapper.appendChild(img); slide.appendChild(wrapper); track.appendChild(slide); var dot = document.createElement('button'); dot.type = 'button'; dot.className = 'pa-dot'; dot.setAttribute( 'aria-label', 'View photo ' + (index + 1) ); dot.addEventListener( 'click', function () { stopAuto(); goTo(index); } ); dotsBox.appendChild(dot); }); slides = Array.from( track.querySelectorAll('.pa-slide') ); dots = Array.from( dotsBox.querySelectorAll('.pa-dot') ); setTimeout(function () { goTo(0); startAuto(); }, 150); } /* ================================ ARROWS ================================ */ if (prev) { prev.addEventListener( 'click', function () { stopAuto(); goTo(current - 1); } ); } if (next) { next.addEventListener( 'click', function () { stopAuto(); goTo(current + 1); } ); } /* ================================ SWIPE ================================ */ viewport.addEventListener( 'pointerdown', function (e) { startX = e.clientX; endX = e.clientX; } ); viewport.addEventListener( 'pointermove', function (e) { endX = e.clientX; } ); viewport.addEventListener( 'pointerup', function () { var distance = endX - startX; if (Math.abs(distance) < 45) { return; } stopAuto(); if (distance < 0) { goTo(current + 1); } else { goTo(current - 1); } } ); /* ================================ KEYBOARD ================================ */ viewport.addEventListener( 'keydown', function (e) { if (e.key === 'ArrowRight') { stopAuto(); goTo(current + 1); } if (e.key === 'ArrowLeft') { stopAuto(); goTo(current - 1); } } ); /* ================================ RESIZE ================================ */ var resizeTimer; window.addEventListener( 'resize', function () { clearTimeout(resizeTimer); resizeTimer = setTimeout(function () { if (slides.length) { goTo(current); } }, 150); } ); /* ================================ LOAD GOOGLE SHEET ================================ */ fetch( SHEET + '&_=' + Date.now(), { cache: 'no-store' } ) .then(function (response) { if (!response.ok) { throw new Error( 'Sheet could not be loaded' ); } return response.text(); }) .then(function (text) { var rows = parseCSV(text); if (rows.length < 2) { throw new Error( 'No gallery data found' ); } var headers = rows[0].map(function (value) { return String(value) .trim() .toLowerCase(); }); var orderCol = headers.indexOf('order'); var urlCol = headers.indexOf('photo url'); var activeCol = headers.indexOf('active'); if (urlCol === -1) { throw new Error( 'Photo URL column missing' ); } var photos = []; for ( var i = 1; i < rows.length; i++ ) { var row = rows[i]; var url = String( row[urlCol] || '' ).trim(); if (!url) continue; var active = true; if (activeCol !== -1) { var value = String( row[activeCol] || '' ) .trim() .toLowerCase(); active = value === 'true' || value === 'yes' || value === '1'; } if (!active) continue; var order = i; if ( orderCol !== -1 && row[orderCol] ) { var parsed = Number(row[orderCol]); if (!isNaN(parsed)) { order = parsed; } } photos.push({ order: order, url: url }); } photos.sort(function (a, b) { return a.order - b.order; }); if (!photos.length) { throw new Error( 'No active photos found' ); } render(photos); }) .catch(function (error) { console.error( 'papaya gallery:', error ); track.innerHTML = '
' + 'Our latest moves are on the way.' + '
'; if (prev) { prev.style.display = 'none'; } if (next) { next.style.display = 'none'; } }); })();

Follow our journey as we build a healthier, more active Perth

Discover new rewards, local partners and community updates

Let's build a healthier community together.

Questions, ideas or feedback?

We'd love to hear from you:

papapa Health Technologies Pty Ltd.
ABN No. 52 698 473 648
All rights reserved.

Unlock your reward

Completed an activity? Choose your reward below.

EFFAE
$25 EFFAE CREDIT FOR COMPLETING 5 ACTIVITIES

EFFAE

Stay active. Unlock your style.

MicroLote.coffee
10% OFF OF YOUR ONLINE ORDER

MicroLote.coffee

Keep moving. Take great cafe to your home.

3D Measure Me
FREE FIRST MONTH - 3D MEASURE ME APP

3D Measure Me

Move. Measure. Make your progress visible.

Hydrate the People
20% OFF OF YOUR ONLINE ORDER

Hydrate the People

Give your best. Hydrate. Repeat

Add papaya to your home screen

Claim your reward

Submit your activity below to unlock your chosen reward.

var d=document,w="https://tally.so/widgets/embed.js",v=function(){"undefined"!=typeof Tally?Tally.loadEmbeds():d.querySelectorAll("iframe[data-tally-src]:not([src])").forEach((function(e){e.src=e.dataset.tallySrc}))};if("undefined"!=typeof Tally)v();else if(d.querySelector('script[src="'+w+'"]')==null){var s=d.createElement("script");s.src=w,s.onload=v,s.onerror=v,d.body.appendChild(s);}
EXPLORE
(function () { const root = document.querySelector('.ppnav-root'); if (!root) return; const toggle = root.querySelector('.ppnav-mobile-toggle'); const menu = root.querySelector('.ppnav-items'); const mobileText = root.querySelector('.ppnav-mobile-text'); const buttons = root.querySelectorAll('[data-scroll]'); function closeMenu() { menu.classList.remove('ppnav-open'); toggle.setAttribute( 'aria-expanded', 'false' ); } toggle.addEventListener( 'click', function () { const open = menu.classList.toggle( 'ppnav-open' ); toggle.setAttribute( 'aria-expanded', open ? 'true' : 'false' ); } ); buttons.forEach(function (button) { button.addEventListener( 'click', function () { const id = button.getAttribute( 'data-scroll' ); const target = document.getElementById(id); if (!target) { console.log( 'Section not found:', id ); return; } const offset = 90; const y = target .getBoundingClientRect() .top + window.scrollY - offset; window.scrollTo({ top: y, behavior: 'smooth' }); if (mobileText) { mobileText.textContent = button.textContent.trim(); } closeMenu(); } ); }); document.addEventListener( 'click', function (event) { if ( !root.contains(event.target) ) { closeMenu(); } } ); document.addEventListener( 'keydown', function (event) { if ( event.key === 'Escape' ) { closeMenu(); } } ); })();
FOR LOCAL BUSINESSES

Business
with a Purpose

Moving people more.
Growing local businesses.
Building healthier communities.

Turn physical activity into local rewards that bring new customers through your door.

Become a local partner

Movement, rewards and local business — in action at Teddy & Co.

OUR VISION

A healthier,
thriving tomorrow.

A future where local businesses grow by helping build healthier, more active communities.

When people move more, they improve their health.

When businesses reward that movement, they create meaningful customer relationships.

Together, communities thrive.

FOR LOCAL BUSINESSES

papaya creates value beyond the reward

Turn active people into new customers.

Reach active people beyond your usual customer base and bring new audiences through your door.

01/ 04
(function () { const cards = Array.from(document.querySelectorAll('.papaya-benefit')); const image = document.getElementById('papayaImage'); const headline = document.getElementById('papayaHeadline'); const summary = document.getElementById('papayaSummary'); const counter = document.getElementById('papayaCurrent'); const previous = document.getElementById('papayaPrev'); const next = document.getElementById('papayaNext'); let currentIndex = 0; function activateCard(index) { if (index < 0) { index = cards.length - 1; } if (index >= cards.length) { index = 0; } const card = cards[index]; currentIndex = index; cards.forEach(item => { item.classList.remove('active'); }); card.classList.add('active'); image.classList.remove('active-zoom'); image.classList.add('changing'); headline.style.opacity = '0'; headline.style.transform = 'translateY(7px)'; summary.style.opacity = '0'; summary.style.transform = 'translateY(7px)'; const preload = new Image(); preload.src = card.dataset.image; setTimeout(() => { image.style.backgroundImage = `url("${card.dataset.image}")`; headline.textContent = card.dataset.headline; summary.textContent = card.dataset.summary; counter.textContent = card.dataset.number; image.classList.remove('changing'); requestAnimationFrame(() => { requestAnimationFrame(() => { image.classList.add('active-zoom'); }); }); headline.style.opacity = '1'; headline.style.transform = 'translateY(0)'; summary.style.opacity = '1'; summary.style.transform = 'translateY(0)'; }, 220); } /* ========================= CARD CLICKS ========================= */ cards.forEach((card, index) => { card.addEventListener('click', () => { activateCard(index); }); }); /* ========================= IMAGE ARROWS ========================= */ previous.addEventListener('click', () => { activateCard(currentIndex - 1); }); next.addEventListener('click', () => { activateCard(currentIndex + 1); }); /* ========================= KEYBOARD SUPPORT ========================= */ document.addEventListener('keydown', event => { if (event.key === 'ArrowLeft') { activateCard(currentIndex - 1); } if (event.key === 'ArrowRight') { activateCard(currentIndex + 1); } }); /* ========================= PRELOAD ========================= */ cards.forEach(card => { const preload = new Image(); preload.src = card.dataset.image; }); })();
WHY THIS MATTERS

Physical inactivity contributes
to chronic disease and
poor mental health.

Physical inactivitycontributes to chronic diseaseand poor mental health.

Too many Australians aren’t moving enough — and this is affecting our health, our communities and our future.

Local businesses
are part of the solution.

Linked to chronic disease and poor mental health:

Type 2 diabetes
Type 2
diabetes
(20%)
Coronary heart disease
Coronary heart
disease
(16%)
Dementia
Dementia(12%)
Stroke
Stroke(9%)
Cancer
Cancer(3–17%)(depending on cancer type)
Linked to chronic disease and poor mental health View↓
Type 2 diabetes
20%
Coronary heart disease
16%
Dementia
12%
Stroke
9%
Cancer Depending on cancer type
3–17%

At papaya, we believe local businesses are part of the solution.

By rewarding movement, businesses can attract new customers, increase revenue opportunities and help build healthier, more active communities.

Healthier communities.
Thriving local economy.
HOW PAPAYA WORKS

From movement to your business

Turning active people into visits, spend and stronger relationships.

1

Active people move

Users complete a verified physical activity.

2

Unlock your reward

They unlock a reward from your business through papaya.

View rewards →

*Rewards are provided by each participating business partner.

3

Visit and spend

They redeem the reward and often purchase beyond it.

4

Return and connect

A first visit can become a stronger customer relationship.

1 Active people move ↓

Users complete a verified physical activity.

2 Unlock your reward ↓

They unlock a reward from your business through papaya.

View rewards →

*Rewards are provided by each participating business partner.

3 Visit and spend ↓

They redeem the reward and often purchase beyond it.

4 Return and connect ↓

A first visit can become a stronger customer relationship.

REAL IMPACT: WHAT WE’RE SEEING SO FAR
EARLY PILOT RESULTS

Early results. Real business value.

Our early live pilots in Perth are showing how rewarding movement can create measurable value for local businesses.

Early pilot results: Metrics are based on papaya redemption data and participant surveys from two live pilots: phase I (Dec 2025) and phase II (May 2026–ongoing).

(function () { const statsSection = document.querySelector('.papaya-stats'); if (!statsSection) return; const cards = Array.from( statsSection.querySelectorAll('.papaya-stat-card') ); /* ONLY BEHAVES AS ACCORDION ON MOBILE */ function isMobile() { return window.matchMedia('(max-width: 520px)').matches; } function closeAllCards(exceptCard) { cards.forEach(card => { if (card !== exceptCard) { card.classList.remove('is-open'); card.setAttribute( 'aria-expanded', 'false' ); } }); } function toggleCard(card) { if (!isMobile()) return; const isOpen = card.classList.contains('is-open'); closeAllCards(card); if (isOpen) { card.classList.remove('is-open'); card.setAttribute( 'aria-expanded', 'false' ); } else { card.classList.add('is-open'); card.setAttribute( 'aria-expanded', 'true' ); } } cards.forEach(card => { card.addEventListener('click', () => { toggleCard(card); }); card.addEventListener('keydown', event => { if ( event.key === 'Enter' || event.key === ' ' ) { event.preventDefault(); toggleCard(card); } }); }); /* RESET IF SCREEN RETURNS TO DESKTOP */ window.addEventListener('resize', () => { if (!isMobile()) { cards.forEach(card => { card.classList.remove('is-open'); card.setAttribute( 'aria-expanded', 'false' ); }); } }); })();
BECOME A LOCAL PARTNER

Join papaya.Help build a more active, healthier Perth.

Partner with us to reward movement and grow your impact.

Help us shape papaya.

Become a local partner

No fees or commissions at this stage.

Local business supporting an active community in Perth
OUR VILLAGE

Big challenge. A bigger village.

Creating a healthier, more active Perth takes more than one organisation.

We’re bringing together local businesses, active communities, community organisations and supporting partners who share a common goal: helping more people move.

Loading our village…
Built together. Moving Perth forward.
(function () { /* ========================= GOOGLE SHEET ========================= */ const CSV_BASE_URL = 'https://docs.google.com/spreadsheets/d/e/2PACX-1vQGzHxb_v4B1chJlPyNoXnD9O5GxhVjr8joinvjEg2habwTuKmL4D56eueEM9hXNZJto3iDxi34TVS4/pub?gid=1624697227&single=true&output=csv'; const CSV_URL = CSV_BASE_URL + '&papaya_partner_refresh=' + Date.now(); const root = document.getElementById( 'papayaPartnerVillageGroups' ); if (!root) return; /* ========================= CATEGORY NAMES ========================= */ const categoryMap = { 'Local Business Partners': 'Local Business Partners', 'Local Business Partner': 'Local Business Partners', 'Fitness Clubs & Communities': 'Active Communities', 'Fitness Clubs and Communities': 'Active Communities', 'Active Communities': 'Active Communities', 'Organisations & Community Partners': 'Community Organisations', 'Organizations & Community Partners': 'Community Organisations', 'Community Organisations': 'Community Organisations', 'Supporting Organisations': 'Supporting Organisations' }; const categoryOrder = [ 'Local Business Partners', 'Active Communities', 'Community Organisations', 'Supporting Organisations' ]; /* ========================= CSV PARSER ========================= */ function parseCSV(text) { const rows = []; let row = []; let field = ''; let inQuotes = false; for ( let i = 0; i < text.length; i++ ) { const char = text[i]; const next = text[i + 1]; if (char === '"') { if ( inQuotes && next === '"' ) { field += '"'; i++; } else { inQuotes = !inQuotes; } } else if ( char === ',' && !inQuotes ) { row.push(field); field = ''; } else if ( ( char === '\n' || char === '\r' ) && !inQuotes ) { if ( char === '\r' && next === '\n' ) { i++; } row.push(field); field = ''; if ( row.some( cell => cell.trim() !== '' ) ) { rows.push(row); } row = []; } else { field += char; } } row.push(field); if ( row.some( cell => cell.trim() !== '' ) ) { rows.push(row); } return rows; } /* ========================= NORMALISE URL ========================= */ function normaliseURL(url) { const value = String(url || '') .trim(); if (!value) return ''; if ( value.startsWith('https://') || value.startsWith('http://') ) { return value; } return 'https://' + value; } /* ========================= NORMALISE TEXT ========================= */ function normaliseText(value) { return String(value || '') .toLowerCase() .trim() .replace(/\s+/g, ' '); } /* ========================= NORMALISE LOGO URL ========================= */ function normaliseLogoURL(value) { return String(value || '') .trim() .toLowerCase() .split('?')[0]; } /* ========================= REMOVE DUPLICATES ========================= */ function removeDuplicates(items) { const seenNames = new Set(); const seenLogos = new Set(); const unique = []; items.forEach(item => { const nameKey = normaliseText(item.name); const logoKey = normaliseLogoURL(item.logo); const duplicateName = nameKey && seenNames.has(nameKey); const duplicateLogo = logoKey && seenLogos.has(logoKey); if ( duplicateName || duplicateLogo ) { return; } if (nameKey) { seenNames.add(nameKey); } if (logoKey) { seenLogos.add(logoKey); } unique.push(item); }); return unique; } /* ========================= RENDER ========================= */ function renderVillage(data) { root.innerHTML = ''; const groups = {}; data.forEach(item => { const mappedCategory = categoryMap[item.category] || item.category || 'Other Partners'; if ( !groups[mappedCategory] ) { groups[mappedCategory] = []; } groups[mappedCategory] .push(item); }); const orderedCategories = [ ...categoryOrder.filter( category => groups[category] ), ...Object.keys(groups) .filter( category => !categoryOrder.includes( category ) ) ]; orderedCategories.forEach( category => { const section = document.createElement( 'div' ); section.className = 'papaya-partner-village__group'; const heading = document.createElement( 'h3' ); heading.className = 'papaya-partner-village__group-title'; heading.textContent = category; const grid = document.createElement( 'div' ); grid.className = 'papaya-partner-village__logo-grid'; groups[category] .forEach(item => { const element = document.createElement( item.website ? 'a' : 'div' ); element.className = 'papaya-partner-village__logo'; if (item.website) { element.href = normaliseURL( item.website ); element.target = '_blank'; element.rel = 'noopener noreferrer'; element.setAttribute( 'aria-label', item.name ); element.title = item.name; } if (item.logo) { const image = document.createElement( 'img' ); image.src = item.logo; image.alt = item.name; image.loading = 'lazy'; image.addEventListener( 'error', () => { image.remove(); const fallback = document.createElement( 'span' ); fallback.className = 'papaya-partner-village__fallback'; fallback.textContent = item.name; element.appendChild( fallback ); }, { once: true } ); element.appendChild( image ); } else { const fallback = document.createElement( 'span' ); fallback.className = 'papaya-partner-village__fallback'; fallback.textContent = item.name; element.appendChild( fallback ); } grid.appendChild( element ); }); section.appendChild( heading ); section.appendChild( grid ); root.appendChild( section ); }); } /* ========================= FETCH SHEET ========================= */ fetch( CSV_URL, { cache: 'no-store' } ) .then(response => { if (!response.ok) { throw new Error( 'Unable to load partner data.' ); } return response.text(); }) .then(csv => { const rows = parseCSV(csv); if ( rows.length < 2 ) { throw new Error( 'No partner data found.' ); } const headers = rows[0].map( value => value .trim() .toLowerCase() ); function columnIndex(name) { return headers.indexOf( name.toLowerCase() ); } const orderIndex = columnIndex('Order'); const nameIndex = columnIndex('Name'); const categoryIndex = columnIndex('Category'); const logoIndex = columnIndex('Logo URL'); const websiteIndex = columnIndex('Website URL'); const activeIndex = columnIndex('Active'); if ( nameIndex === -1 || categoryIndex === -1 || logoIndex === -1 || activeIndex === -1 ) { throw new Error( 'Required spreadsheet columns not found.' ); } let partners = rows .slice(1) .map(row => ({ order: orderIndex >= 0 ? Number( row[orderIndex] || 9999 ) : 9999, name: String( row[nameIndex] || '' ) .trim(), category: String( row[categoryIndex] || '' ) .trim(), logo: String( row[logoIndex] || '' ) .trim(), website: websiteIndex >= 0 ? String( row[websiteIndex] || '' ) .trim() : '', active: String( row[activeIndex] || '' ) .trim() .toLowerCase() })) .filter(item => { return ( item.name && ( item.active === 'true' || item.active === 'yes' || item.active === '1' ) ); }) .sort( (a, b) => a.order - b.order ); partners = removeDuplicates( partners ); if ( partners.length === 0 ) { throw new Error( 'No active partners found.' ); } renderVillage( partners ); }) .catch(error => { console.error( 'papaya Partner Village:', error ); root.innerHTML = `
Our partner network is growing.
Please check back shortly.
`; }); })();