project-standalo-sonic-cloud/.workflow/versions/v005/snapshot_after/manifest.json

1360 lines
38 KiB
JSON

{
"project": {
"name": "sonic-cloud",
"version": "0.1.0",
"created_at": "2025-12-18T14:32:39.275839",
"description": "Music platform for musicians to upload songs"
},
"state": {
"current_phase": "DESIGN_PHASE",
"approval_status": {
"manifest_approved": false,
"approved_by": null,
"approved_at": null
},
"revision_history": [
{
"action": "PROJECT_INITIALIZED",
"timestamp": "2025-12-18T14:32:39.275844",
"details": "Project sonic-cloud created"
},
{
"action": "DESIGN_DOCUMENT_CREATED",
"timestamp": "2025-12-18T15:10:00",
"details": "Complete design document with 91 entities created"
},
{
"action": "DESIGN_DOCUMENT_UPDATED",
"timestamp": "2025-12-20T22:10:00",
"details": "Added Phase 1 critical features: Enhanced authentication, advanced audio playback, file upload system, search implementation"
}
]
},
"entities": {
"database_tables": [
{
"id": "model_user",
"name": "User",
"table_name": "users",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
},
{
"id": "model_artist",
"name": "Artist",
"table_name": "artists",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
},
{
"id": "model_label",
"name": "Label",
"table_name": "labels",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
},
{
"id": "model_genre",
"name": "Genre",
"table_name": "genres",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
},
{
"id": "model_album",
"name": "Album",
"table_name": "albums",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
},
{
"id": "model_song",
"name": "Song",
"table_name": "songs",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
},
{
"id": "model_song_genre",
"name": "SongGenre",
"table_name": "song_genres",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
},
{
"id": "model_playlist",
"name": "Playlist",
"table_name": "playlists",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
},
{
"id": "model_playlist_song",
"name": "PlaylistSong",
"table_name": "playlist_songs",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
},
{
"id": "model_share",
"name": "Share",
"table_name": "shares",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
},
{
"id": "model_refresh_token",
"name": "RefreshToken",
"table_name": "refresh_tokens",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
},
{
"id": "model_session",
"name": "Session",
"table_name": "sessions",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
},
{
"id": "model_play_history",
"name": "PlayHistory",
"table_name": "play_histories",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
},
{
"id": "model_queue",
"name": "Queue",
"table_name": "queues",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
},
{
"id": "model_player_state",
"name": "PlayerState",
"table_name": "player_states",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
},
{
"id": "model_audio_file",
"name": "AudioFile",
"table_name": "audio_files",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
},
{
"id": "model_upload_session",
"name": "UploadSession",
"table_name": "upload_sessions",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
},
{
"id": "model_search_index",
"name": "SearchIndex",
"table_name": "search_indices",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
},
{
"id": "model_search_query",
"name": "SearchQuery",
"table_name": "search_queries",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
},
{
"id": "model_search_suggestion",
"name": "SearchSuggestion",
"table_name": "search_suggestions",
"status": "PENDING",
"file_path": "prisma/schema.prisma"
}
],
"api_endpoints": [
{
"id": "api_register",
"name": "Register User",
"path": "/api/auth/register",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/auth/register/route.ts"
},
{
"id": "api_login",
"name": "Login",
"path": "/api/auth/login",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/auth/login/route.ts"
},
{
"id": "api_forgot_password",
"name": "Forgot Password",
"path": "/api/auth/forgot-password",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/auth/forgot-password/route.ts"
},
{
"id": "api_reset_password",
"name": "Reset Password",
"path": "/api/auth/reset-password",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/auth/reset-password/route.ts"
},
{
"id": "api_get_current_user",
"name": "Get Current User",
"path": "/api/users/me",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/users/me/route.ts"
},
{
"id": "api_update_current_user",
"name": "Update Current User",
"path": "/api/users/me",
"method": "PUT",
"status": "PENDING",
"file_path": "app/api/users/me/route.ts"
},
{
"id": "api_create_artist_profile",
"name": "Create Artist Profile",
"path": "/api/artists",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/artists/route.ts"
},
{
"id": "api_get_artist",
"name": "Get Artist",
"path": "/api/artists/:id",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/artists/[id]/route.ts"
},
{
"id": "api_update_artist",
"name": "Update Artist",
"path": "/api/artists/:id",
"method": "PUT",
"status": "PENDING",
"file_path": "app/api/artists/[id]/route.ts"
},
{
"id": "api_get_artist_songs",
"name": "Get Artist Songs",
"path": "/api/artists/:id/songs",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/artists/[id]/songs/route.ts"
},
{
"id": "api_get_artist_albums",
"name": "Get Artist Albums",
"path": "/api/artists/:id/albums",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/artists/[id]/albums/route.ts"
},
{
"id": "api_upload_song",
"name": "Upload Song",
"path": "/api/songs/upload",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/songs/upload/route.ts"
},
{
"id": "api_get_song",
"name": "Get Song",
"path": "/api/songs/:id",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/songs/[id]/route.ts"
},
{
"id": "api_update_song",
"name": "Update Song",
"path": "/api/songs/:id",
"method": "PUT",
"status": "PENDING",
"file_path": "app/api/songs/[id]/route.ts"
},
{
"id": "api_delete_song",
"name": "Delete Song",
"path": "/api/songs/:id",
"method": "DELETE",
"status": "PENDING",
"file_path": "app/api/songs/[id]/route.ts"
},
{
"id": "api_increment_play_count",
"name": "Increment Play Count",
"path": "/api/songs/:id/play",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/songs/[id]/play/route.ts"
},
{
"id": "api_create_album",
"name": "Create Album",
"path": "/api/albums",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/albums/route.ts"
},
{
"id": "api_get_album",
"name": "Get Album",
"path": "/api/albums/:id",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/albums/[id]/route.ts"
},
{
"id": "api_update_album",
"name": "Update Album",
"path": "/api/albums/:id",
"method": "PUT",
"status": "PENDING",
"file_path": "app/api/albums/[id]/route.ts"
},
{
"id": "api_delete_album",
"name": "Delete Album",
"path": "/api/albums/:id",
"method": "DELETE",
"status": "PENDING",
"file_path": "app/api/albums/[id]/route.ts"
},
{
"id": "api_create_playlist",
"name": "Create Playlist",
"path": "/api/playlists",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/playlists/route.ts"
},
{
"id": "api_get_user_playlists",
"name": "Get User Playlists",
"path": "/api/playlists",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/playlists/route.ts"
},
{
"id": "api_get_playlist",
"name": "Get Playlist",
"path": "/api/playlists/:id",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/playlists/[id]/route.ts"
},
{
"id": "api_update_playlist",
"name": "Update Playlist",
"path": "/api/playlists/:id",
"method": "PUT",
"status": "PENDING",
"file_path": "app/api/playlists/[id]/route.ts"
},
{
"id": "api_delete_playlist",
"name": "Delete Playlist",
"path": "/api/playlists/:id",
"method": "DELETE",
"status": "PENDING",
"file_path": "app/api/playlists/[id]/route.ts"
},
{
"id": "api_add_song_to_playlist",
"name": "Add Song to Playlist",
"path": "/api/playlists/:id/songs",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/playlists/[id]/songs/route.ts"
},
{
"id": "api_remove_song_from_playlist",
"name": "Remove Song from Playlist",
"path": "/api/playlists/:playlistId/songs/:songId",
"method": "DELETE",
"status": "PENDING",
"file_path": "app/api/playlists/[playlistId]/songs/[songId]/route.ts"
},
{
"id": "api_reorder_playlist_songs",
"name": "Reorder Playlist Songs",
"path": "/api/playlists/:id/reorder",
"method": "PUT",
"status": "PENDING",
"file_path": "app/api/playlists/[id]/reorder/route.ts"
},
{
"id": "api_get_trending_songs",
"name": "Get Trending Songs",
"path": "/api/discover/trending",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/discover/trending/route.ts"
},
{
"id": "api_get_new_releases",
"name": "Get New Releases",
"path": "/api/discover/new-releases",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/discover/new-releases/route.ts"
},
{
"id": "api_get_genres",
"name": "Get Genres",
"path": "/api/discover/genres",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/discover/genres/route.ts"
},
{
"id": "api_get_songs_by_genre",
"name": "Get Songs by Genre",
"path": "/api/discover/genres/:slug",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/discover/genres/[slug]/route.ts"
},
{
"id": "api_search",
"name": "Search",
"path": "/api/search",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/search/route.ts"
},
{
"id": "api_create_label_profile",
"name": "Create Label Profile",
"path": "/api/labels",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/labels/route.ts"
},
{
"id": "api_get_label_artists",
"name": "Get Label Artists",
"path": "/api/labels/:id/artists",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/labels/[id]/artists/route.ts"
},
{
"id": "api_create_song_share",
"name": "Create Song Share",
"path": "/api/share/song/:id",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/share/song/[id]/route.ts"
},
{
"id": "api_create_playlist_share",
"name": "Create Playlist Share",
"path": "/api/share/playlist/:id",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/share/playlist/[id]/route.ts"
},
{
"id": "api_create_album_share",
"name": "Create Album Share",
"path": "/api/share/album/:id",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/share/album/[id]/route.ts"
},
{
"id": "api_resolve_share",
"name": "Resolve Share",
"path": "/api/share/:token",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/share/[token]/route.ts"
},
{
"id": "api_track_share_click",
"name": "Track Share Click",
"path": "/api/share/:token/click",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/share/[token]/click/route.ts"
},
{
"id": "api_refresh_token",
"name": "Refresh Token",
"path": "/api/auth/refresh",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/auth/refresh/route.ts"
},
{
"id": "api_logout",
"name": "Logout",
"path": "/api/auth/logout",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/auth/logout/route.ts"
},
{
"id": "api_get_sessions",
"name": "Get Sessions",
"path": "/api/auth/sessions",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/auth/sessions/route.ts"
},
{
"id": "api_revoke_session",
"name": "Revoke Session",
"path": "/api/auth/sessions/:id",
"method": "DELETE",
"status": "PENDING",
"file_path": "app/api/auth/sessions/[id]/route.ts"
},
{
"id": "api_verify_email",
"name": "Verify Email",
"path": "/api/auth/verify-email",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/auth/verify-email/route.ts"
},
{
"id": "api_confirm_email",
"name": "Confirm Email",
"path": "/api/auth/confirm-email",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/auth/confirm-email/route.ts"
},
{
"id": "api_change_password",
"name": "Change Password",
"path": "/api/auth/change-password",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/auth/change-password/route.ts"
},
{
"id": "api_get_queue",
"name": "Get Queue",
"path": "/api/player/queue",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/player/queue/route.ts"
},
{
"id": "api_update_queue",
"name": "Update Queue",
"path": "/api/player/queue",
"method": "PUT",
"status": "PENDING",
"file_path": "app/api/player/queue/route.ts"
},
{
"id": "api_add_to_queue",
"name": "Add to Queue",
"path": "/api/player/queue/add",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/player/queue/add/route.ts"
},
{
"id": "api_remove_from_queue",
"name": "Remove from Queue",
"path": "/api/player/queue/remove",
"method": "DELETE",
"status": "PENDING",
"file_path": "app/api/player/queue/remove/route.ts"
},
{
"id": "api_reorder_queue",
"name": "Reorder Queue",
"path": "/api/player/queue/reorder",
"method": "PUT",
"status": "PENDING",
"file_path": "app/api/player/queue/reorder/route.ts"
},
{
"id": "api_clear_queue",
"name": "Clear Queue",
"path": "/api/player/queue/clear",
"method": "DELETE",
"status": "PENDING",
"file_path": "app/api/player/queue/clear/route.ts"
},
{
"id": "api_get_player_state",
"name": "Get Player State",
"path": "/api/player/state",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/player/state/route.ts"
},
{
"id": "api_update_player_state",
"name": "Update Player State",
"path": "/api/player/state",
"method": "PUT",
"status": "PENDING",
"file_path": "app/api/player/state/route.ts"
},
{
"id": "api_player_play",
"name": "Player Play",
"path": "/api/player/play",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/player/play/route.ts"
},
{
"id": "api_player_pause",
"name": "Player Pause",
"path": "/api/player/pause",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/player/pause/route.ts"
},
{
"id": "api_player_next",
"name": "Player Next",
"path": "/api/player/next",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/player/next/route.ts"
},
{
"id": "api_player_previous",
"name": "Player Previous",
"path": "/api/player/previous",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/player/previous/route.ts"
},
{
"id": "api_player_seek",
"name": "Player Seek",
"path": "/api/player/seek",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/player/seek/route.ts"
},
{
"id": "api_player_shuffle",
"name": "Player Shuffle",
"path": "/api/player/shuffle",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/player/shuffle/route.ts"
},
{
"id": "api_player_repeat",
"name": "Player Repeat",
"path": "/api/player/repeat",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/player/repeat/route.ts"
},
{
"id": "api_get_play_history",
"name": "Get Play History",
"path": "/api/player/history",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/player/history/route.ts"
},
{
"id": "api_record_play",
"name": "Record Play",
"path": "/api/player/history",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/player/history/route.ts"
},
{
"id": "api_analyze_audio",
"name": "Analyze Audio",
"path": "/api/player/analyze/:songId",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/player/analyze/[songId]/route.ts"
},
{
"id": "api_initiate_upload",
"name": "Initiate Upload",
"path": "/api/upload/initiate",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/upload/initiate/route.ts"
},
{
"id": "api_upload_chunk",
"name": "Upload Chunk",
"path": "/api/upload/chunk/:sessionId",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/upload/chunk/[sessionId]/route.ts"
},
{
"id": "api_complete_upload",
"name": "Complete Upload",
"path": "/api/upload/complete/:sessionId",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/upload/complete/[sessionId]/route.ts"
},
{
"id": "api_upload_status",
"name": "Upload Status",
"path": "/api/upload/status/:sessionId",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/upload/status/[sessionId]/route.ts"
},
{
"id": "api_abort_upload",
"name": "Abort Upload",
"path": "/api/upload/abort/:sessionId",
"method": "DELETE",
"status": "PENDING",
"file_path": "app/api/upload/abort/[sessionId]/route.ts"
},
{
"id": "api_process_audio",
"name": "Process Audio",
"path": "/api/upload/process/:fileId",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/upload/process/[fileId]/route.ts"
},
{
"id": "api_audio_preview",
"name": "Audio Preview",
"path": "/api/upload/preview/:fileId",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/upload/preview/[fileId]/route.ts"
},
{
"id": "api_storage_usage",
"name": "Storage Usage",
"path": "/api/upload/storage/usage",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/upload/storage/usage/route.ts"
},
{
"id": "api_list_files",
"name": "List Files",
"path": "/api/upload/files",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/upload/files/route.ts"
},
{
"id": "api_delete_file",
"name": "Delete File",
"path": "/api/upload/files/:fileId",
"method": "DELETE",
"status": "PENDING",
"file_path": "app/api/upload/files/[fileId]/route.ts"
},
{
"id": "api_search_suggestions",
"name": "Search Suggestions",
"path": "/api/search/suggestions",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/search/suggestions/route.ts"
},
{
"id": "api_trending_searches",
"name": "Trending Searches",
"path": "/api/search/trending",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/search/trending/route.ts"
},
{
"id": "api_recent_searches",
"name": "Recent Searches",
"path": "/api/search/recent/:userId",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/search/recent/[userId]/route.ts"
},
{
"id": "api_save_search",
"name": "Save Search",
"path": "/api/search/save/:userId",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/search/save/[userId]/route.ts"
},
{
"id": "api_index_search",
"name": "Index Search",
"path": "/api/search/index",
"method": "POST",
"status": "PENDING",
"file_path": "app/api/search/index/route.ts"
},
{
"id": "api_update_search_index",
"name": "Update Search Index",
"path": "/api/search/index/:entityType/:entityId",
"method": "PUT",
"status": "PENDING",
"file_path": "app/api/search/index/[entityType]/[entityId]/route.ts"
},
{
"id": "api_remove_search_index",
"name": "Remove Search Index",
"path": "/api/search/index/:entityType/:entityId",
"method": "DELETE",
"status": "PENDING",
"file_path": "app/api/search/index/[entityType]/[entityId]/route.ts"
},
{
"id": "api_search_analytics",
"name": "Search Analytics",
"path": "/api/search/analytics",
"method": "GET",
"status": "PENDING",
"file_path": "app/api/search/analytics/route.ts"
}
],
"pages": [
{
"id": "page_login",
"name": "Login",
"path": "/login",
"status": "PENDING",
"file_path": "app/login/page.tsx"
},
{
"id": "page_register",
"name": "Register",
"path": "/register",
"status": "PENDING",
"file_path": "app/register/page.tsx"
},
{
"id": "page_forgot_password",
"name": "Forgot Password",
"path": "/forgot-password",
"status": "PENDING",
"file_path": "app/forgot-password/page.tsx"
},
{
"id": "page_home",
"name": "Discover Music",
"path": "/",
"status": "PENDING",
"file_path": "app/page.tsx"
},
{
"id": "page_artist_profile",
"name": "Artist Profile",
"path": "/artist/:id",
"status": "PENDING",
"file_path": "app/artist/[id]/page.tsx"
},
{
"id": "page_album_detail",
"name": "Album",
"path": "/album/:id",
"status": "PENDING",
"file_path": "app/album/[id]/page.tsx"
},
{
"id": "page_upload",
"name": "Upload Music",
"path": "/upload",
"status": "PENDING",
"file_path": "app/upload/page.tsx"
},
{
"id": "page_playlists",
"name": "My Playlists",
"path": "/playlists",
"status": "PENDING",
"file_path": "app/playlists/page.tsx"
},
{
"id": "page_playlist_detail",
"name": "Playlist",
"path": "/playlist/:id",
"status": "PENDING",
"file_path": "app/playlist/[id]/page.tsx"
},
{
"id": "page_profile",
"name": "Profile Settings",
"path": "/profile",
"status": "PENDING",
"file_path": "app/profile/page.tsx"
},
{
"id": "page_search",
"name": "Search",
"path": "/search",
"status": "PENDING",
"file_path": "app/search/page.tsx"
},
{
"id": "page_genre_browse",
"name": "Browse Genre",
"path": "/genre/:slug",
"status": "PENDING",
"file_path": "app/genre/[slug]/page.tsx"
},
{
"id": "page_share",
"name": "Share",
"path": "/s/:token",
"status": "PENDING",
"file_path": "app/s/[token]/page.tsx"
},
{
"id": "page_verify_email",
"name": "Email Verification",
"path": "/auth/verify-email",
"status": "PENDING",
"file_path": "app/auth/verify-email/page.tsx"
},
{
"id": "page_security_settings",
"name": "Security Settings",
"path": "/settings/security",
"status": "PENDING",
"file_path": "app/settings/security/page.tsx"
},
{
"id": "page_connected_accounts",
"name": "Connected Accounts",
"path": "/settings/connected-accounts",
"status": "PENDING",
"file_path": "app/settings/connected-accounts/page.tsx"
}
],
"components": [
{
"id": "component_audio_player",
"name": "AudioPlayer",
"status": "PENDING",
"file_path": "components/AudioPlayer.tsx"
},
{
"id": "component_player_controls",
"name": "PlayerControls",
"status": "PENDING",
"file_path": "components/PlayerControls.tsx"
},
{
"id": "component_song_card",
"name": "SongCard",
"status": "PENDING",
"file_path": "components/SongCard.tsx"
},
{
"id": "component_album_card",
"name": "AlbumCard",
"status": "PENDING",
"file_path": "components/AlbumCard.tsx"
},
{
"id": "component_artist_card",
"name": "ArtistCard",
"status": "PENDING",
"file_path": "components/ArtistCard.tsx"
},
{
"id": "component_playlist_card",
"name": "PlaylistCard",
"status": "PENDING",
"file_path": "components/PlaylistCard.tsx"
},
{
"id": "component_upload_form",
"name": "UploadForm",
"status": "PENDING",
"file_path": "components/UploadForm.tsx"
},
{
"id": "component_waveform_display",
"name": "WaveformDisplay",
"status": "PENDING",
"file_path": "components/WaveformDisplay.tsx"
},
{
"id": "component_genre_badge",
"name": "GenreBadge",
"status": "PENDING",
"file_path": "components/GenreBadge.tsx"
},
{
"id": "component_track_list",
"name": "TrackList",
"status": "PENDING",
"file_path": "components/TrackList.tsx"
},
{
"id": "component_artist_header",
"name": "ArtistHeader",
"status": "PENDING",
"file_path": "components/ArtistHeader.tsx"
},
{
"id": "component_album_header",
"name": "AlbumHeader",
"status": "PENDING",
"file_path": "components/AlbumHeader.tsx"
},
{
"id": "component_playlist_header",
"name": "PlaylistHeader",
"status": "PENDING",
"file_path": "components/PlaylistHeader.tsx"
},
{
"id": "component_social_links",
"name": "SocialLinks",
"status": "PENDING",
"file_path": "components/SocialLinks.tsx"
},
{
"id": "component_auth_form",
"name": "AuthForm",
"status": "PENDING",
"file_path": "components/AuthForm.tsx"
},
{
"id": "component_search_bar",
"name": "SearchBar",
"status": "PENDING",
"file_path": "components/SearchBar.tsx"
},
{
"id": "component_search_results",
"name": "SearchResults",
"status": "PENDING",
"file_path": "components/SearchResults.tsx"
},
{
"id": "component_create_playlist_modal",
"name": "CreatePlaylistModal",
"status": "PENDING",
"file_path": "components/CreatePlaylistModal.tsx"
},
{
"id": "component_profile_form",
"name": "ProfileForm",
"status": "PENDING",
"file_path": "components/ProfileForm.tsx"
},
{
"id": "component_avatar_upload",
"name": "AvatarUpload",
"status": "PENDING",
"file_path": "components/AvatarUpload.tsx"
},
{
"id": "component_section_header",
"name": "SectionHeader",
"status": "PENDING",
"file_path": "components/SectionHeader.tsx"
},
{
"id": "component_genre_header",
"name": "GenreHeader",
"status": "PENDING",
"file_path": "components/GenreHeader.tsx"
},
{
"id": "component_header",
"name": "Header",
"status": "IMPLEMENTED",
"file_path": "components/Header.tsx"
},
{
"id": "component_nav_link",
"name": "NavLink",
"status": "IMPLEMENTED",
"file_path": "components/NavLink.tsx"
},
{
"id": "component_user_menu",
"name": "UserMenu",
"status": "IMPLEMENTED",
"file_path": "components/UserMenu.tsx"
},
{
"id": "component_share_button",
"name": "ShareButton",
"status": "PENDING",
"file_path": "components/ShareButton.tsx"
},
{
"id": "component_share_modal",
"name": "ShareModal",
"status": "PENDING",
"file_path": "components/ShareModal.tsx"
},
{
"id": "component_social_share_buttons",
"name": "SocialShareButtons",
"status": "PENDING",
"file_path": "components/SocialShareButtons.tsx"
},
{
"id": "component_share_content_display",
"name": "SharedContentDisplay",
"status": "PENDING",
"file_path": "components/SharedContentDisplay.tsx"
},
{
"id": "component_advanced_audio_player",
"name": "AdvancedAudioPlayer",
"status": "PENDING",
"file_path": "components/AdvancedAudioPlayer.tsx"
},
{
"id": "component_queue_manager",
"name": "QueueManager",
"status": "PENDING",
"file_path": "components/QueueManager.tsx"
},
{
"id": "component_audio_visualizer",
"name": "AudioVisualizer",
"status": "PENDING",
"file_path": "components/AudioVisualizer.tsx"
},
{
"id": "component_mini_player",
"name": "MiniPlayer",
"status": "PENDING",
"file_path": "components/MiniPlayer.tsx"
},
{
"id": "component_play_history",
"name": "PlayHistory",
"status": "PENDING",
"file_path": "components/PlayHistory.tsx"
},
{
"id": "component_advanced_upload_form",
"name": "AdvancedUploadForm",
"status": "PENDING",
"file_path": "components/AdvancedUploadForm.tsx"
},
{
"id": "component_upload_progress",
"name": "UploadProgress",
"status": "PENDING",
"file_path": "components/UploadProgress.tsx"
},
{
"id": "component_file_uploader",
"name": "FileUploader",
"status": "PENDING",
"file_path": "components/FileUploader.tsx"
},
{
"id": "component_audio_preview",
"name": "AudioPreview",
"status": "PENDING",
"file_path": "components/AudioPreview.tsx"
},
{
"id": "component_advanced_search_bar",
"name": "AdvancedSearchBar",
"status": "PENDING",
"file_path": "components/AdvancedSearchBar.tsx"
},
{
"id": "component_search_filters",
"name": "SearchFilters",
"status": "PENDING",
"file_path": "components/SearchFilters.tsx"
},
{
"id": "component_search_analytics",
"name": "SearchAnalytics",
"status": "PENDING",
"file_path": "components/SearchAnalytics.tsx"
}
]
},
"dependencies": {
"component_to_page": {
"component_auth_form": [
"page_login",
"page_register",
"page_forgot_password"
],
"component_song_card": [
"page_home",
"page_artist_profile",
"page_search",
"page_genre_browse",
"page_album_detail",
"page_playlist_detail"
],
"component_genre_badge": [
"page_home"
],
"component_section_header": [
"page_home"
],
"component_artist_header": [
"page_artist_profile"
],
"component_album_card": [
"page_artist_profile",
"page_search"
],
"component_social_links": [
"page_artist_profile"
],
"component_album_header": [
"page_album_detail"
],
"component_track_list": [
"page_album_detail",
"page_playlist_detail"
],
"component_upload_form": [
"page_upload"
],
"component_waveform_display": [
"page_upload"
],
"component_playlist_card": [
"page_playlists"
],
"component_create_playlist_modal": [
"page_playlists"
],
"component_playlist_header": [
"page_playlist_detail"
],
"component_profile_form": [
"page_profile"
],
"component_avatar_upload": [
"page_profile"
],
"component_search_bar": [
"page_search"
],
"component_search_results": [
"page_search"
],
"component_artist_card": [
"page_search"
],
"component_genre_header": [
"page_genre_browse"
]
},
"api_to_component": {
"api_login": [
"component_auth_form"
],
"api_register": [
"component_auth_form"
],
"api_forgot_password": [
"component_auth_form"
],
"api_upload_song": [
"component_upload_form"
],
"api_increment_play_count": [
"component_audio_player"
],
"api_search": [
"component_search_bar"
],
"api_create_playlist": [
"component_create_playlist_modal"
],
"api_update_current_user": [
"component_profile_form"
]
},
"table_to_api": {
"model_user": [
"api_register",
"api_login",
"api_forgot_password",
"api_reset_password",
"api_get_current_user",
"api_update_current_user"
],
"model_artist": [
"api_create_artist_profile",
"api_get_artist",
"api_update_artist",
"api_get_artist_songs",
"api_get_artist_albums"
],
"model_song": [
"api_upload_song",
"api_get_song",
"api_update_song",
"api_delete_song",
"api_increment_play_count",
"api_get_artist_songs",
"api_get_trending_songs",
"api_get_new_releases",
"api_search"
],
"model_album": [
"api_create_album",
"api_get_album",
"api_update_album",
"api_delete_album",
"api_get_artist_albums",
"api_search"
],
"model_playlist": [
"api_create_playlist",
"api_get_user_playlists",
"api_get_playlist",
"api_update_playlist",
"api_delete_playlist"
],
"model_playlist_song": [
"api_add_song_to_playlist",
"api_remove_song_from_playlist",
"api_reorder_playlist_songs"
],
"model_genre": [
"api_get_genres",
"api_get_songs_by_genre"
],
"model_label": [
"api_create_label_profile",
"api_get_label_artists"
]
}
}
}