{ "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" } ] }, "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" } ], "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" } ], "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" } ], "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" } ] }, "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"] } } }