project-standalo-note-to-app/.workflow/versions/v001/contexts/page_app_detail.yml

190 lines
4.4 KiB
YAML

task_id: task_create_page_app_detail
entity_id: page_app_detail
generated_at: '2025-12-19T06:08:12.185761'
workflow_version: v001
target:
type: page
definition:
id: page_app_detail
name: App Preview
path: /apps/[id]
layout: layout_app
data_needs:
- api_id: api_get_app
purpose: Display app in iframe
on_load: true
components:
- component_header
- component_sidebar
- component_app_iframe_viewer
seo:
title: App Preview - NoteToApp
description: View generated application
auth:
required: true
roles: []
redirect: /login
state:
local:
- isLoading
global:
- user
related:
models: []
apis:
- id: api_get_app
definition: &id003
id: api_get_app
method: GET
path: /api/apps/[id]
summary: Get single generated app
description: Get app details including HTML content for iframe rendering
tags:
- apps
path_params:
- name: id
type: uuid
description: App ID
query_params: []
request_body:
content_type: application/json
schema:
type: object
properties: []
responses:
- status: 200
description: App details
schema:
type: object
properties:
- name: id
type: uuid
- name: recording_id
type: uuid
- name: title
type: string
- name: description
type: string
- name: html_content
type: string
- name: app_type
type: string
- name: status
type: string
- name: created_at
type: datetime
- status: 404
description: App not found
schema:
type: object
properties:
- name: error
type: string
example:
error: App not found
depends_on_models:
- model_generated_app
depends_on_apis: []
auth:
required: true
roles: []
external: false
components:
- id: component_header
definition: &id001
id: component_header
name: Header
props:
- name: user
type: User | null
required: false
default: null
description: Current user for displaying name/avatar
events: []
uses_apis: []
uses_components: []
internal_state: []
variants:
- default
external: false
- id: component_app_iframe_viewer
definition: &id002
id: component_app_iframe_viewer
name: AppIframeViewer
props:
- name: htmlContent
type: string
required: true
description: HTML content to render in iframe
- name: title
type: string
required: true
description: App title for accessibility
events:
- name: onLoadComplete
payload: void
description: Fired when iframe finishes loading
uses_apis: []
uses_components: []
internal_state:
- isLoading
- iframeRef
variants:
- default
- fullscreen
external: false
- id: component_sidebar
definition: &id004
id: component_sidebar
name: Sidebar
props:
- name: activePath
type: string
required: true
description: Current route path for highlighting
events:
- name: onNavigate
payload: string
description: Fired when navigation item clicked
uses_apis: []
uses_components: []
internal_state:
- isCollapsed
variants:
- default
external: false
dependencies:
entity_ids:
- component_header
- component_app_iframe_viewer
- api_get_app
- component_sidebar
definitions:
- id: component_header
type: component
definition: *id001
external: false
- id: component_app_iframe_viewer
type: component
definition: *id002
external: false
- id: api_get_app
type: api
definition: *id003
external: false
- id: component_sidebar
type: component
definition: *id004
external: false
files:
to_create:
- app/apps/[id]/page.tsx
reference: []
acceptance:
- criterion: Page renders at /apps/[id]
verification: Navigate to /apps/[id]
- criterion: Data fetching works
verification: Check network tab
- criterion: Components render correctly
verification: Visual inspection