2 min read

PawPath is a cross-platform volunteer app for animal shelter staff and volunteers. It is built with Expo, React Native, React Native Web, TypeScript, and Zustand, with one codebase targeting iOS, Android, and web.

The app helps volunteers join a shelter with a simple name and shelter code flow, view shelter grounds and walking routes, track their checklist for the day, and see useful contacts and operational notes. Location sharing is scoped to the shelter boundary, so live volunteer presence only appears when someone is on site and their location is accurate enough.

On the backend, PawPath utilises a Cloudflare-native architecture. A Worker handles assistant requests, content ingestion, anonymous tokens, sheet sync, and emergency push routes, while Durable Objects power realtime shelter rooms. D1, R2, Vectorize, and Workers AI support the handbook and shift-data assistant flow.

What I focused on

  • Designing the app around clear layers: Expo Router screens, shared state, service integrations, pure domain logic, bundled shelter content, and backend Workers.
  • Building map and presence flows that behave across native and web targets without making every screen understand platform differences.
  • Keeping location sharing intentionally constrained to shelter boundaries and permission state.
  • Connecting volunteer-facing help to operational content, including handbook and shift data through a Cloudflare Worker assistant endpoint.

Tech stack

  • Expo, React Native, React Native Web, TypeScript
  • Zustand for app state
  • Firebase Realtime Database and messaging for presence and notifications
  • Cloudflare Workers, Durable Objects, D1, R2, Vectorize, and Workers AI
  • Jest and React Native Testing Library for app and domain tests