A kanban board that doubles as a personal project tracker and an organisation workspace. Supabase carries auth, projects, and todos; Cloudinary handles avatars and attachments; TanStack Query keeps the cache honest with optimistic mutations across boards.
Two surfaces, one cache
Users can run TaskSphere in personal mode — projects and todos that belong to them alone — or jump into an organisation where projects, members, and notifications are shared. The same React tree powers both; route boundaries decide which Supabase query keys come along for the ride.
Optimistic by default
Every mutation — add, rename, complete, delete — uses TanStack Query’s onMutate to update the cache before the server has even acknowledged the write. Rollback on failure is automatic; the user never sees a list freeze while waiting on a network round-trip.
Cloudinary for the heavy stuff
Avatars and todo attachments go through Cloudinary instead of straight into Supabase storage. The transform URL handles thumbnails, format negotiation, and CDN edge caching; the React side just renders an img and trusts the URL.