Appearance
Epic 19 — Producer Folders (Save for Later)
Producers save and organise talent profiles into named folders. Referenced in spec "AFTER THOUGHTS #5".
BE-FOLDERS-001 — Producer folders model and API
- [x] Done
Files:
- Edit:
prisma/schema.prisma— addProducerFolder,FolderEntrymodels - Run:
pnpm db:migrate - Edit:
src/graphql/schema/index.ts - Create:
src/graphql/resolvers/folders.ts - Create:
src/services/folders/index.ts
Schema:
prisma
model ProducerFolder {
id String @id @default(cuid())
producerId String
producer ProducerProfile @relation(...)
name String
entries FolderEntry[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("producer_folders")
}
model FolderEntry {
id String @id @default(cuid())
folderId String
folder ProducerFolder @relation(...)
talentId String
talent TalentProfile @relation(...)
note String? // e.g. "good energy", "needs improv skills"
tags String[] @default([])
addedAt DateTime @default(now())
@@unique([folderId, talentId])
@@map("folder_entries")
}Mutations: createFolder(name), renameFolder(id, name), deleteFolder(id), addTalentToFolder(folderId, talentId, note?), removeTalentFromFolder(folderId, talentId), updateFolderEntry(entryId, note?, tags?)
Queries: myFolders: [ProducerFolder!]!, folderEntries(folderId: ID!): [FolderEntry!]!
FE-FOLDERS-001 — Producer folders UI
- [x] Done
Files:
- Create:
apps/app/src/pages/folders/FoldersPage.tsx - Create:
apps/app/src/pages/folders/FolderDetailPage.tsx - Create:
apps/app/src/components/folders/SaveToFolderButton.tsx— appears on every TalentCard/profile - Create:
apps/app/src/hooks/useFolders.ts - Edit:
apps/app/src/App.tsx— add/foldersand/folders/:idroutes
Description:
- Folders list: grid of folder cards (name, talent count, last updated). "New folder" CTA.
- Folder detail: talent grid with note/tag chips per entry. "Export" button (opens ExportPitchModal from Epic 18). "Remove" per entry.
- Save button: ⭐ icon on every
TalentCardand talent profile page. Tap → dropdown shows existing folders + "New folder" option. Saved state persists (filled star). - Cross-device sync via the
ProducerFolderbackend model.