Skip to content

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 to ProducerProfile
  • Run: pnpm db:migrate
  • Edit: src/graphql/schema/index.ts — expose on ProducerProfile type and UpdateProducerProfileInput
  • 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, totalHires are incremented in-service after relevant mutations — not computed on query.
  • avgResponseHours is updated when a producer responds to an application (time between applyToJob and updateApplicationStatus).
  • 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; myFavoriteTalents page 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