← back to projects
  • #react
  • #typescript
  • #auth0
  • #tailwind
  • #zod

Task Manager (TS + Auth0)

React + TypeScript task app with Auth0 + URL-driven state.

year
2025
status
active
https://task-manager-ts-six.vercel.app
open ↗
loading Task Manager (TS + Auth0)

$ cat ./case-study

$ cat ./case-study/problem

Problem

I wanted a task app I could actually use day-to-day, but more importantly I wanted an excuse to build something with auth, shareable state, and real validation — instead of yet another todo demo with localStorage. The bar: any view I could see, I should be able to share as a URL.

$ cat ./case-study/approach

Approach

React + TypeScript with Auth0 handling the login flow so I did not roll my own auth. All filters, search terms, and sorting live in the URL query string — Context API holds the parsed state but the URL is the source of truth. Refresh keeps you where you were; paste a link and the recipient sees the same filtered view.

$ cat ./case-study/stack

Stack notes

Zod schemas validate every form submit and every URL-state parse, so a malformed query param (e.g. ?status=banana) falls back gracefully instead of crashing the filter. Tailwind handled the entire UI without a single hand-written CSS file.

$ cat ./case-study/what-broke

What broke

The first version round-tripped the full filter state through React state and synced to the URL on every keystroke. Typing in the search box re-pushed history every character — back-button hell. Refactored to debounce URL writes and only parse the URL on mount as initial state.

$ cat ./case-study/next-time

What I'd do differently

I would move task persistence behind a real API instead of in-memory state. The Auth0 + URL-state design is the whole point of the project; adding a backend would let me actually use the app without losing tasks on refresh, which is the obvious next step.

A modern task management app built with React + TypeScript and Auth0 for authentication. Features secure login, task CRUD, filtering, search, and sorting all driven by URL query params so any view is shareable. Uses Context API + zod for validation.

$ share

$ next

API Dashboard

Single-page dashboard of mini apps powered by public APIs.