task_id: task_create_page_label_invitations entity_id: page_label_invitations generated_at: '2025-12-18T17:43:33.729145' workflow_version: v003 target: type: page definition: id: page_label_invitations name: Label Invitations path: /label/invitations layout: layout_main data_needs: - api_id: api_list_label_invitations purpose: List all invitations on_load: true components: - component_invitation_card - component_invite_artist_modal seo: title: Invitations | Sonic Cloud description: Manage artist invitations auth: required: true roles: - label redirect: /login related: models: [] apis: - id: api_list_label_invitations definition: &id002 id: api_list_label_invitations method: GET path: /api/labels/[id]/invitations summary: List label invitations description: Get all invitations sent by this label tags: - labels - invitations path_params: - name: id type: string description: Label ID query_params: - name: status type: string required: false description: Filter by status (pending, accepted, declined, expired) responses: - status: 200 description: Invitations list schema: type: array properties: - name: id type: uuid - name: artist type: object - name: status type: string - name: message type: string - name: expiresAt type: datetime - status: 401 description: Unauthorized - status: 403 description: Not label owner depends_on_models: - model_label_invitation depends_on_apis: [] auth: required: true roles: - label components: - id: component_invitation_card definition: &id001 id: component_invitation_card name: InvitationCard props: - name: invitation type: LabelInvitation required: true description: Invitation object - name: viewType type: string required: true description: Are we viewing as label or artist (label/artist) events: - name: onAccept payload: string description: Fires when accept clicked (artist view) - name: onDecline payload: string description: Fires when decline clicked (artist view) - name: onCancel payload: string description: Fires when cancel clicked (label view) uses_apis: [] uses_components: [] internal_state: - isProcessing variants: - default - id: component_invite_artist_modal definition: &id003 id: component_invite_artist_modal name: InviteArtistModal props: - name: isOpen type: boolean required: true description: Whether modal is open - name: labelId type: string required: true description: Label ID sending invitation events: - name: onClose payload: void description: Fires when modal should close - name: onInviteSent payload: LabelInvitation description: Fires when invitation successfully sent uses_apis: - api_create_label_invitation uses_components: [] internal_state: - searchQuery - selectedArtist - message - isSubmitting variants: - default dependencies: entity_ids: - component_invitation_card - api_list_label_invitations - component_invite_artist_modal definitions: - id: component_invitation_card type: component definition: *id001 - id: api_list_label_invitations type: api definition: *id002 - id: component_invite_artist_modal type: component definition: *id003 files: to_create: - app/label/invitations/page.tsx reference: [] acceptance: - criterion: Page renders at /label/invitations verification: Navigate to /label/invitations - criterion: Data fetching works verification: Check network tab - criterion: Components render correctly verification: Visual inspection