From 8ab4d27287e4c1859b08be1dc47bae9cfad4254f Mon Sep 17 00:00:00 2001 From: XShine555 Date: Sun, 5 Jul 2026 03:26:36 +0200 Subject: [PATCH] chore: move flutter client out of monorepo into _archive Co-Authored-By: Claude Opus 4.8 --- .../.agents/skills/accessibility/SKILL.md | 440 -------- .../accessibility/references/A11Y-PATTERNS.md | 233 ----- .../skills/accessibility/references/WCAG.md | 191 ---- .../skills/bash-defensive-patterns/SKILL.md | 533 ---------- .../skills/dart-best-practices/SKILL.md | 65 -- .../skills/flutter-animations/SKILL.md | 116 --- .../assets/templates/explicit_animation.dart | 345 ------- .../assets/templates/hero_transition.dart | 223 ---- .../assets/templates/implicit_animation.dart | 149 --- .../assets/templates/staggered_animation.dart | 239 ----- .../flutter-animations/references/curves.md | 566 ---------- .../flutter-animations/references/explicit.md | 553 ---------- .../flutter-animations/references/hero.md | 724 ------------- .../flutter-animations/references/implicit.md | 368 ------- .../flutter-animations/references/physics.md | 700 ------------- .../references/staggered.md | 726 ------------- .../.agents/skills/flutter-expert/SKILL.md | 140 --- .../flutter-expert/references/bloc-state.md | 259 ----- .../references/gorouter-navigation.md | 119 --- .../flutter-expert/references/performance.md | 99 -- .../references/project-structure.md | 118 --- .../references/riverpod-state.md | 130 --- .../references/widget-patterns.md | 123 --- .../.agents/skills/flutter-testing/SKILL.md | 106 -- .../references/common-errors.md | 507 --------- .../references/integration-testing.md | 562 ---------- .../flutter-testing/references/mocking.md | 588 ----------- .../references/plugin-testing.md | 493 --------- .../references/unit-testing.md | 433 -------- .../references/widget-testing.md | 670 ------------ .../scripts/verify-examples.sh | 80 -- .../skills/frontend-design/LICENSE.txt | 177 ---- .../.agents/skills/frontend-design/SKILL.md | 42 - musify_flutter/.agents/skills/seo/SKILL.md | 513 --------- musify_flutter/.gitignore | 45 - musify_flutter/.metadata | 45 - musify_flutter/README.md | 3 - musify_flutter/analysis_options.yaml | 9 - musify_flutter/android/.gitignore | 14 - musify_flutter/android/app/build.gradle.kts | 45 - .../android/app/src/main/AndroidManifest.xml | 45 - .../example/musify_flutter/MainActivity.kt | 5 - .../res/drawable-v21/launch_background.xml | 12 - .../main/res/drawable/launch_background.xml | 12 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 544 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 442 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 721 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 1031 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 1443 -> 0 bytes .../app/src/main/res/values-night/styles.xml | 18 - .../app/src/main/res/values/styles.xml | 18 - .../app/src/profile/AndroidManifest.xml | 7 - musify_flutter/android/build.gradle.kts | 24 - musify_flutter/android/gradle.properties | 6 - .../gradle/wrapper/gradle-wrapper.properties | 5 - musify_flutter/android/settings.gradle.kts | 26 - musify_flutter/devtools_options.yaml | 3 - musify_flutter/ios/.gitignore | 34 - .../ios/Flutter/AppFrameworkInfo.plist | 24 - musify_flutter/ios/Flutter/Debug.xcconfig | 1 - musify_flutter/ios/Flutter/Release.xcconfig | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 644 ------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 - .../xcshareddata/xcschemes/Runner.xcscheme | 119 --- .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 - musify_flutter/ios/Runner/AppDelegate.swift | 16 - .../AppIcon.appiconset/Contents.json | 122 --- .../Icon-App-1024x1024@1x.png | Bin 10932 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 295 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 406 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 450 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 282 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 462 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 704 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 406 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 586 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 862 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 862 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 1674 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 762 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 1226 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 1418 -> 0 bytes .../LaunchImage.imageset/Contents.json | 23 - .../LaunchImage.imageset/LaunchImage.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/README.md | 5 - .../Runner/Base.lproj/LaunchScreen.storyboard | 37 - .../ios/Runner/Base.lproj/Main.storyboard | 26 - musify_flutter/ios/Runner/Info.plist | 70 -- .../ios/Runner/Runner-Bridging-Header.h | 1 - musify_flutter/ios/Runner/SceneDelegate.swift | 6 - .../ios/RunnerTests/RunnerTests.swift | 12 - musify_flutter/lib/main.dart | 8 - musify_flutter/lib/src/app.dart | 20 - .../lib/src/core/auth/auth_providers.dart | 24 - .../lib/src/core/auth/auth_repository.dart | 50 - .../lib/src/core/config/app_config.dart | 23 - .../lib/src/core/network/dio_client.dart | 30 - .../lib/src/core/router/app_router.dart | 65 -- .../lib/src/core/theme/app_theme.dart | 48 - .../features/home/presentation/home_page.dart | 161 --- .../library/presentation/library_page.dart | 68 -- .../player/application/player_controller.dart | 124 --- .../player/data/stream_repository.dart | 22 - .../features/player/domain/track_stream.dart | 19 - .../player/presentation/mini_player.dart | 124 --- .../playlists/data/playlist_repository.dart | 87 -- .../features/playlists/domain/playlist.dart | 34 - .../presentation/playlist_detail_page.dart | 137 --- .../profile/presentation/profile_page.dart | 158 --- .../search/presentation/search_page.dart | 45 - .../tracks/data/track_repository.dart | 32 - .../lib/src/features/tracks/domain/track.dart | 22 - .../src/shared/models/paginated_response.dart | 37 - .../src/shared/widgets/async_value_view.dart | 69 -- .../lib/src/shared/widgets/cover_art.dart | 40 - .../lib/src/shell/scaffold_with_nav.dart | 101 -- musify_flutter/linux/.gitignore | 1 - musify_flutter/linux/CMakeLists.txt | 128 --- musify_flutter/linux/flutter/CMakeLists.txt | 88 -- .../linux/flutter/generated_plugins.cmake | 29 - musify_flutter/linux/runner/CMakeLists.txt | 26 - musify_flutter/linux/runner/main.cc | 6 - musify_flutter/linux/runner/my_application.cc | 148 --- musify_flutter/linux/runner/my_application.h | 21 - musify_flutter/macos/.gitignore | 7 - .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../Flutter/GeneratedPluginRegistrant.swift | 24 - .../macos/Runner.xcodeproj/project.pbxproj | 729 ------------- .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/xcschemes/Runner.xcscheme | 117 --- .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - musify_flutter/macos/Runner/AppDelegate.swift | 13 - .../AppIcon.appiconset/Contents.json | 68 -- .../AppIcon.appiconset/app_icon_1024.png | Bin 102994 -> 0 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 5680 -> 0 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 520 -> 0 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 14142 -> 0 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 1066 -> 0 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 36406 -> 0 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 2218 -> 0 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 ------- .../macos/Runner/Configs/AppInfo.xcconfig | 14 - .../macos/Runner/Configs/Debug.xcconfig | 2 - .../macos/Runner/Configs/Release.xcconfig | 2 - .../macos/Runner/Configs/Warnings.xcconfig | 13 - .../macos/Runner/DebugProfile.entitlements | 12 - musify_flutter/macos/Runner/Info.plist | 32 - .../macos/Runner/MainFlutterWindow.swift | 15 - .../macos/Runner/Release.entitlements | 8 - .../macos/RunnerTests/RunnerTests.swift | 12 - musify_flutter/pubspec.lock | 970 ------------------ musify_flutter/pubspec.yaml | 24 - musify_flutter/skills-lock.json | 45 - musify_flutter/windows/.gitignore | 17 - musify_flutter/windows/CMakeLists.txt | 108 -- musify_flutter/windows/flutter/CMakeLists.txt | 109 -- .../windows/flutter/generated_plugins.cmake | 29 - musify_flutter/windows/runner/CMakeLists.txt | 40 - musify_flutter/windows/runner/Runner.rc | 121 --- .../windows/runner/flutter_window.cpp | 71 -- .../windows/runner/flutter_window.h | 33 - musify_flutter/windows/runner/main.cpp | 43 - musify_flutter/windows/runner/resource.h | 16 - .../windows/runner/resources/app_icon.ico | Bin 33772 -> 0 bytes .../windows/runner/runner.exe.manifest | 14 - musify_flutter/windows/runner/utils.cpp | 69 -- musify_flutter/windows/runner/utils.h | 19 - .../windows/runner/win32_window.cpp | 288 ------ musify_flutter/windows/runner/win32_window.h | 102 -- 177 files changed, 18408 deletions(-) delete mode 100644 musify_flutter/.agents/skills/accessibility/SKILL.md delete mode 100644 musify_flutter/.agents/skills/accessibility/references/A11Y-PATTERNS.md delete mode 100644 musify_flutter/.agents/skills/accessibility/references/WCAG.md delete mode 100644 musify_flutter/.agents/skills/bash-defensive-patterns/SKILL.md delete mode 100644 musify_flutter/.agents/skills/dart-best-practices/SKILL.md delete mode 100644 musify_flutter/.agents/skills/flutter-animations/SKILL.md delete mode 100644 musify_flutter/.agents/skills/flutter-animations/assets/templates/explicit_animation.dart delete mode 100644 musify_flutter/.agents/skills/flutter-animations/assets/templates/hero_transition.dart delete mode 100644 musify_flutter/.agents/skills/flutter-animations/assets/templates/implicit_animation.dart delete mode 100644 musify_flutter/.agents/skills/flutter-animations/assets/templates/staggered_animation.dart delete mode 100644 musify_flutter/.agents/skills/flutter-animations/references/curves.md delete mode 100644 musify_flutter/.agents/skills/flutter-animations/references/explicit.md delete mode 100644 musify_flutter/.agents/skills/flutter-animations/references/hero.md delete mode 100644 musify_flutter/.agents/skills/flutter-animations/references/implicit.md delete mode 100644 musify_flutter/.agents/skills/flutter-animations/references/physics.md delete mode 100644 musify_flutter/.agents/skills/flutter-animations/references/staggered.md delete mode 100644 musify_flutter/.agents/skills/flutter-expert/SKILL.md delete mode 100644 musify_flutter/.agents/skills/flutter-expert/references/bloc-state.md delete mode 100644 musify_flutter/.agents/skills/flutter-expert/references/gorouter-navigation.md delete mode 100644 musify_flutter/.agents/skills/flutter-expert/references/performance.md delete mode 100644 musify_flutter/.agents/skills/flutter-expert/references/project-structure.md delete mode 100644 musify_flutter/.agents/skills/flutter-expert/references/riverpod-state.md delete mode 100644 musify_flutter/.agents/skills/flutter-expert/references/widget-patterns.md delete mode 100644 musify_flutter/.agents/skills/flutter-testing/SKILL.md delete mode 100644 musify_flutter/.agents/skills/flutter-testing/references/common-errors.md delete mode 100644 musify_flutter/.agents/skills/flutter-testing/references/integration-testing.md delete mode 100644 musify_flutter/.agents/skills/flutter-testing/references/mocking.md delete mode 100644 musify_flutter/.agents/skills/flutter-testing/references/plugin-testing.md delete mode 100644 musify_flutter/.agents/skills/flutter-testing/references/unit-testing.md delete mode 100644 musify_flutter/.agents/skills/flutter-testing/references/widget-testing.md delete mode 100644 musify_flutter/.agents/skills/flutter-testing/scripts/verify-examples.sh delete mode 100644 musify_flutter/.agents/skills/frontend-design/LICENSE.txt delete mode 100644 musify_flutter/.agents/skills/frontend-design/SKILL.md delete mode 100644 musify_flutter/.agents/skills/seo/SKILL.md delete mode 100644 musify_flutter/.gitignore delete mode 100644 musify_flutter/.metadata delete mode 100644 musify_flutter/README.md delete mode 100644 musify_flutter/analysis_options.yaml delete mode 100644 musify_flutter/android/.gitignore delete mode 100644 musify_flutter/android/app/build.gradle.kts delete mode 100644 musify_flutter/android/app/src/main/AndroidManifest.xml delete mode 100644 musify_flutter/android/app/src/main/kotlin/com/example/musify_flutter/MainActivity.kt delete mode 100644 musify_flutter/android/app/src/main/res/drawable-v21/launch_background.xml delete mode 100644 musify_flutter/android/app/src/main/res/drawable/launch_background.xml delete mode 100644 musify_flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 musify_flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 musify_flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 musify_flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 musify_flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 musify_flutter/android/app/src/main/res/values-night/styles.xml delete mode 100644 musify_flutter/android/app/src/main/res/values/styles.xml delete mode 100644 musify_flutter/android/app/src/profile/AndroidManifest.xml delete mode 100644 musify_flutter/android/build.gradle.kts delete mode 100644 musify_flutter/android/gradle.properties delete mode 100644 musify_flutter/android/gradle/wrapper/gradle-wrapper.properties delete mode 100644 musify_flutter/android/settings.gradle.kts delete mode 100644 musify_flutter/devtools_options.yaml delete mode 100644 musify_flutter/ios/.gitignore delete mode 100644 musify_flutter/ios/Flutter/AppFrameworkInfo.plist delete mode 100644 musify_flutter/ios/Flutter/Debug.xcconfig delete mode 100644 musify_flutter/ios/Flutter/Release.xcconfig delete mode 100644 musify_flutter/ios/Runner.xcodeproj/project.pbxproj delete mode 100644 musify_flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 musify_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 musify_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 musify_flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme delete mode 100644 musify_flutter/ios/Runner.xcworkspace/contents.xcworkspacedata delete mode 100644 musify_flutter/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 musify_flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 musify_flutter/ios/Runner/AppDelegate.swift delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png delete mode 100644 musify_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md delete mode 100644 musify_flutter/ios/Runner/Base.lproj/LaunchScreen.storyboard delete mode 100644 musify_flutter/ios/Runner/Base.lproj/Main.storyboard delete mode 100644 musify_flutter/ios/Runner/Info.plist delete mode 100644 musify_flutter/ios/Runner/Runner-Bridging-Header.h delete mode 100644 musify_flutter/ios/Runner/SceneDelegate.swift delete mode 100644 musify_flutter/ios/RunnerTests/RunnerTests.swift delete mode 100644 musify_flutter/lib/main.dart delete mode 100644 musify_flutter/lib/src/app.dart delete mode 100644 musify_flutter/lib/src/core/auth/auth_providers.dart delete mode 100644 musify_flutter/lib/src/core/auth/auth_repository.dart delete mode 100644 musify_flutter/lib/src/core/config/app_config.dart delete mode 100644 musify_flutter/lib/src/core/network/dio_client.dart delete mode 100644 musify_flutter/lib/src/core/router/app_router.dart delete mode 100644 musify_flutter/lib/src/core/theme/app_theme.dart delete mode 100644 musify_flutter/lib/src/features/home/presentation/home_page.dart delete mode 100644 musify_flutter/lib/src/features/library/presentation/library_page.dart delete mode 100644 musify_flutter/lib/src/features/player/application/player_controller.dart delete mode 100644 musify_flutter/lib/src/features/player/data/stream_repository.dart delete mode 100644 musify_flutter/lib/src/features/player/domain/track_stream.dart delete mode 100644 musify_flutter/lib/src/features/player/presentation/mini_player.dart delete mode 100644 musify_flutter/lib/src/features/playlists/data/playlist_repository.dart delete mode 100644 musify_flutter/lib/src/features/playlists/domain/playlist.dart delete mode 100644 musify_flutter/lib/src/features/playlists/presentation/playlist_detail_page.dart delete mode 100644 musify_flutter/lib/src/features/profile/presentation/profile_page.dart delete mode 100644 musify_flutter/lib/src/features/search/presentation/search_page.dart delete mode 100644 musify_flutter/lib/src/features/tracks/data/track_repository.dart delete mode 100644 musify_flutter/lib/src/features/tracks/domain/track.dart delete mode 100644 musify_flutter/lib/src/shared/models/paginated_response.dart delete mode 100644 musify_flutter/lib/src/shared/widgets/async_value_view.dart delete mode 100644 musify_flutter/lib/src/shared/widgets/cover_art.dart delete mode 100644 musify_flutter/lib/src/shell/scaffold_with_nav.dart delete mode 100644 musify_flutter/linux/.gitignore delete mode 100644 musify_flutter/linux/CMakeLists.txt delete mode 100644 musify_flutter/linux/flutter/CMakeLists.txt delete mode 100644 musify_flutter/linux/flutter/generated_plugins.cmake delete mode 100644 musify_flutter/linux/runner/CMakeLists.txt delete mode 100644 musify_flutter/linux/runner/main.cc delete mode 100644 musify_flutter/linux/runner/my_application.cc delete mode 100644 musify_flutter/linux/runner/my_application.h delete mode 100644 musify_flutter/macos/.gitignore delete mode 100644 musify_flutter/macos/Flutter/Flutter-Debug.xcconfig delete mode 100644 musify_flutter/macos/Flutter/Flutter-Release.xcconfig delete mode 100644 musify_flutter/macos/Flutter/GeneratedPluginRegistrant.swift delete mode 100644 musify_flutter/macos/Runner.xcodeproj/project.pbxproj delete mode 100644 musify_flutter/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 musify_flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme delete mode 100644 musify_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata delete mode 100644 musify_flutter/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 musify_flutter/macos/Runner/AppDelegate.swift delete mode 100644 musify_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 musify_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png delete mode 100644 musify_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png delete mode 100644 musify_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png delete mode 100644 musify_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png delete mode 100644 musify_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png delete mode 100644 musify_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png delete mode 100644 musify_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png delete mode 100644 musify_flutter/macos/Runner/Base.lproj/MainMenu.xib delete mode 100644 musify_flutter/macos/Runner/Configs/AppInfo.xcconfig delete mode 100644 musify_flutter/macos/Runner/Configs/Debug.xcconfig delete mode 100644 musify_flutter/macos/Runner/Configs/Release.xcconfig delete mode 100644 musify_flutter/macos/Runner/Configs/Warnings.xcconfig delete mode 100644 musify_flutter/macos/Runner/DebugProfile.entitlements delete mode 100644 musify_flutter/macos/Runner/Info.plist delete mode 100644 musify_flutter/macos/Runner/MainFlutterWindow.swift delete mode 100644 musify_flutter/macos/Runner/Release.entitlements delete mode 100644 musify_flutter/macos/RunnerTests/RunnerTests.swift delete mode 100644 musify_flutter/pubspec.lock delete mode 100644 musify_flutter/pubspec.yaml delete mode 100644 musify_flutter/skills-lock.json delete mode 100644 musify_flutter/windows/.gitignore delete mode 100644 musify_flutter/windows/CMakeLists.txt delete mode 100644 musify_flutter/windows/flutter/CMakeLists.txt delete mode 100644 musify_flutter/windows/flutter/generated_plugins.cmake delete mode 100644 musify_flutter/windows/runner/CMakeLists.txt delete mode 100644 musify_flutter/windows/runner/Runner.rc delete mode 100644 musify_flutter/windows/runner/flutter_window.cpp delete mode 100644 musify_flutter/windows/runner/flutter_window.h delete mode 100644 musify_flutter/windows/runner/main.cpp delete mode 100644 musify_flutter/windows/runner/resource.h delete mode 100644 musify_flutter/windows/runner/resources/app_icon.ico delete mode 100644 musify_flutter/windows/runner/runner.exe.manifest delete mode 100644 musify_flutter/windows/runner/utils.cpp delete mode 100644 musify_flutter/windows/runner/utils.h delete mode 100644 musify_flutter/windows/runner/win32_window.cpp delete mode 100644 musify_flutter/windows/runner/win32_window.h diff --git a/musify_flutter/.agents/skills/accessibility/SKILL.md b/musify_flutter/.agents/skills/accessibility/SKILL.md deleted file mode 100644 index af2299a..0000000 --- a/musify_flutter/.agents/skills/accessibility/SKILL.md +++ /dev/null @@ -1,440 +0,0 @@ ---- -name: accessibility -description: Audit and improve web accessibility following WCAG 2.2 guidelines. Use when asked to "improve accessibility", "a11y audit", "WCAG compliance", "screen reader support", "keyboard navigation", or "make accessible". -license: MIT -metadata: - author: web-quality-skills - version: "1.1" ---- - -# Accessibility (a11y) - -Comprehensive accessibility guidelines based on WCAG 2.2 and Lighthouse accessibility audits. Goal: make content usable by everyone, including people with disabilities. - -## WCAG Principles: POUR - -| Principle | Description | -|-----------|-------------| -| **P**erceivable | Content can be perceived through different senses | -| **O**perable | Interface can be operated by all users | -| **U**nderstandable | Content and interface are understandable | -| **R**obust | Content works with assistive technologies | - -## Conformance levels - -| Level | Requirement | Target | -|-------|-------------|--------| -| **A** | Minimum accessibility | Must pass | -| **AA** | Standard compliance | Should pass (legal requirement in many jurisdictions) | -| **AAA** | Enhanced accessibility | Nice to have | - ---- - -## Perceivable - -### Text alternatives (1.1) - -**Images require alt text:** -```html - - - - -Bar chart showing 40% increase in Q3 sales - - - - - -
- 2024 market trends infographic -
- -
-
-``` - -**Icon buttons need accessible names:** -```html - - - - - - - - -``` - -**Visually hidden class:** -```css -.visually-hidden { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border: 0; -} -``` - -### Color contrast (1.4.3, 1.4.6) - -| Text Size | AA minimum | AAA enhanced | -|-----------|------------|--------------| -| Normal text (< 18px / < 14px bold) | 4.5:1 | 7:1 | -| Large text (≥ 18px / ≥ 14px bold) | 3:1 | 4.5:1 | -| UI components & graphics | 3:1 | 3:1 | - -```css -/* ❌ Low contrast (2.5:1) */ -.low-contrast { - color: #999; - background: #fff; -} - -/* ✅ Sufficient contrast (7:1) */ -.high-contrast { - color: #333; - background: #fff; -} - -/* ✅ Focus states need contrast too */ -:focus-visible { - outline: 2px solid #005fcc; - outline-offset: 2px; -} -``` - -**Don't rely on color alone:** -```html - - - - - -
- - - - Please enter a valid email address - -
-``` - -### Media alternatives (1.2) - -```html - - - - - -
- Transcript -

Full transcript text...

-
-``` - ---- - -## Operable - -### Keyboard accessible (2.1) - -**All functionality must be keyboard accessible:** -```javascript -// ❌ Only handles click -element.addEventListener('click', handleAction); - -// ✅ Handles both click and keyboard -element.addEventListener('click', handleAction); -element.addEventListener('keydown', (e) => { - if (e.key === 'Enter' || e.key === ' ') { - e.preventDefault(); - handleAction(); - } -}); -``` - -**No keyboard traps.** Users must be able to Tab into and out of every component. Use the [modal focus trap pattern](references/A11Y-PATTERNS.md#modal-focus-trap) for dialogs—the native `` element handles this automatically. - -### Focus visible (2.4.7) - -```css -/* ❌ Never remove focus outlines */ -*:focus { outline: none; } - -/* ✅ Use :focus-visible for keyboard-only focus */ -:focus { - outline: none; -} - -:focus-visible { - outline: 2px solid #005fcc; - outline-offset: 2px; -} - -/* ✅ Or custom focus styles */ -button:focus-visible { - box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.5); -} -``` - -### Focus not obscured (2.4.11) — new in 2.2 - -When an element receives keyboard focus, it must not be entirely hidden by other author-created content such as sticky headers, footers, or overlapping panels. At Level AAA (2.4.12), no part of the focused element may be hidden. - -```css -/* ✅ Account for sticky headers when scrolling to focused elements */ -:target { - scroll-margin-top: 80px; -} - -/* ✅ Ensure focused items clear fixed/sticky bars */ -:focus { - scroll-margin-top: 80px; - scroll-margin-bottom: 60px; -} -``` - -### Skip links (2.4.1) - -Provide a skip link so keyboard users can bypass repetitive navigation. See the [skip link pattern](references/A11Y-PATTERNS.md#skip-link) for full markup and styles. - -### Target size (2.5.8) — new in 2.2 - -Interactive targets must be at least **24 × 24 CSS pixels** (AA). Exceptions: inline text links, elements where the browser controls the size, and targets where a 24px circle centered on the bounding box does not overlap another target. - -```css -/* ✅ Minimum target size */ -button, -[role="button"], -input[type="checkbox"] + label, -input[type="radio"] + label { - min-width: 24px; - min-height: 24px; -} - -/* ✅ Comfortable target size (recommended 44×44) */ -.touch-target { - min-width: 44px; - min-height: 44px; - display: inline-flex; - align-items: center; - justify-content: center; -} -``` - -### Dragging movements (2.5.7) — new in 2.2 - -Any action that requires dragging must have a single-pointer alternative (e.g., buttons, inputs). See the [dragging movements pattern](references/A11Y-PATTERNS.md#dragging-movements) for a sortable-list example. - -### Timing (2.2) - -```javascript -// Allow users to extend time limits -function showSessionWarning() { - const modal = createModal({ - title: 'Session Expiring', - content: 'Your session will expire in 2 minutes.', - actions: [ - { label: 'Extend session', action: extendSession }, - { label: 'Log out', action: logout } - ], - timeout: 120000 - }); -} -``` - -### Motion (2.3) - -```css -/* Respect reduced motion preference */ -@media (prefers-reduced-motion: reduce) { - *, - *::before, - *::after { - animation-duration: 0.01ms !important; - animation-iteration-count: 1 !important; - transition-duration: 0.01ms !important; - scroll-behavior: auto !important; - } -} -``` - ---- - -## Understandable - -### Page language (3.1.1) - -```html - - - - - - - -

The French word for hello is bonjour.

-``` - -### Consistent navigation (3.2.3) - -```html - - -``` - -### Consistent help (3.2.6) — new in 2.2 - -If a help mechanism (contact info, chat widget, FAQ link, self-help option) is repeated across multiple pages, it must appear in the **same relative order** each time. Users who rely on consistent placement shouldn't have to hunt for help on every page. - -### Form labels (3.3.2) - -Every input needs a programmatically associated label. See the [form labels pattern](references/A11Y-PATTERNS.md#form-labels) for explicit, implicit, and instructional examples. - -### Error handling (3.3.1, 3.3.3) - -Announce errors to screen readers with `role="alert"` or `aria-live`, set `aria-invalid="true"` on invalid fields, and focus the first error on submit. See the [error handling pattern](references/A11Y-PATTERNS.md#error-handling) for full markup and JS. - -### Redundant entry (3.3.7) — new in 2.2 - -Don't force users to re-enter information they already provided in the same session. Auto-populate from earlier steps, or let users select from previously entered values. Exceptions: security re-confirmation and content that has expired. - -```html - -
- Shipping address - - -
-``` - -### Accessible authentication (3.3.8) — new in 2.2 - -Login flows must not rely on cognitive function tests (e.g., remembering a password, solving a puzzle) unless at least one of: -- A copy-paste or autofill mechanism is available -- An alternative method exists (e.g., passkey, SSO, email link) -- The test uses object recognition or personal content (AA only; AAA removes this exception) - -```html - - - - - - -``` - ---- - -## Robust - -### ARIA usage (4.1.2) - -**Prefer native elements:** -```html - -
Click me
- - - - - -
Option
- - - -``` - -**When ARIA is needed,** use the correct roles and states. See the [ARIA tabs pattern](references/A11Y-PATTERNS.md#aria-tabs) for a complete tablist example. - -### Live regions (4.1.3) - -Use `aria-live` regions to announce dynamic content changes without moving focus. See the [live regions pattern](references/A11Y-PATTERNS.md#live-regions-and-notifications) for markup and a `showNotification()` helper. - ---- - -## Testing checklist - -### Automated testing -```bash -# Lighthouse accessibility audit -npx lighthouse https://example.com --only-categories=accessibility - -# axe-core -npm install @axe-core/cli -g -axe https://example.com -``` - -### Manual testing - -- [ ] **Keyboard navigation:** Tab through entire page, use Enter/Space to activate -- [ ] **Screen reader:** Test with VoiceOver (Mac), NVDA (Windows), or TalkBack (Android) -- [ ] **Zoom:** Content usable at 200% zoom -- [ ] **High contrast:** Test with Windows High Contrast Mode -- [ ] **Reduced motion:** Test with `prefers-reduced-motion: reduce` -- [ ] **Focus order:** Logical and follows visual order -- [ ] **Target size:** Interactive elements meet 24×24px minimum - -See the [screen reader commands reference](references/A11Y-PATTERNS.md#screen-reader-commands) for VoiceOver and NVDA shortcuts. - ---- - -## Common issues by impact - -### Critical (fix immediately) -1. Missing form labels -2. Missing image alt text -3. Insufficient color contrast -4. Keyboard traps -5. No focus indicators - -### Serious (fix before launch) -1. Missing page language -2. Missing heading structure -3. Non-descriptive link text -4. Auto-playing media -5. Missing skip links - -### Moderate (fix soon) -1. Missing ARIA labels on icons -2. Inconsistent navigation -3. Missing error identification -4. Timing without controls -5. Missing landmark regions - -## References - -- [WCAG 2.2 Quick Reference](https://www.w3.org/WAI/WCAG22/quickref/) -- [WAI-ARIA Authoring Practices](https://www.w3.org/WAI/ARIA/apg/) -- [Deque axe Rules](https://dequeuniversity.com/rules/axe/) -- [Web Quality Audit](../web-quality-audit/SKILL.md) -- [WCAG criteria reference](references/WCAG.md) -- [Accessibility code patterns](references/A11Y-PATTERNS.md) diff --git a/musify_flutter/.agents/skills/accessibility/references/A11Y-PATTERNS.md b/musify_flutter/.agents/skills/accessibility/references/A11Y-PATTERNS.md deleted file mode 100644 index 6d500ef..0000000 --- a/musify_flutter/.agents/skills/accessibility/references/A11Y-PATTERNS.md +++ /dev/null @@ -1,233 +0,0 @@ -# Accessibility Code Patterns - -Practical, copy-paste-ready patterns for common accessibility requirements. Each pattern is self-contained and linked from the main [SKILL.md](../SKILL.md). - ---- - -## Modal focus trap - -Trap keyboard focus inside a modal dialog so Tab/Shift+Tab cycle through its focusable elements and Escape closes it. - -```javascript -function openModal(modal) { - const focusableElements = modal.querySelectorAll( - 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])' - ); - const firstElement = focusableElements[0]; - const lastElement = focusableElements[focusableElements.length - 1]; - - modal.addEventListener('keydown', (e) => { - if (e.key === 'Tab') { - if (e.shiftKey && document.activeElement === firstElement) { - e.preventDefault(); - lastElement.focus(); - } else if (!e.shiftKey && document.activeElement === lastElement) { - e.preventDefault(); - firstElement.focus(); - } - } - if (e.key === 'Escape') { - closeModal(); - } - }); - - firstElement.focus(); -} -``` - -The native `` element handles focus trapping automatically—prefer it when browser support allows. - ---- - -## Skip link - -Allows keyboard users to bypass repetitive navigation and jump straight to main content. - -```html - - -
-
- -
- -``` - -```css -.skip-link { - position: absolute; - top: -40px; - left: 0; - background: #000; - color: #fff; - padding: 8px 16px; - z-index: 100; -} - -.skip-link:focus { - top: 0; -} -``` - ---- - -## Error handling - -Announce errors to screen readers and focus the first invalid field on submit. - -```html -
-
- - - -
-
-``` - -```javascript -form.addEventListener('submit', (e) => { - const firstError = form.querySelector('[aria-invalid="true"]'); - if (firstError) { - e.preventDefault(); - firstError.focus(); - - const errorSummary = document.getElementById('error-summary'); - errorSummary.textContent = - `${errors.length} errors found. Please fix them and try again.`; - errorSummary.focus(); - } -}); -``` - ---- - -## Form labels - -Every input needs an associated label—either explicit (`for`/`id`) or implicit (wrapping `