Carus
Visit WebsiteSTACK
Next JS, TypeScript, Tailwind CSS, TanStack Query, Sentry
TYPE
GreenTech Sustainability Platform
STATUS
Completed


Carus is a waste management and recycling rewards platform that incentivizes environmentally responsible behaviour by turning waste disposal into a rewarding experience. I worked across both the frontend and backend of this project, building the client-facing application, the admin panel, and contributing to the backend API. On the client side, users can schedule waste pickups across multiple categories (plastics, electronics, organics), track their recycling history, and earn reward points redeemable for gift cards, airtime, or cash. The admin panel gives the Carus operations team full visibility over pickup requests, user accounts, partner businesses, and reward redemptions. The frontend is built with TanStack Query for efficient server-state management and synchronization, custom middleware for route protection, React Context for global state, and Sentry for production error tracking.
GOALS
Carus gave me genuine full-stack exposure on a live product, from designing UI components to writing backend API logic. Working with TanStack Query at production scale sharpened my understanding of server-state management, and integrating Sentry revealed how much value real-time error visibility adds to a live app. More broadly, this project deepened my understanding of how to architect platforms that coordinate multiple actors, users, partners, and administrators, each with different data needs and permission levels.


CHALLENGES
The most complex challenge was keeping the reward system consistent across client and server state. Pickup confirmations from the backend needed to immediately reflect in a user's reward balance and history, with TanStack Query cache invalidation strategies that didn't leave users seeing stale data after a status change. Managing the admin panel's data across multiple interconnected business entities (users, pickups, rewards, partners) also required careful query organization to avoid redundant API calls and maintain performance as the dataset grew.

