Appearance
Epic 3 — Producer Profile
BE-PRODUCER-001 — Extend ProducerProfile schema
- [x] Implemented
Files:
- Edit:
prisma/schema.prisma - Edit:
src/graphql/schema/index.ts - Edit:
src/graphql/resolvers/producer.ts
New fields:
prisma
logoUrl String?
portfolioUrls String[] @default([])
socialLinks Json? // { website, linkedin, instagram }
hiringHistory Json? // [{ title, year, talentCount }]
verifiedAt DateTime?FE-PRODUCER-001 — Producer profile page
- [x] Implemented
Files:
- Create:
apps/app/src/pages/producer/ProducerProfilePage.tsx - Create:
apps/app/src/pages/producer/ProducerEditPage.tsx - Create:
apps/app/src/lib/queries/producer.ts - Create:
apps/app/src/hooks/useProducerProfile.ts
Description: Producer profile view with company info, hiring history, and portfolio. Edit form for all fields. Uses DS components throughout.
BE-PRODUCER-002 — ProducerProfile missing spec fields
- [x] Implemented
Files:
- Edit:
prisma/schema.prisma— add columns toProducerProfile - Run:
pnpm db:migrate - Edit:
src/graphql/schema/index.ts— expose onProducerProfiletype andUpdateProducerProfileInput - Edit:
src/graphql/resolvers/producer.ts - Create:
src/__tests__/resolvers/producer-fields.test.ts
Fields to add:
prisma
// Contact
phoneNumber String?
contactEmail String? // separate from login email
imdbUrl String?
// Company
companySize String? // "SOLO" | "SMALL_TEAM" | "LARGE_STUDIO"
// Professional focus
focusProductionTypes Json? // { productionTypes[], subtypes[], genres[] }
notableWorks Json? // [{ title, year, role, platform }]
awards Json? // [{ name, year, category }]
affiliations Json? // { studios[], networks[], productionHouses[] }
// Location & availability
primaryWorkLocation String?
hiringRegions String[] @default([]) // ["LOCAL","NATIONAL","INTERNATIONAL"]
producerAvailability String @default("ACTIVELY_HIRING")
// ACTIVELY_HIRING | OPEN_TO_COLLABORATION | NOT_HIRING
// Platform activity (computed, stored for performance)
totalJobsPosted Int @default(0)
totalHires Int @default(0)
avgResponseHours Float?Favorite Talents:
prisma
model ProducerFavoriteTalent {
id String @id @default(cuid())
producerId String
producer ProducerProfile @relation(fields: [producerId], references: [id], onDelete: Cascade)
talentId String
talent TalentProfile @relation(fields: [talentId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now())
@@unique([producerId, talentId])
@@map("producer_favorite_talents")
}Mutations: favoriteTalent(talentId: ID!): Boolean!, unfavoriteTalent(talentId: ID!): Boolean!
Queries: myFavoriteTalents: [TalentProfile!]!
Notes:
totalJobsPosted,totalHiresare incremented in-service after relevant mutations — not computed on query.avgResponseHoursis updated when a producer responds to an application (time betweenapplyToJobandupdateApplicationStatus).- Platform activity stats (views, hire %) are surfaced on the public producer profile so talent can assess credibility.
FE-PRODUCER-002 — Extend producer profile view & editor for new spec fields
- [x] Implemented
Files:
- Edit:
apps/app/src/pages/producer/ProducerProfilePage.tsx— add sections: Focus, Portfolio/Affiliations, Location & Availability, Platform Activity stats - Edit:
apps/app/src/pages/producer/ProducerEditPage.tsx— add new form fields - Edit:
apps/app/src/lib/queries/producer.ts— add new fields to GET_PRODUCER_PROFILE query - Edit:
apps/app/src/hooks/useProducerProfile.ts
New profile sections (view page):
- Focus: production types, subtypes, genres the producer works in (shown as chips)
- Portfolio & Affiliations: notable works list, awards, studio/network/production house affiliations
- Location & Availability: primary work location, hiring regions, availability status badge (Actively Hiring / Open to Collaboration / Not Hiring)
- Platform Activity: total jobs posted, hire %, average response time, talent reviews/ratings (when implemented)
- Favorite Talents: "heart" icon on talent profile/card visible to producers;
myFavoriteTalentspage accessible from producer profile
New form fields (editor):
- Contact: phone number, contact email, IMDB profile URL
- Company: company size dropdown (Solo / Small Team / Large Studio)
- Focus: MultiSelect for production types, subtypes, genres
- Location: primary work location input, hiring regions MultiSelect
- Availability status: dropdown