version: '1.0' generated_at: '2025-12-19T06:08:20.694285' source: .workflow/versions/v001/design/design_document.yml entities: database: - id: model_user type: database name: User file_path: prisma/schema.prisma layer: 1 depends_on: [] used_by: - model_recording - model_generated_app - api_register_user - api_login_user - api_get_current_user status: pending - id: model_recording type: database name: Recording file_path: prisma/schema.prisma layer: 1 depends_on: - model_user used_by: - model_generated_app - api_list_recordings - api_create_recording - api_get_recording - api_delete_recording - api_transcribe_recording - api_summarize_recording - api_generate_app status: pending - id: model_generated_app type: database name: GeneratedApp file_path: prisma/schema.prisma layer: 1 depends_on: - model_user - model_recording used_by: - api_list_apps - api_generate_app - api_get_app - api_delete_app status: pending api: - id: api_register_user type: api name: Register a new user file_path: app/api/auth/register/route.ts layer: 2 depends_on: - model_user used_by: - component_register_form status: pending - id: api_login_user type: api name: Login user file_path: app/api/auth/login/route.ts layer: 2 depends_on: - model_user used_by: - component_login_form status: pending - id: api_logout_user type: api name: Logout user file_path: app/api/auth/logout/route.ts layer: 2 depends_on: [] used_by: [] status: pending - id: api_get_current_user type: api name: Get current user file_path: app/api/auth/me/route.ts layer: 2 depends_on: - model_user used_by: - page_dashboard status: pending - id: api_list_recordings type: api name: List user recordings file_path: app/api/recordings/route.ts layer: 2 depends_on: - model_recording used_by: - page_dashboard - page_recordings status: pending - id: api_create_recording type: api name: Create new recording file_path: app/api/recordings/route.ts layer: 2 depends_on: - model_recording used_by: [] status: pending - id: api_get_recording type: api name: Get single recording file_path: app/api/recordings/[id]/route.ts layer: 2 depends_on: - model_recording used_by: - page_recording_detail status: pending - id: api_delete_recording type: api name: Delete recording file_path: app/api/recordings/[id]/route.ts layer: 2 depends_on: - model_recording used_by: [] status: pending - id: api_transcribe_recording type: api name: Transcribe recording file_path: app/api/recordings/[id]/transcribe/route.ts layer: 2 depends_on: - model_recording used_by: - api_summarize_recording status: pending - id: api_summarize_recording type: api name: Summarize recording file_path: app/api/recordings/[id]/summarize/route.ts layer: 2 depends_on: - model_recording - api_transcribe_recording used_by: - api_generate_app status: pending - id: api_list_apps type: api name: List generated apps file_path: app/api/apps/route.ts layer: 2 depends_on: - model_generated_app used_by: - page_apps status: pending - id: api_generate_app type: api name: Generate app from recording file_path: app/api/apps/generate/route.ts layer: 2 depends_on: - model_generated_app - model_recording - api_summarize_recording used_by: [] status: pending - id: api_get_app type: api name: Get single generated app file_path: app/api/apps/[id]/route.ts layer: 2 depends_on: - model_generated_app used_by: - page_app_detail status: pending - id: api_delete_app type: api name: Delete generated app file_path: app/api/apps/[id]/route.ts layer: 2 depends_on: - model_generated_app used_by: [] status: pending component: - id: component_header type: component name: Header file_path: '' layer: 3 depends_on: [] used_by: - page_home - page_dashboard - page_recordings - page_recording_detail - page_apps - page_app_detail status: pending - id: component_sidebar type: component name: Sidebar file_path: '' layer: 3 depends_on: [] used_by: - page_dashboard - page_recordings - page_recording_detail - page_apps - page_app_detail status: pending - id: component_hero type: component name: Hero file_path: '' layer: 3 depends_on: [] used_by: - page_home status: pending - id: component_features type: component name: Features file_path: '' layer: 3 depends_on: [] used_by: - page_home status: pending - id: component_login_form type: component name: LoginForm file_path: '' layer: 3 depends_on: - api_login_user used_by: - page_login status: pending - id: component_register_form type: component name: RegisterForm file_path: '' layer: 3 depends_on: - api_register_user used_by: - page_register status: pending - id: component_record_button type: component name: RecordButton file_path: '' layer: 3 depends_on: [] used_by: - page_dashboard status: pending - id: component_wake_word_indicator type: component name: WakeWordIndicator file_path: '' layer: 3 depends_on: [] used_by: - page_dashboard status: pending - id: component_recording_list type: component name: RecordingList file_path: '' layer: 3 depends_on: - component_recording_card used_by: - page_dashboard - page_recordings status: pending - id: component_recording_card type: component name: RecordingCard file_path: '' layer: 3 depends_on: [] used_by: - component_recording_list - page_recordings status: pending - id: component_audio_player type: component name: AudioPlayer file_path: '' layer: 3 depends_on: [] used_by: - page_recording_detail status: pending - id: component_transcript_viewer type: component name: TranscriptViewer file_path: '' layer: 3 depends_on: [] used_by: - page_recording_detail status: pending - id: component_summary_display type: component name: SummaryDisplay file_path: '' layer: 3 depends_on: [] used_by: - page_recording_detail status: pending - id: component_app_gallery type: component name: AppGallery file_path: '' layer: 3 depends_on: - component_app_card used_by: - page_apps status: pending - id: component_app_card type: component name: AppCard file_path: '' layer: 3 depends_on: [] used_by: - component_app_gallery - page_apps status: pending - id: component_app_iframe_viewer type: component name: AppIframeViewer file_path: '' layer: 3 depends_on: [] used_by: - page_app_detail status: pending page: - id: page_home type: page name: Home file_path: app//page.tsx layer: 4 depends_on: - component_header - component_hero - component_features used_by: [] status: pending - id: page_login type: page name: Login file_path: app/login/page.tsx layer: 4 depends_on: - component_login_form used_by: [] status: pending - id: page_register type: page name: Register file_path: app/register/page.tsx layer: 4 depends_on: - component_register_form used_by: [] status: pending - id: page_dashboard type: page name: Dashboard file_path: app/dashboard/page.tsx layer: 4 depends_on: - api_get_current_user - api_list_recordings - component_header - component_sidebar - component_record_button - component_wake_word_indicator - component_recording_list used_by: [] status: pending - id: page_recordings type: page name: Recordings file_path: app/recordings/page.tsx layer: 4 depends_on: - api_list_recordings - component_header - component_sidebar - component_recording_list - component_recording_card used_by: [] status: pending - id: page_recording_detail type: page name: Recording Detail file_path: app/recordings/[id]/page.tsx layer: 4 depends_on: - api_get_recording - component_header - component_sidebar - component_audio_player - component_transcript_viewer - component_summary_display used_by: [] status: pending - id: page_apps type: page name: Generated Apps file_path: app/apps/page.tsx layer: 4 depends_on: - api_list_apps - component_header - component_sidebar - component_app_gallery - component_app_card used_by: [] status: pending - id: page_app_detail type: page name: App Preview file_path: app/apps/[id]/page.tsx layer: 4 depends_on: - api_get_app - component_header - component_sidebar - component_app_iframe_viewer used_by: [] status: pending relations: - source: model_recording target: model_user type: references - source: model_generated_app target: model_user type: references - source: model_generated_app target: model_recording type: references - source: api_register_user target: model_user type: queries - source: api_login_user target: model_user type: queries - source: api_get_current_user target: model_user type: queries - source: api_list_recordings target: model_recording type: queries - source: api_create_recording target: model_recording type: queries - source: api_get_recording target: model_recording type: queries - source: api_delete_recording target: model_recording type: queries - source: api_transcribe_recording target: model_recording type: queries - source: api_summarize_recording target: model_recording type: queries - source: api_summarize_recording target: api_transcribe_recording type: calls - source: api_list_apps target: model_generated_app type: queries - source: api_generate_app target: model_generated_app type: queries - source: api_generate_app target: model_recording type: queries - source: api_generate_app target: api_summarize_recording type: calls - source: api_get_app target: model_generated_app type: queries - source: api_delete_app target: model_generated_app type: queries - source: component_login_form target: api_login_user type: calls - source: component_register_form target: api_register_user type: calls - source: component_recording_list target: component_recording_card type: imports - source: component_app_gallery target: component_app_card type: imports - source: page_home target: component_header type: renders - source: page_home target: component_hero type: renders - source: page_home target: component_features type: renders - source: page_login target: component_login_form type: renders - source: page_register target: component_register_form type: renders - source: page_dashboard target: api_get_current_user type: calls - source: page_dashboard target: api_list_recordings type: calls - source: page_dashboard target: component_header type: renders - source: page_dashboard target: component_sidebar type: renders - source: page_dashboard target: component_record_button type: renders - source: page_dashboard target: component_wake_word_indicator type: renders - source: page_dashboard target: component_recording_list type: renders - source: page_recordings target: api_list_recordings type: calls - source: page_recordings target: component_header type: renders - source: page_recordings target: component_sidebar type: renders - source: page_recordings target: component_recording_list type: renders - source: page_recordings target: component_recording_card type: renders - source: page_recording_detail target: api_get_recording type: calls - source: page_recording_detail target: component_header type: renders - source: page_recording_detail target: component_sidebar type: renders - source: page_recording_detail target: component_audio_player type: renders - source: page_recording_detail target: component_transcript_viewer type: renders - source: page_recording_detail target: component_summary_display type: renders - source: page_apps target: api_list_apps type: calls - source: page_apps target: component_header type: renders - source: page_apps target: component_sidebar type: renders - source: page_apps target: component_app_gallery type: renders - source: page_apps target: component_app_card type: renders - source: page_app_detail target: api_get_app type: calls - source: page_app_detail target: component_header type: renders - source: page_app_detail target: component_sidebar type: renders - source: page_app_detail target: component_app_iframe_viewer type: renders - source: model_recording target: model_user type: references - source: model_generated_app target: model_user type: references - source: model_generated_app target: model_recording type: references - source: api_register_user target: model_user type: queries - source: api_login_user target: model_user type: queries - source: api_get_current_user target: model_user type: queries - source: api_list_recordings target: model_recording type: queries - source: api_create_recording target: model_recording type: queries - source: api_get_recording target: model_recording type: queries - source: api_delete_recording target: model_recording type: queries - source: api_transcribe_recording target: model_recording type: queries - source: api_summarize_recording target: model_recording type: queries - source: api_summarize_recording target: api_transcribe_recording type: calls - source: api_list_apps target: model_generated_app type: queries - source: api_generate_app target: model_generated_app type: queries - source: api_generate_app target: model_recording type: queries - source: api_generate_app target: api_summarize_recording type: calls - source: api_get_app target: model_generated_app type: queries - source: api_delete_app target: model_generated_app type: queries - source: component_login_form target: api_login_user type: calls - source: component_register_form target: api_register_user type: calls - source: component_recording_list target: component_recording_card type: imports - source: component_app_gallery target: component_app_card type: imports - source: page_home target: component_header type: renders - source: page_home target: component_hero type: renders - source: page_home target: component_features type: renders - source: page_login target: component_login_form type: renders - source: page_register target: component_register_form type: renders - source: page_dashboard target: api_get_current_user type: calls - source: page_dashboard target: api_list_recordings type: calls - source: page_dashboard target: component_header type: renders - source: page_dashboard target: component_sidebar type: renders - source: page_dashboard target: component_record_button type: renders - source: page_dashboard target: component_wake_word_indicator type: renders - source: page_dashboard target: component_recording_list type: renders - source: page_recordings target: api_list_recordings type: calls - source: page_recordings target: component_header type: renders - source: page_recordings target: component_sidebar type: renders - source: page_recordings target: component_recording_list type: renders - source: page_recordings target: component_recording_card type: renders - source: page_recording_detail target: api_get_recording type: calls - source: page_recording_detail target: component_header type: renders - source: page_recording_detail target: component_sidebar type: renders - source: page_recording_detail target: component_audio_player type: renders - source: page_recording_detail target: component_transcript_viewer type: renders - source: page_recording_detail target: component_summary_display type: renders - source: page_apps target: api_list_apps type: calls - source: page_apps target: component_header type: renders - source: page_apps target: component_sidebar type: renders - source: page_apps target: component_app_gallery type: renders - source: page_apps target: component_app_card type: renders - source: page_app_detail target: api_get_app type: calls - source: page_app_detail target: component_header type: renders - source: page_app_detail target: component_sidebar type: renders - source: page_app_detail target: component_app_iframe_viewer type: renders dependency_chains: model_user: [] model_recording: - model_user model_generated_app: - model_user - model_recording api_register_user: - model_user api_login_user: - model_user api_logout_user: [] api_get_current_user: - model_user api_list_recordings: - model_user - model_recording api_create_recording: - model_user - model_recording api_get_recording: - model_user - model_recording api_delete_recording: - model_user - model_recording api_transcribe_recording: - model_user - model_recording api_summarize_recording: - model_user - model_recording - api_transcribe_recording api_list_apps: - model_user - model_recording - model_generated_app api_generate_app: - model_user - model_recording - model_generated_app - api_transcribe_recording - api_summarize_recording api_get_app: - model_user - model_recording - model_generated_app api_delete_app: - model_user - model_recording - model_generated_app component_header: [] component_sidebar: [] component_hero: [] component_features: [] component_login_form: - model_user - api_login_user component_register_form: - model_user - api_register_user component_record_button: [] component_wake_word_indicator: [] component_recording_list: - component_recording_card component_recording_card: [] component_audio_player: [] component_transcript_viewer: [] component_summary_display: [] component_app_gallery: - component_app_card component_app_card: [] component_app_iframe_viewer: [] page_home: - component_header - component_hero - component_features page_login: - model_user - api_login_user - component_login_form page_register: - model_user - api_register_user - component_register_form page_dashboard: - model_user - api_get_current_user - model_recording - api_list_recordings - component_header - component_sidebar - component_record_button - component_wake_word_indicator - component_recording_card - component_recording_list page_recordings: - model_user - model_recording - api_list_recordings - component_header - component_sidebar - component_recording_card - component_recording_list page_recording_detail: - model_user - model_recording - api_get_recording - component_header - component_sidebar - component_audio_player - component_transcript_viewer - component_summary_display page_apps: - model_user - model_recording - model_generated_app - api_list_apps - component_header - component_sidebar - component_app_card - component_app_gallery page_app_detail: - model_user - model_recording - model_generated_app - api_get_app - component_header - component_sidebar - component_app_iframe_viewer impact_chains: model_user: - model_recording - model_generated_app - api_list_apps - page_apps - api_generate_app - api_get_app - page_app_detail - api_delete_app - api_list_recordings - page_dashboard - page_recordings - api_create_recording - api_get_recording - page_recording_detail - api_delete_recording - api_transcribe_recording - api_summarize_recording - api_register_user - component_register_form - page_register - api_login_user - component_login_form - page_login - api_get_current_user model_recording: - model_generated_app - api_list_apps - page_apps - api_generate_app - api_get_app - page_app_detail - api_delete_app - api_list_recordings - page_dashboard - page_recordings - api_create_recording - api_get_recording - page_recording_detail - api_delete_recording - api_transcribe_recording - api_summarize_recording model_generated_app: - api_list_apps - page_apps - api_generate_app - api_get_app - page_app_detail - api_delete_app api_register_user: - component_register_form - page_register api_login_user: - component_login_form - page_login api_logout_user: [] api_get_current_user: - page_dashboard api_list_recordings: - page_dashboard - page_recordings api_create_recording: [] api_get_recording: - page_recording_detail api_delete_recording: [] api_transcribe_recording: - api_summarize_recording - api_generate_app api_summarize_recording: - api_generate_app api_list_apps: - page_apps api_generate_app: [] api_get_app: - page_app_detail api_delete_app: [] component_header: - page_home - page_dashboard - page_recordings - page_recording_detail - page_apps - page_app_detail component_sidebar: - page_dashboard - page_recordings - page_recording_detail - page_apps - page_app_detail component_hero: - page_home component_features: - page_home component_login_form: - page_login component_register_form: - page_register component_record_button: - page_dashboard component_wake_word_indicator: - page_dashboard component_recording_list: - page_dashboard - page_recordings component_recording_card: - component_recording_list - page_dashboard - page_recordings component_audio_player: - page_recording_detail component_transcript_viewer: - page_recording_detail component_summary_display: - page_recording_detail component_app_gallery: - page_apps component_app_card: - component_app_gallery - page_apps component_app_iframe_viewer: - page_app_detail page_home: [] page_login: [] page_register: [] page_dashboard: [] page_recordings: [] page_recording_detail: [] page_apps: [] page_app_detail: [] type_mappings: model_user: id: uuid email: string name: string password_hash: string model_recording: id: uuid user_id: uuid title: string audio_file_path: string duration: integer transcript: text summary: text is_transcribing: boolean model_generated_app: id: uuid user_id: uuid recording_id: uuid title: string description: text html_content: text prd_content: text ui_ux_design: text app_type: string status: enum api_register_user: id: uuid email: string name: string created_at: datetime api_login_user: user: object token: string api_logout_user: success: boolean api_get_current_user: id: uuid email: string name: string created_at: datetime api_list_recordings: recordings: array total: integer api_create_recording: id: uuid title: string audio_file_path: string duration: integer created_at: datetime api_get_recording: id: uuid title: string audio_file_path: string duration: integer transcript: string summary: string is_transcribing: boolean created_at: datetime api_delete_recording: success: boolean api_transcribe_recording: recording_id: uuid is_transcribing: boolean api_summarize_recording: recording_id: uuid summary: string api_list_apps: apps: array total: integer api_generate_app: id: uuid recording_id: uuid status: string api_get_app: id: uuid recording_id: uuid title: string description: string html_content: string app_type: string status: string created_at: datetime api_delete_app: success: boolean component_header: user: User | null component_sidebar: activePath: string component_hero: {} component_features: {} component_login_form: {} component_register_form: {} component_record_button: isRecording: boolean isTranscribing: boolean component_wake_word_indicator: isListening: boolean wakeWord: string component_recording_list: recordings: Recording[] isLoading: boolean component_recording_card: recording: Recording showActions: boolean component_audio_player: audioUrl: string duration: integer component_transcript_viewer: transcript: string isLive: boolean component_summary_display: summary: string isLoading: boolean component_app_gallery: apps: GeneratedApp[] isLoading: boolean component_app_card: app: GeneratedApp showActions: boolean component_app_iframe_viewer: htmlContent: string title: string issues: circular_dependencies: [] statistics: total_entities: 41 total_relations: 110 by_type: database: 3 api: 14 component: 16 page: 8 by_layer: 1_database: 3 2_api: 14 3_component: 16 4_page: 8