-
Notifications
You must be signed in to change notification settings - Fork 15
Improved the overall UI of Streamify to make it more consistent, mode… #28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
…rn, and responsive across all devices
|
@ShirshenduR Please Check |
|
@gaurav123-4 Share some screenshots |
|
@ShirshenduR Review the PR please |
mdtausifiqbal
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
could we through error in firebaseConfig.js if any firebaseConfig variable is missing.
|
@gaurav123-4 can you change the font to poppins and make changes in liked songs ui |
|
@ShirshenduR I have changed the font , you can check |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR enhances the Streamify UI with a comprehensive design system overhaul, focusing on consistency, modern aesthetics, and responsive behavior across all devices. The changes introduce CSS custom properties for theming, update component styling to use these variables, and improve the overall user experience with refined spacing, shadows, and transitions.
Key Changes:
- Implemented a complete design system with CSS custom properties for colors, spacing, typography, shadows, and transitions
- Standardized component styling across the application using the new design tokens
- Enhanced the "Liked Songs" feature with distinctive visual styling and improved empty states
- Added development mode fallbacks for Firebase configuration and authentication
Reviewed Changes
Copilot reviewed 19 out of 20 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| frontend/src/utils/firebaseConfig.js | Added fallback values for Firebase configuration in development |
| frontend/src/utils/api.js | Added default API base URL for local development |
| frontend/src/pages/Login.jsx | Added auto-navigation for development mode |
| frontend/src/context/AuthContext.jsx | Added demo user fallback for development |
| frontend/index.html | Added Poppins font family from Google Fonts |
| frontend/src/index.css | Introduced comprehensive design system with CSS custom properties |
| frontend/src/pages/*.css | Migrated all page styles to use design system variables |
| frontend/src/components/*.css | Updated component styles with design tokens and enhanced interactions |
| frontend/src/pages/Library.jsx | Enhanced Liked Songs with icons and improved empty states |
| frontend/src/components/PlaylistCard.jsx | Added special styling treatment for Liked Songs playlist |
| backend/streamify_api/settings.py | Added fallback values for Django settings in development |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| const timer = setTimeout(() => { | ||
| if (!currentUser) { | ||
| navigate('/home', { replace: true }); | ||
| } | ||
| }, 1000); | ||
| return () => clearTimeout(timer); |
Copilot
AI
Oct 26, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Auto-navigation bypasses authentication in development mode. This creates a security risk if deployed to production, as users without valid authentication could access protected routes. The condition should check for a development environment flag before enabling auto-navigation.
| const timer = setTimeout(() => { | |
| if (!currentUser) { | |
| navigate('/home', { replace: true }); | |
| } | |
| }, 1000); | |
| return () => clearTimeout(timer); | |
| if (process.env.NODE_ENV === 'development') { | |
| const timer = setTimeout(() => { | |
| if (!currentUser) { | |
| navigate('/home', { replace: true }); | |
| } | |
| }, 1000); | |
| return () => clearTimeout(timer); | |
| } |
| setCurrentUser({ | ||
| uid: 'demo-user', | ||
| displayName: 'Demo User', | ||
| email: 'demo@example.com' | ||
| }); |
Copilot
AI
Oct 26, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Creating a demo user when authentication fails poses a security vulnerability. This bypasses authentication entirely and could allow unauthorized access if accidentally deployed to production. Guard this behavior with an environment check (e.g., process.env.NODE_ENV === 'development').
| setCurrentUser({ | |
| uid: 'demo-user', | |
| displayName: 'Demo User', | |
| email: 'demo@example.com' | |
| }); | |
| if (process.env.NODE_ENV === 'development') { | |
| setCurrentUser({ | |
| uid: 'demo-user', | |
| displayName: 'Demo User', | |
| email: 'demo@example.com' | |
| }); | |
| } else { | |
| setCurrentUser(null); | |
| } |
| apiKey: import.meta.env.VITE_FIREBASE_API_KEY || "demo-api-key", | ||
| authDomain: import.meta.env.VITE_FIREBASE_AUTH_DOMAIN || "demo-project.firebaseapp.com", | ||
| projectId: import.meta.env.VITE_FIREBASE_PROJECT_ID || "demo-project", | ||
| storageBucket: import.meta.env.VITE_FIREBASE_STORAGE_BUCKET || "demo-project.appspot.com", | ||
| messagingSenderId: import.meta.env.VITE_FIREBASE_MESSAGING_SENDER_ID || "123456789", | ||
| appId: import.meta.env.VITE_FIREBASE_APP_ID || "1:123456789:web:abcdef", |
Copilot
AI
Oct 26, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Using hardcoded demo credentials as fallbacks in Firebase config creates a security risk. If these fallbacks are active in production, the application could connect to unintended Firebase instances or fail insecurely. Consider throwing an error in production if environment variables are missing, or explicitly check for development mode before applying fallbacks.
|
|
||
| # SECURITY WARNING: keep the secret key used in production secret! | ||
| SECRET_KEY = os.environ["DJANGO_SECRET_KEY"] | ||
| SECRET_KEY = os.environ.get("DJANGO_SECRET_KEY", "django-insecure-dev-key-change-in-production") |
Copilot
AI
Oct 26, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The fallback secret key is insecure and should never be used in production. Consider raising an exception if the SECRET_KEY environment variable is not set in production environments, rather than silently falling back to an insecure default.
| <div className="library-songs-subtitle"> | ||
| {currentPlaylist.isLiked ? ( | ||
| <> | ||
| <svg width="20" height="20" fill="currentColor" viewBox="0 0 24 24" style={{marginRight: '8px'}}> |
Copilot
AI
Oct 26, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Inline styles should be replaced with CSS classes or design system tokens for consistency. Replace style={{marginRight: '8px'}} with a className that uses var(--space-sm).
| <div className="library-empty"> | ||
| {currentPlaylist.isLiked ? ( | ||
| <> | ||
| <svg width="48" height="48" fill="currentColor" viewBox="0 0 24 24" style={{marginBottom: '16px', opacity: 0.5}}> |
Copilot
AI
Oct 26, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Inline styles should be replaced with CSS classes or design system tokens for consistency. Replace style={{marginBottom: '16px', opacity: 0.5}} with a className that uses design system variables.
| <path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/> | ||
| </svg> | ||
| <div>No liked songs yet</div> | ||
| <div style={{fontSize: '14px', marginTop: '8px', opacity: 0.7}}>Start liking songs to build your collection</div> |
Copilot
AI
Oct 26, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Inline styles should be replaced with CSS classes or design system tokens for consistency. Replace the inline style with a className that uses var(--font-size-sm), var(--space-sm), and appropriate opacity.
| { | ||
| id: 'liked', | ||
| name: 'Liked Songs', | ||
| description: `${likedSongs.length} liked songs`, |
Copilot
AI
Oct 26, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The dynamic description for liked songs should use proper pluralization. When there is exactly 1 song, it should display '1 liked song' instead of '1 liked songs'. Use conditional logic: ${likedSongs.length} liked song${likedSongs.length !== 1 ? 's' : ''}.
| description: `${likedSongs.length} liked songs`, | |
| description: `${likedSongs.length} liked song${likedSongs.length !== 1 ? 's' : ''}`, |
|
@ShirshenduR Please Check |



I have successfully improved the overall UI of Streamify to make it more consistent, modern, and responsive across all devices.
he UI now provides a cleaner, more polished interface that feels consistent and performs well on all screen sizes, with smooth transitions, proper spacing, and a cohesive dark theme throughout the application.
##Responsive Breakpoints:
-Mobile: < 480px
-Tablet: 480px - 768px
-Desktop: > 768px
fixes issue #5