Appearance
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
swipeTalent→TalentInteractionSHORTLISTED), [[Epic 34 — Unified Talent Portfolio]] (apply picker readsmediaItems).
BE-APPLY-DASH-001 — Unified myApplications feed (applications + producer shortlists)
- [x] Done
Files:
- Edit:
castyou-backend/src/graphql/schema/index.ts—JobActivityItem+JobActivityPagetypes;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)
statusfilter 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.ts—Job.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.ts—GET_MY_APPLICATIONS(unified) +myApplicationonGET_JOB - Edit:
castyou-frontend/apps/app/src/lib/queryKeys.ts - Edit:
castyou-frontend/apps/app/src/App.tsx—/applicationsroute - Edit:
castyou-frontend/apps/app/src/components/AppShell.tsx— TALENT-only "Applications" nav entry - Edit:
castyou-frontend/packages/i18n/locales/{en,pt,es}/app.json—applications.*,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.ts—Job.myApplication - Edit:
castyou-frontend/packages/i18n/locales/{en,pt,es}/app.json—jobDetail.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