Skip to content

Epic 36 — Talent Applications Dashboard

Built 2026-06-09 (documented retroactively). A talent-facing "My Applications" surface so talents can track the jobs they applied to — status, details, filters — and also see jobs a producer shortlisted them for via talent discovery (even without applying). Job details now shows the talent's real application status, and back-navigation returns to the applications list when arriving from it.

Relationships: [[Epic 5 — Job Board]] (Application model), [[Epic 6 — Discover Feed]] (producer swipeTalentTalentInteraction SHORTLISTED), [[Epic 34 — Unified Talent Portfolio]] (apply picker reads mediaItems).


BE-APPLY-DASH-001 — Unified myApplications feed (applications + producer shortlists)

  • [x] Done

Files:

  • Edit: castyou-backend/src/graphql/schema/index.tsJobActivityItem + JobActivityPage types; myApplications(page, pageSize, status): JobActivityPage!
  • Edit: castyou-backend/src/graphql/resolvers/job.ts — unified resolver
  • Create: castyou-backend/src/__tests__/resolvers/myApplications.test.ts

Description: myApplications returns a paginated, status-filterable feed that merges the talent's real Application rows with jobs a producer shortlisted them for (TalentInteraction type=SHORTLISTED, jobId set) and the talent has not applied to. Each item carries source (APPLICATION | SHORTLIST), hasApplied, and a status (SHORTLISTED for shortlist-only rows). De-dupes jobs present in both (application wins). Merge/sort/filter/paginate in-memory (a talent's combined set is small).

Acceptance criteria:

  • Applications and producer shortlists both appear; shortlist-only rows report SHORTLISTED / hasApplied=false
  • A job both applied-to and shortlisted appears once (as the application)
  • status filter and pagination apply across the merged list
  • Tests cover merge, de-dupe, status filter, pagination

BE-APPLY-DASH-002 — Job.myApplication field resolver

  • [x] Done

Files:

  • Edit: castyou-backend/src/graphql/schema/index.tsJob.myApplication: Application
  • Edit: castyou-backend/src/graphql/resolvers/job.ts — field resolver
  • Edit: castyou-backend/src/__tests__/resolvers/myApplications.test.ts — coverage

Description: Exposes the viewing talent's own application (id + status) for a job, so the job-details page can show real status that survives reload / cold navigation. Returns null for non-talents / not-applied.

Acceptance criteria:

  • Returns the talent's application for the job; null when unauthenticated, no talent profile, or not applied
  • Tested

FE-APPLY-DASH-001 — My Applications page (table + filters)

  • [x] Done

Files:

  • Create: castyou-frontend/apps/app/src/pages/jobs/MyApplicationsPage.tsx
  • Create: castyou-frontend/apps/app/src/hooks/useMyApplications.ts
  • Edit: castyou-frontend/apps/app/src/lib/queries/jobs.tsGET_MY_APPLICATIONS (unified) + myApplication on GET_JOB
  • Edit: castyou-frontend/apps/app/src/lib/queryKeys.ts
  • Edit: castyou-frontend/apps/app/src/App.tsx/applications route
  • Edit: castyou-frontend/apps/app/src/components/AppShell.tsx — TALENT-only "Applications" nav entry
  • Edit: castyou-frontend/packages/i18n/locales/{en,pt,es}/app.jsonapplications.*, nav.applications
  • Create: castyou-frontend/apps/app/src/__tests__/pages/jobs/MyApplicationsPage.test.tsx

Description: DS DataTable (flier thumbnail, job title + production type/location, status Badge, applied date, deadline) with a status Select filter and Pagination. Shortlist-only rows are labelled "Shortlisted by a producer — not yet applied". Row click → job details. All DS components ([[Design System Rule]]); paginated ([[Pagination Rule]]).

Acceptance criteria:

  • Lists applications + producer shortlists; status filter + pagination work
  • Empty/error/loading states; TALENT-only nav entry
  • Tested

FE-APPLY-DASH-002 — Job details: application status + context-aware back

  • [x] Done

Files:

  • Edit: castyou-frontend/apps/app/src/pages/jobs/JobDetailPage.tsx
  • Edit: castyou-frontend/apps/app/src/hooks/useJobs.tsJob.myApplication
  • Edit: castyou-frontend/packages/i18n/locales/{en,pt,es}/app.jsonjobDetail.applicationStatus

Description: When the talent already applied, the detail page shows a color-coded status badge (Pending/Shortlisted/Hired/Rejected) instead of the Apply CTA, hydrated from Job.myApplication (survives reload). The back button returns to /applications when navigated from there (router state.from), else /jobs.

Acceptance criteria:

  • Real application status shown on the detail page (not in-session-only)
  • Back returns to the originating list