Case Study · Tuktu.ca

Tuktu.ca — A Marketplace for In-Home Services

Helped build a marketplace connecting Canadian families to qualified in-home service providers. Shipped a React Web port of the React Native client, a Node.js GraphQL API with Redis caching, and MongoDB-backed data.

ReactReact NativeNode.jsGraphQLRedisMongoDBCI/CDOAuth2
Web + Android
Platforms supported
Self-serve
Provider onboarding
Redis-backed GraphQL
Query cache

Context

Tuktu.ca is a Canadian marketplace that helps families book trusted service providers — think care, cleaning, and home services — vetted through a structured onboarding process. The product existed as a React Native app and needed a web presence to widen the funnel.

Problem

  • Mobile-only reach — potential customers dropping off when asked to install an app.
  • Duplicate domain logic between a one-off web prototype and the RN app.
  • Slow GraphQL hot paths for provider search and category browsing.
  • Manual deploys to Play Store and hosting.

Approach

1. React Native → React Web

Ported screens from React Native to React Web — reusing domain logic where it was platform-neutral. The web experience matched the app for core flows: search, browse, book, and manage appointments.

2. OAuth2 + GraphQL + Redis

Shipped OAuth2 for secure login across web and mobile. Built a Node.js GraphQL backend that fronted MongoDB, and cached frequently-hit queries (provider listings, service categories, and availability windows) in Redis to keep browse flows snappy.

3. MongoDB for scale

Modeled the core entities — providers, services, bookings, reviews — in MongoDB with an eye on future growth. Kept the schema flexible for the rapid iteration the product demanded.

4. CI/CD + Play Store

Wired CI/CD pipelines for automated builds and deployments, shipped the React Native build to the Google Play Store, and removed the manual coordination that had been slowing releases.

Impact

  • Web + Android from one shared team and one pipeline.
  • Faster browsing thanks to Redis-cached GraphQL.
  • Secure OAuth2 auth across both clients.
  • Smoother release cadence after moving deploys behind CI/CD.

Takeaways

  • React Native → Web is worth the port when mobile-install friction is the top funnel killer.
  • GraphQL gives you a natural caching boundary — lean into it.
  • Owning auth, data, and deploys made iterating on the product the fastest part of the job.