---
slug: tuktu
title: "Tuktu.ca — A Marketplace for In-Home Services"
company: "Tuktu.ca"
role: "Full Stack Developer"
period: "Nov 2019 — Oct 2020"
location: "Remote · Canada"
summary: "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."
tags: ["React", "React Native", "Node.js", "GraphQL", "Redis", "MongoDB", "CI/CD", "OAuth2"]
---

# Tuktu.ca — A Marketplace for In-Home Services

## 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.
