A multi-tenant task management SaaS for franchise businesses. Currently in production pilot at a Walker's Doughnuts franchise on an isolated Supabase instance.
Franchise businesses — especially food franchises like donut shops — struggle with consistency, knowledge sharing, and task execution across locations. Task planning relies on paper checklists and group chats. Recipes are scattered on 50+ sheets of paper. Training depends on whoever happens to be available.
I worked at a donut franchise that started as a top 5 location out of 30 and dropped to bottom 2 within two years. Workers were thrown in without training. 12-hour shifts with unfair task distribution led to burnout. Managers blamed workers for problems caused by a lack of structure.
The problems weren't the people — it was the system. FriendChise is the tool I wish existed.
A web app where franchise owners define task libraries and timetable templates at the franchise level, managers apply those templates to generate weekly schedules for their branch, and workers view their assigned tasks on any device.
Everything is scoped by organization with role-based permissions. Parent brands define defaults; child franchisees inherit and customize. An invite system handles onboarding, and a notification panel keeps everyone informed.
App Router, React 19, Server Actions
End-to-end type safety
Hosted on Supabase
Type-safe ORM & migrations
Google OAuth + JWT
shadcn/ui + Radix UI
Runtime validation
Production deployment
Started from a real problem I lived through. 7 personas, 34 user stories, 36 MoSCoW-prioritized features, and 9 user flows defined before writing code.
Hierarchical multi-tenant architecture (Brand → Franchisee). Two-layer timetable system. Min/max frequency constraints. Documented tradeoffs.
Next.js 16 App Router with RSC, Server Actions, and REST API. Discriminated union result types for clean error handling. End-to-end type safety with Zod.
OAuth + JWT sessions, Edge runtime compatibility, org-scoped permission checks on every route. Full RBAC — not just “admin vs user.”