project-standalo-sonic-cloud/project_manifest.json

738 lines
22 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"
}
]
},
"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"]
}
}
}