veza/apps/web/storybook-roadmap.json
2026-03-06 10:02:53 +01:00

1517 lines
No EOL
52 KiB
JSON

{
"roadmap": {
"title": "Storybook 100% Coverage Roadmap",
"version": "1.0.0",
"created": "2026-02-02",
"targetCompletion": "2026-04-27",
"totalWeeks": 12,
"currentCoverage": 42,
"targetCoverage": 100,
"totalComponentsMissing": 180,
"estimatedTotalHours": 270
},
"metrics": {
"currentStories": 164,
"currentComponents": 384,
"componentsToAdd": 180,
"targetStories": 344,
"averageTimePerStory": "1.5h",
"weeklyCapacity": "15h"
},
"sprints": [
{
"id": "sprint-1",
"name": "Critical Pages & Error Handling",
"week": 1,
"startDate": "2026-02-03",
"endDate": "2026-02-09",
"priority": "P0",
"estimatedHours": 18,
"goal": "Cover all critical error and auth pages",
"targetCoverage": 47,
"components": [
{
"name": "NotFoundPage",
"path": "src/features/error/pages/NotFoundPage.tsx",
"effort": "low",
"priority": "critical",
"estimatedHours": 1,
"status": "pending",
"variants": [
"Default",
"WithSuggestions"
]
},
{
"name": "ServerErrorPage",
"path": "src/features/error/pages/ServerErrorPage.tsx",
"effort": "low",
"priority": "critical",
"estimatedHours": 1,
"status": "pending",
"variants": [
"Default",
"WithRetry",
"NetworkError"
]
},
{
"name": "LoginPage",
"path": "src/features/auth/pages/LoginPage.tsx",
"effort": "medium",
"priority": "critical",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"WithError",
"Loading"
]
},
{
"name": "RegisterPage",
"path": "src/features/auth/pages/RegisterPage.tsx",
"effort": "medium",
"priority": "critical",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"WithError",
"Success"
]
},
{
"name": "ForgotPasswordPage",
"path": "src/features/auth/pages/ForgotPasswordPage.tsx",
"effort": "medium",
"priority": "critical",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"Sent",
"Error"
]
},
{
"name": "ResetPasswordPage",
"path": "src/features/auth/pages/ResetPasswordPage.tsx",
"effort": "medium",
"priority": "critical",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"Success",
"InvalidToken"
]
},
{
"name": "VerifyEmailPage",
"path": "src/features/auth/pages/VerifyEmailPage.tsx",
"effort": "low",
"priority": "critical",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Pending",
"Verified",
"Error"
]
},
{
"name": "ForgotPasswordForm",
"path": "src/features/auth/components/ForgotPasswordForm.tsx",
"effort": "medium",
"priority": "high",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Loading",
"Success"
]
},
{
"name": "TwoFactorVerify",
"path": "src/features/auth/components/TwoFactorVerify.tsx",
"effort": "medium",
"priority": "high",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"Error",
"Loading"
]
},
{
"name": "TwoFactorSetup",
"path": "src/features/auth/components/TwoFactorSetup.tsx",
"effort": "medium",
"priority": "high",
"estimatedHours": 2,
"status": "pending",
"variants": [
"QRCode",
"Verification",
"Complete"
]
},
{
"name": "AuthErrorMessage",
"path": "src/features/auth/components/AuthErrorMessage.tsx",
"effort": "low",
"priority": "medium",
"estimatedHours": 1,
"status": "pending",
"variants": [
"Default",
"Network",
"Validation"
]
}
]
},
{
"id": "sprint-2",
"name": "Dashboard & Admin Foundation",
"week": 2,
"startDate": "2026-02-10",
"endDate": "2026-02-16",
"priority": "P0",
"estimatedHours": 20,
"goal": "Cover dashboard and admin core views",
"targetCoverage": 52,
"components": [
{
"name": "DashboardPage",
"path": "src/features/dashboard/pages/DashboardPage.tsx",
"effort": "high",
"priority": "critical",
"estimatedHours": 3,
"status": "pending",
"variants": [
"Default",
"Loading",
"Empty"
]
},
{
"name": "AdminDashboardView",
"path": "src/components/admin/AdminDashboardView.tsx",
"effort": "high",
"priority": "critical",
"estimatedHours": 3,
"status": "pending",
"variants": [
"Default",
"Loading"
]
},
{
"name": "AdminUsersView",
"path": "src/components/admin/AdminUsersView.tsx",
"effort": "high",
"priority": "critical",
"estimatedHours": 3,
"status": "pending",
"variants": [
"Default",
"Empty",
"Loading",
"WithFilters"
]
},
{
"name": "AdminModerationView",
"path": "src/components/admin/AdminModerationView.tsx",
"effort": "high",
"priority": "high",
"estimatedHours": 3,
"status": "pending",
"variants": [
"Default",
"Queue",
"Empty"
]
},
{
"name": "AdminSettingsView",
"path": "src/components/admin/AdminSettingsView.tsx",
"effort": "medium",
"priority": "high",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"Saving"
]
},
{
"name": "AdminAuditLogsView",
"path": "src/components/admin/AdminAuditLogsView.tsx",
"effort": "medium",
"priority": "high",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"Filtered",
"Empty"
]
},
{
"name": "AdminView",
"path": "src/components/views/AdminView.tsx",
"effort": "medium",
"priority": "high",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default"
]
},
{
"name": "BanUserModal",
"path": "src/components/admin/BanUserModal.tsx",
"effort": "medium",
"priority": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Confirm"
]
},
{
"name": "UserTableRow",
"path": "src/components/admin/UserTableRow.tsx",
"effort": "low",
"priority": "medium",
"estimatedHours": 1,
"status": "pending",
"variants": [
"Default",
"Selected",
"Banned"
]
}
]
},
{
"id": "sprint-3",
"name": "Player & Playback",
"week": 3,
"startDate": "2026-02-17",
"endDate": "2026-02-23",
"priority": "P1",
"estimatedHours": 18,
"goal": "Complete player feature coverage",
"targetCoverage": 57,
"components": [
{
"name": "AudioPlayer",
"path": "src/features/player/components/AudioPlayer.tsx",
"effort": "high",
"estimatedHours": 3,
"status": "pending",
"variants": [
"Playing",
"Paused",
"Loading",
"Error"
]
},
{
"name": "FullPlayer",
"path": "src/components/player/FullPlayer.tsx",
"effort": "high",
"estimatedHours": 3,
"status": "pending",
"variants": [
"Default",
"WithQueue",
"WithLyrics"
]
},
{
"name": "PlayerError",
"path": "src/features/player/components/PlayerError.tsx",
"effort": "low",
"estimatedHours": 1,
"status": "pending",
"variants": [
"NetworkError",
"FormatError",
"Generic"
]
},
{
"name": "PlaybackSpeedControl",
"path": "src/features/player/components/PlaybackSpeedControl.tsx",
"effort": "low",
"estimatedHours": 1,
"status": "pending",
"variants": [
"Default",
"1x",
"1.5x",
"2x"
]
},
{
"name": "QueuePanel",
"path": "src/components/player/QueuePanel.tsx",
"effort": "medium",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"Empty",
"Reordering"
]
},
{
"name": "QueueView",
"path": "src/components/views/QueueView.tsx",
"effort": "medium",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"Empty"
]
},
{
"name": "SaveQueueAsPlaylistModal",
"path": "src/components/player/SaveQueueAsPlaylistModal.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Saving",
"Success"
]
},
{
"name": "LyricsPanel",
"path": "src/components/studio/LyricsPanel.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Synced",
"Empty"
]
}
]
},
{
"id": "sprint-4",
"name": "Playlists Complete",
"week": 4,
"startDate": "2026-02-24",
"endDate": "2026-03-02",
"priority": "P1",
"estimatedHours": 20,
"goal": "100% playlist feature coverage",
"targetCoverage": 62,
"components": [
{
"name": "PlaylistList",
"path": "src/features/playlists/components/PlaylistList.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default",
"Grid",
"Empty",
"Loading"
]
},
{
"name": "PlaylistDetailPage",
"path": "src/features/playlists/pages/PlaylistDetailPage.tsx",
"effort": "high",
"estimatedHours": 3,
"status": "pending",
"variants": [
"Default",
"Loading",
"NotFound"
]
},
{
"name": "PlaylistListPage",
"path": "src/features/playlists/pages/PlaylistListPage.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default",
"Empty",
"Loading"
]
},
{
"name": "PlaylistTrackList",
"path": "src/features/playlists/components/PlaylistTrackList.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default",
"Empty",
"Reordering"
]
},
{
"name": "PlaylistTrackItem",
"path": "src/features/playlists/components/PlaylistTrackItem.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Playing",
"Selected"
]
},
{
"name": "PlaylistSearch",
"path": "src/features/playlists/components/PlaylistSearch.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"WithResults"
]
},
{
"name": "PlaylistRecommendations",
"path": "src/features/playlists/components/PlaylistRecommendations.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Empty"
]
},
{
"name": "AddCollaboratorModal",
"path": "src/features/playlists/components/AddCollaboratorModal.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Searching",
"Added"
]
},
{
"name": "CollaboratorList",
"path": "src/features/playlists/components/CollaboratorList.tsx",
"effort": "low",
"estimatedHours": 1,
"status": "pending",
"variants": [
"Default",
"Empty"
]
},
{
"name": "SharePlaylistModal",
"path": "src/features/playlists/components/SharePlaylistModal.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Copied"
]
}
]
},
{
"id": "sprint-5",
"name": "Tracks & Search",
"week": 5,
"startDate": "2026-03-03",
"endDate": "2026-03-09",
"priority": "P1",
"estimatedHours": 18,
"goal": "Complete tracks and search coverage",
"targetCoverage": 67,
"components": [
{
"name": "TrackDetailPage",
"path": "src/features/tracks/pages/TrackDetailPage.tsx",
"effort": "high",
"estimatedHours": 3,
"status": "pending",
"variants": [
"Default",
"Loading",
"NotFound"
]
},
{
"name": "TrackSearch",
"path": "src/features/tracks/components/TrackSearch.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default",
"WithResults",
"NoResults"
]
},
{
"name": "TrackSearchResults",
"path": "src/features/tracks/components/TrackSearchResults.tsx",
"effort": "high",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"Empty",
"Loading"
]
},
{
"name": "TrackSearchFilters",
"path": "src/features/tracks/components/TrackSearchFilters.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Applied"
]
},
{
"name": "TrackListContainer",
"path": "src/features/tracks/components/TrackListContainer.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default"
]
},
{
"name": "TrackAnalyticsView",
"path": "src/components/tracks/TrackAnalyticsView.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default",
"Loading",
"Empty"
]
},
{
"name": "SearchPage",
"path": "src/features/search/pages/SearchPage.tsx",
"effort": "high",
"estimatedHours": 3,
"status": "pending",
"variants": [
"Default",
"Results",
"NoResults",
"Loading"
]
},
{
"name": "GlobalSearchBar",
"path": "src/components/search/GlobalSearchBar.tsx",
"effort": "medium",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"Focused",
"WithSuggestions"
]
}
]
},
{
"id": "sprint-6",
"name": "Upload & Library",
"week": 6,
"startDate": "2026-03-10",
"endDate": "2026-03-16",
"priority": "P1",
"estimatedHours": 22,
"goal": "Complete upload and library workflows",
"targetCoverage": 72,
"components": [
{
"name": "UploadView",
"path": "src/components/views/UploadView.tsx",
"effort": "high",
"estimatedHours": 3,
"status": "pending",
"variants": [
"Default",
"Uploading",
"Complete",
"Error"
]
},
{
"name": "UploadProgressBar",
"path": "src/components/upload/UploadProgressBar.tsx",
"effort": "low",
"estimatedHours": 1,
"status": "pending",
"variants": [
"Default",
"Complete",
"Error"
]
},
{
"name": "FileUploadZone",
"path": "src/components/upload/FileUploadZone.tsx",
"effort": "medium",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"Dragging",
"Processing"
]
},
{
"name": "BulkUploadModal",
"path": "src/components/upload/BulkUploadModal.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default",
"Uploading",
"Complete"
]
},
{
"name": "MetadataEditor",
"path": "src/components/upload/MetadataEditor.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default",
"WithData",
"Saving"
]
},
{
"name": "MetadataForm",
"path": "src/components/upload/metadata/MetadataForm.tsx",
"effort": "medium",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"WithErrors"
]
},
{
"name": "CoverArtUploadModal",
"path": "src/components/upload/CoverArtUploadModal.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Uploading",
"Preview"
]
},
{
"name": "LibraryPage",
"path": "src/features/library/pages/LibraryPage.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default",
"Empty",
"Loading"
]
}
]
},
{
"id": "sprint-7",
"name": "Chat & Social",
"week": 7,
"startDate": "2026-03-17",
"endDate": "2026-03-23",
"priority": "P2",
"estimatedHours": 18,
"goal": "Complete chat and social features",
"targetCoverage": 77,
"components": [
{
"name": "ChatPage",
"path": "src/features/chat/pages/ChatPage.tsx",
"effort": "high",
"estimatedHours": 3,
"status": "pending",
"variants": [
"Default",
"Loading",
"Empty"
]
},
{
"name": "ChatView",
"path": "src/components/views/ChatView.tsx",
"effort": "medium",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default"
]
},
{
"name": "CreateRoomDialog",
"path": "src/features/chat/components/CreateRoomDialog.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Creating"
]
},
{
"name": "MessageSearch",
"path": "src/features/chat/components/MessageSearch.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Results",
"NoResults"
]
},
{
"name": "VirtualizedChatMessages",
"path": "src/features/chat/components/VirtualizedChatMessages.tsx",
"effort": "high",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"Loading"
]
},
{
"name": "SocialView",
"path": "src/components/views/SocialView.tsx",
"effort": "medium",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default"
]
},
{
"name": "ConnectionsView",
"path": "src/components/social/ConnectionsView.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Empty"
]
},
{
"name": "FeedView",
"path": "src/components/views/FeedView.tsx",
"effort": "high",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"Empty",
"Loading"
]
},
{
"name": "CreatePostModal",
"path": "src/components/social/CreatePostModal.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Posting"
]
}
]
},
{
"id": "sprint-8",
"name": "Settings & Preferences",
"week": 8,
"startDate": "2026-03-24",
"endDate": "2026-03-30",
"priority": "P2",
"estimatedHours": 20,
"goal": "Complete all settings panels",
"targetCoverage": 82,
"components": [
{
"name": "SettingsPage",
"path": "src/features/settings/pages/SettingsPage.tsx",
"effort": "medium",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default"
]
},
{
"name": "SettingsView",
"path": "src/components/views/SettingsView.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default"
]
},
{
"name": "SecuritySettings",
"path": "src/components/settings/SecuritySettings.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default",
"Updating"
]
},
{
"name": "SessionManagement",
"path": "src/components/settings/SessionManagement.tsx",
"effort": "medium",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"WithSessions"
]
},
{
"name": "AppearanceSettingsView",
"path": "src/components/settings/AppearanceSettingsView.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default"
]
},
{
"name": "AccessibilitySettingsView",
"path": "src/components/views/AccessibilitySettingsView.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default"
]
},
{
"name": "ChangeEmailModal",
"path": "src/components/settings/ChangeEmailModal.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Sending",
"Sent"
]
},
{
"name": "ChangeUsernameModal",
"path": "src/components/settings/ChangeUsernameModal.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Checking",
"Available"
]
},
{
"name": "DeleteAccountView",
"path": "src/components/settings/DeleteAccountView.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Confirm"
]
},
{
"name": "DataExportView",
"path": "src/components/settings/DataExportView.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Exporting",
"Ready"
]
}
]
},
{
"id": "sprint-9",
"name": "Marketplace & Commerce",
"week": 9,
"startDate": "2026-03-31",
"endDate": "2026-04-06",
"priority": "P2",
"estimatedHours": 22,
"goal": "Complete marketplace and commerce",
"targetCoverage": 87,
"components": [
{
"name": "MarketplaceView",
"path": "src/components/views/MarketplaceView.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default",
"Loading"
]
},
{
"name": "MarketplaceHome",
"path": "src/pages/marketplace/MarketplaceHome.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default",
"Loading"
]
},
{
"name": "ProductDetailView",
"path": "src/components/marketplace/ProductDetailView.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default",
"Loading",
"OutOfStock"
]
},
{
"name": "CartView",
"path": "src/components/views/CartView.tsx",
"effort": "high",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"Empty"
]
},
{
"name": "CartItem",
"path": "src/components/commerce/CartItem.tsx",
"effort": "low",
"estimatedHours": 1,
"status": "pending",
"variants": [
"Default",
"Removing"
]
},
{
"name": "CheckoutView",
"path": "src/components/views/CheckoutView.tsx",
"effort": "high",
"estimatedHours": 3,
"status": "pending",
"variants": [
"Default",
"Processing",
"Success"
]
},
{
"name": "OrderSummary",
"path": "src/components/commerce/OrderSummary.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"WithDiscount"
]
},
{
"name": "LicenceCard",
"path": "src/components/commerce/LicenceCard.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Basic",
"Pro",
"Exclusive"
]
},
{
"name": "PurchasesView",
"path": "src/components/views/PurchasesView.tsx",
"effort": "medium",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"Empty"
]
}
]
},
{
"id": "sprint-10",
"name": "Views & Layouts",
"week": 10,
"startDate": "2026-04-07",
"endDate": "2026-04-13",
"priority": "P2",
"estimatedHours": 18,
"goal": "Complete remaining views",
"targetCoverage": 92,
"components": [
{
"name": "DiscoverView",
"path": "src/components/views/DiscoverView.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default",
"Loading"
]
},
{
"name": "ExploreView",
"path": "src/components/views/ExploreView.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default"
]
},
{
"name": "ProfileView",
"path": "src/components/views/ProfileView.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default",
"Loading"
]
},
{
"name": "UserProfilePage",
"path": "src/features/profile/pages/UserProfilePage.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default",
"Own",
"NotFound"
]
},
{
"name": "NotificationsPage",
"path": "src/features/notifications/pages/NotificationsPage.tsx",
"effort": "medium",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"Empty"
]
},
{
"name": "NotificationsView",
"path": "src/components/views/NotificationsView.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default"
]
},
{
"name": "PlaylistsView",
"path": "src/components/views/PlaylistsView.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default"
]
},
{
"name": "AnalyticsView",
"path": "src/components/views/AnalyticsView.tsx",
"effort": "high",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"Loading"
]
}
]
},
{
"id": "sprint-11",
"name": "Studio & Education",
"week": 11,
"startDate": "2026-04-14",
"endDate": "2026-04-20",
"priority": "P3",
"estimatedHours": 20,
"goal": "Complete studio and education features",
"targetCoverage": 96,
"components": [
{
"name": "StudioView",
"path": "src/components/views/StudioView.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default"
]
},
{
"name": "ProjectDetailView",
"path": "src/components/studio/ProjectDetailView.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default",
"Loading"
]
},
{
"name": "CreateProjectModal",
"path": "src/components/studio/CreateProjectModal.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Creating"
]
},
{
"name": "GoLiveView",
"path": "src/components/studio/GoLiveView.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Setup",
"Live",
"Ended"
]
},
{
"name": "LyricsEditorModal",
"path": "src/components/studio/LyricsEditorModal.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Syncing"
]
},
{
"name": "EducationView",
"path": "src/components/views/EducationView.tsx",
"effort": "medium",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default"
]
},
{
"name": "CourseDetailView",
"path": "src/components/education/CourseDetailView.tsx",
"effort": "high",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"Enrolled"
]
},
{
"name": "CourseLearningView",
"path": "src/components/education/CourseLearningView.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default",
"Complete"
]
},
{
"name": "LiveView",
"path": "src/components/views/LiveView.tsx",
"effort": "medium",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default"
]
}
]
},
{
"id": "sprint-12",
"name": "Final Sprint - 100% Coverage",
"week": 12,
"startDate": "2026-04-21",
"endDate": "2026-04-27",
"priority": "P3",
"estimatedHours": 25,
"goal": "Complete all remaining components",
"targetCoverage": 100,
"components": [
{
"name": "GearView",
"path": "src/components/views/GearView.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default"
]
},
{
"name": "EquipmentDetailView",
"path": "src/components/inventory/EquipmentDetailView.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default"
]
},
{
"name": "DeveloperDashboardView",
"path": "src/components/developer/DeveloperDashboardView.tsx",
"effort": "high",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default"
]
},
{
"name": "APIPlaygroundView",
"path": "src/components/developer/APIPlaygroundView.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default"
]
},
{
"name": "CreateAPIKeyModal",
"path": "src/components/developer/CreateAPIKeyModal.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Created"
]
},
{
"name": "WebhooksView",
"path": "src/features/webhooks/WebhooksView.tsx",
"effort": "high",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default",
"Empty"
]
},
{
"name": "MonitoringDashboard",
"path": "src/components/monitoring/MonitoringDashboard.tsx",
"effort": "high",
"estimatedHours": 2.5,
"status": "pending",
"variants": [
"Default"
]
},
{
"name": "WishlistView",
"path": "src/components/views/WishlistView.tsx",
"effort": "medium",
"estimatedHours": 1.5,
"status": "pending",
"variants": [
"Default",
"Empty"
]
},
{
"name": "FileManagerView",
"path": "src/components/views/FileManagerView.tsx",
"effort": "high",
"estimatedHours": 2,
"status": "pending",
"variants": [
"Default"
]
}
]
}
],
"milestones": [
{
"id": "M1",
"name": "Critical Coverage",
"targetDate": "2026-02-16",
"coverage": 52,
"description": "All critical pages and admin covered"
},
{
"id": "M2",
"name": "Core Features",
"targetDate": "2026-03-09",
"coverage": 67,
"description": "Player, Playlists, Tracks complete"
},
{
"id": "M3",
"name": "Full Features",
"targetDate": "2026-03-30",
"coverage": 82,
"description": "Upload, Chat, Social, Settings complete"
},
{
"id": "M4",
"name": "Complete Coverage",
"targetDate": "2026-04-27",
"coverage": 100,
"description": "All components covered"
}
],
"weeklyTargets": [
{
"week": 1,
"coverage": 47,
"storiesAdded": 11
},
{
"week": 2,
"coverage": 52,
"storiesAdded": 9
},
{
"week": 3,
"coverage": 57,
"storiesAdded": 8
},
{
"week": 4,
"coverage": 62,
"storiesAdded": 10
},
{
"week": 5,
"coverage": 67,
"storiesAdded": 8
},
{
"week": 6,
"coverage": 72,
"storiesAdded": 8
},
{
"week": 7,
"coverage": 77,
"storiesAdded": 9
},
{
"week": 8,
"coverage": 82,
"storiesAdded": 10
},
{
"week": 9,
"coverage": 87,
"storiesAdded": 9
},
{
"week": 10,
"coverage": 92,
"storiesAdded": 8
},
{
"week": 11,
"coverage": 96,
"storiesAdded": 9
},
{
"week": 12,
"coverage": 100,
"storiesAdded": 13
}
]
}