Skip to content
Tim Borja
Apps

Pabili

A pretend shopping app with the features people love about Shopee and Lazada

Timothy Maersk M. Borja

screens
37
screens
platforms, one codebase
3
platforms, one codebase
unit tests
25
unit tests
Platforms
iOS · Android · Web
Since
2026
Shopping

Preview

Pabili: Home with deals and games
Home with deals and games
Pabili: Live selling
Live selling
Pabili: Slash It
Slash It
Pabili: Spin and win coins
Spin and win coins
Pabili: Monthly Wrapped
Monthly Wrapped

A complete shopping app (browse, cart, vouchers, checkout, order tracking) plus the games and social features that keep people coming back. Everything is pretend; no real payments are taken.

Why build it

Shopee and Lazada are some of the most-used apps in the Philippines, and much of what makes them work isn’t the shopping. It’s the coins, the flash deals and the games. Pabili is a study of those patterns: how much product and UI work goes into an app that people open every day.

What I built

A shopping app with real depth:

  • Shopping: home feed, categories, search, product pages, shops, cart, vouchers, address book, checkout and order tracking through to unboxing and rating.
  • Engagement: daily coin check-in, spin the wheel, Slash It (invite friends to cut a price), group buys, mega sales, a virtual garden and a shake-to-win game.
  • Social: chat with sellers, a feed, following shops, likes and a yearly “Wrapped” recap.
  • Polish: dark mode, Filipino/English, haptics and sounds, notifications for parcel arrivals and restocks, and an installable web app.

How it works

Pabili is one Expo / React Native codebase that runs on the web, Android and iOS. Navigation uses Expo Router, and state lives in a Zustand store saved on the device. Nothing ships and nothing is charged.

  • Promotion math as pure functions. Checkout groups lines by shop, then applies bundle discounts, shop vouchers, shipping fees and free-shipping gaps, the platform voucher and coins in a fixed order. It’s plain TypeScript, so 19 Vitest cases cover the money paths.
  • A notification feed derived from state. One function builds the feed from orders, cart, restock alerts, group buys and check-ins, and schedules local phone notifications that deep-link to the right screen.
  • Expo web on Cloudflare Pages. Wrangler never uploads folders named node_modules, so the icon fonts Expo exports there returned 404 and every icon broke. The release script moves them and rewrites the bundle paths before deploying.

The web build is deployed to Cloudflare Pages. EAS build profiles are set up for an installable Android APK and store builds.

Try it

The app is live. Use it in the phone frame on this page, or open pabili.pages.dev on your phone and add it to your home screen.