Skip to content

Epic 12 — Agency Tier


BE-AGENCY-001 — Agency role & multi-talent management

  • [x] Implemented

Files:

  • Edit: prisma/schema.prisma — add AgencyProfile, AgencyTalentLink
  • Edit: src/graphql/schema/index.ts
  • Create: src/graphql/resolvers/agency.ts
  • Create: src/services/agency/index.ts

Schema:

prisma
model AgencyProfile {
  id          String   @id @default(cuid())
  userId      String   @unique
  user        User     @relation(fields: [userId], references: [id])
  agencyName  String
  plan        AgencyPlan @default(ENTRY)
  talents     AgencyTalentLink[]
  createdAt   DateTime @default(now())
  updatedAt   DateTime @updatedAt
  @@map("agency_profiles")
}
enum AgencyPlan { ENTRY STANDARD PREMIUM }
model AgencyTalentLink {
  id        String   @id @default(cuid())
  agencyId  String
  agency    AgencyProfile @relation(fields: [agencyId], references: [id])
  talentId  String
  talent    TalentProfile @relation(fields: [talentId], references: [id])
  status    String   @default("ACTIVE")
  @@unique([agencyId, talentId])
  @@map("agency_talent_links")
}

Limits per plan: ENTRY → 10 talents, STANDARD → 25, PREMIUM → 75.

Mutations: createAgencyProfile(input), inviteTalentToAgency(talentId), removeTalentFromAgency(talentId), bulkApplyToJob(jobId, talentIds: [ID!]!) (limited to plan count)


FE-AGENCY-001 — Agency dashboard

  • [x] Implemented

Files:

  • Create: apps/app/src/pages/agency/AgencyDashboardPage.tsx
  • Create: apps/app/src/pages/agency/AgencyTalentsPage.tsx
  • Create: apps/app/src/lib/queries/agency.ts
  • Create: apps/app/src/hooks/useAgency.ts
  • Edit: apps/app/src/App.tsx — add agency routes (agency-role guard)

Description: Agency role sees a dashboard with their roster of talents, profile completeness overview, and bulk application tools. Matches "Agency Account" and "Jornada - Talent Agency" frames in Figma.