Card sorting workshops where the team writes the cards.
A facilitated, async tool for content architecture. Participants don't just sort a list someone else wrote. They help build it. Admins drive the group through gated phases on the team's own schedule, and the workshop ends with a validated content map ready for stakeholders.
Traditional card sorting tools are great at the mechanics (drag, drop, generate a dendrogram), but they treat the participant as a sorter. You learn the most from a team not by watching them sort a fixed list, but by seeing what they think belongs on it at all, and which items they argue over.
CatAgree is built around that.
- Participants contribute, they don't just sort. Cards and categories come from the team. Surface and converge on a shared vocabulary instead of testing one you've already written.
- Async and phased by default. Four gated phases run at the team's pace. No calendar Tetris. No ninety-minute Zoom marathons.
- The admin is a facilitator, not an observer. A dedicated cockpit gives the admin explicit control over when each phase opens and closes, because real workshops have a facilitator for a reason.
- The output is a deliverable. Workshops end with an exportable content map ready for stakeholders, not a CSV of co-occurrence scores you still have to interpret.
A CatAgree session moves through four gated phases. Each phase opens, collects input, and closes, either on a deadline you set or when you decide the group is ready to advance.
A workshop in CatAgree is a long-running thing, measured in days or weeks rather than minutes. The dashboard is built around which session needs me right now, not a feed of every participant action.
Once a workshop is in flight, the cockpit surfaces the current phase, who has contributed, what's still outstanding, and a single primary action, usually "close this phase and advance the group."
CatAgree is being built in the open. Authentication, the dashboard shell, and the workshop cockpit are in place; participant-facing flows and export are next. Read the first-look post for the longer story behind the project.
- Next.js 16 (App Router, React 19)
- Convex for the backend, database, and real-time sync
- Convex Auth for authentication
- Tailwind CSS v4 with Radix primitives
- TypeScript, ESLint, pnpm
Prerequisites: Node 20+, pnpm, and a Convex account.
pnpm install
npx convex dev # provisions a Convex deployment and writes env vars
pnpm dev # starts Next.js on http://localhost:3000On first run, npx convex dev walks you through linking a Convex project and populates .env.local with CONVEX_DEPLOYMENT and NEXT_PUBLIC_CONVEX_URL. Keep it running in a second terminal alongside pnpm dev so schema and function changes hot-reload.
| Command | Description |
|---|---|
pnpm dev |
Run the Next.js dev server |
pnpm build |
Deploy Convex functions and build the Next.js app |
pnpm start |
Start the production server |
pnpm lint |
Run ESLint |
app/ Next.js App Router routes
(auth)/ Sign-in and sign-up
(protected)/ Authenticated routes (dashboard, workshops)
api/auth/ Convex Auth route handler
components/ UI primitives and feature components
convex/ Schema, queries, mutations, auth config
lib/ Shared client utilities
middleware.ts Auth-aware route protection
MIT © 2026 Justin Parra. See LICENSE.


