
Case study · Creative industries
Creative production platform, four user roles

The brief
Casting a production means chasing individual freelancers across email, Instagram and WhatsApp, then rebuilding the same information in a call sheet. Yash needed to collapse that into one place — and to serve four genuinely different users without becoming four different products.
The hard part
A creative, an agency representing creatives, a client booking them, and an administrator all need different navigation, permissions and data from the same underlying system. Role-based access runs from registration through to what each person can see on a job.
What we built
- Assemble. The feature that defines the product: one brief, one crew. Set the job once, add every role you need, fill each with verified talent, and send a single invitation the whole team sees.
- Talent profiles with a diary. Portfolio, verified badge, credits and a two-month availability calendar, with a booking panel that follows you down the page.
- Browse and filter. Creatives and agencies, filtered by category, location and sort order.
- Private agency rosters. Agencies represent their own creatives and manage them as a group.
- Messaging, bookings and reviews. Direct messages, a booking lifecycle, and reviews tied to completed jobs.
- Admin tooling. User management, category taxonomy and platform oversight.
Testing
The build carries a Playwright end-to-end suite covering the registration and booking journeys for each role, because a four-role permission system is exactly the kind of thing that breaks quietly.
The product

Built with
- Next.js 14
- TypeScript
- Supabase
- PostgreSQL
- Supabase Auth
- Supabase Storage
- Online Payments Platform
- Resend
- Google Cloud Run
- Playwright