A pixel-perfect Spotify UI clone built with pure HTML & CSS
- About The Project
- Demo
- Features
- Built With
- Screenshots
- Folder Structure
- Getting Started
- What I Learned
- Challenges Faced
- Future Enhancements
- Contributing
- License
- Contact
- Acknowledgments
This is a Spotify Web Player Clone that replicates the visual design and layout of Spotify's web interface. Built as a mini-project during my Full Stack Development journey in the Sigma Batch by Apna College, this project showcases fundamental HTML and CSS skills without any backend functionality or AI assistance.
- Course: Full Stack Web Development - Sigma Batch
- Institution: Apna College
- Focus: HTML5 & CSS3 Fundamentals
- Development Approach: Hand-coded without framework dependencies
- AI Usage: Minimal (3-4 queries for loader functionality only)
The goal was to:
- ✅ Apply HTML & CSS concepts learned in the course
- ✅ Practice responsive design principles
- ✅ Recreate a production-grade UI from scratch
- ✅ Build pixel-perfect layouts using Flexbox
- ✅ Understand complex UI component structures
Note: This is a UI-only clone. No audio playback or interactive features are implemented (no JavaScript functionality except for the loading animation).
| Component | Description |
|---|---|
| Sidebar Navigation | Home, Search, and Your Library sections |
| Library Section | Create Playlist & Browse Podcasts cards |
| Sticky Navigation | Backward/Forward navigation with user profile |
| Content Cards | Recently Played, Trending, and Featured Charts |
| Music Player | Bottom fixed player with album info and controls |
| Custom Loading Screen | Animated Spotify logo loader |
| Responsive Design | Mobile-friendly layout (breakpoints at 420px, 600px, 800px, 1000px, 1150px) |
- ✅ Pixel-Perfect Styling - Matches Spotify's design language
- ✅ Custom Scrollbars - Styled to blend seamlessly
- ✅ Hover Effects - Interactive visual feedback
- ✅ Progress Bars - Custom-styled range inputs for playback/volume
- ✅ Font Integration - Montserrat & Poppins from Google Fonts
- ✅ Icon Library - Font Awesome 7.0.1 integration
- ✅ Dark Theme - True-to-original Spotify black theme
|
HTML5 |
CSS3 |
JavaScript (Loader only) |
- HTML5 - Semantic markup structure
- CSS3 - Flexbox, custom properties, animations
- JavaScript - Minimal (page loader only)
- Font Awesome 7.0.1 - Icon library
- Google Fonts - Montserrat & Poppins
spotify-clone/
│
├── index.html # Main HTML file
├── style.css # All styling (1000+ lines)
├── README.md # Project documentation
│
└── assets/ # Image assets
├── logo.png # Spotify logo
├── backward_icon.png # Navigation icons
├── forward_icon.png
├── library_icon.png
├── player_icon1.png # Player control icons
├── player_icon2.png
├── player_icon3.png
├── player_icon4.png
├── player_icon5.png
├── card1img.jpeg # Playlist card images
├── card2img.jpeg
├── card3img.jpeg
├── card4img.jpeg
├── card5img.jpeg
├── card6img.jpeg
├── card7img.jpg # Album cover (music player)
├── card8img.jpg
├── card9img.png
└── card10img.png
Building this project reinforced several key concepts:
- ✅ Semantic HTML structure (
<nav>,<section>,<footer>) - ✅ Proper meta tags for viewport and charset
- ✅ External resource linking (fonts, icons, stylesheets)
- ✅ Organizing complex nested structures
- ✅ Accessibility considerations (alt texts, labels)
- ✅ Flexbox Mastery - Building complex layouts without Grid
- ✅ Custom Properties - CSS variables for theme consistency
- ✅ Pseudo-classes -
:hover,:focus,:activestates - ✅ Media Queries - Responsive breakpoints (420px to 1150px)
- ✅ Custom Styling - Range inputs, scrollbars, and progress bars
- ✅ CSS Animations - Fade pulse effect for loader
- ✅ Positioning -
sticky,fixed,relative,absolute - ✅ Overflow Management - Custom scrollbar styling
- ✅ Gradient Backgrounds - Linear gradients for progress indicators
- ✅ Window event listeners (
loadevent) - ✅ DOM manipulation (class toggling)
- ✅ setTimeout for delayed actions
- ✅ Basic animation timing
- ✅ Visual Hierarchy - Using size, color, and spacing
- ✅ Consistency - Maintaining design patterns throughout
- ✅ Whitespace - Proper spacing for readability
- ✅ Color Theory - Dark theme implementation
- ✅ Typography - Font pairing and sizing
- ✅ User Experience - Hover states and visual feedback
Building this clone presented several learning opportunities:
Challenge: Making sidebar disappear on mobile while keeping content accessible.
Solution: Used @media (max-width: 600px) to hide sidebar with display: none.
Challenge: Styling the progress bar and volume slider to match Spotify's design.
Solution: Used -webkit-slider-thumb and -webkit-slider-runnable-track pseudo-elements with custom gradients.
.progress-bar::-webkit-slider-thumb {
appearance: none;
width: 0.6rem;
height: 0.6rem;
border-radius: 50%;
background-color: #1bd760;
}Challenge: Keeping navigation visible while scrolling through playlists.
Solution: Implemented position: sticky; top: 0; with proper z-index layering.
Challenge: Creating smooth fade-in effect for page content.
Solution: CSS opacity transitions combined with JavaScript event listeners:
window.addEventListener('load', () => {
const loader = document.getElementById('loader');
loader.classList.add('hidden');
setTimeout(() => loader.remove(), 600);
});Challenge: Managing layout across 5+ different screen sizes.
Solution: Strategic media queries at 420px, 600px, 800px, 1000px, and 1150px with conditional displays.
While this is currently a UI-only clone, potential improvements include:
- Add play/pause functionality
- Implement working progress bar (seek functionality)
- Volume control slider
- Search functionality with filtering
- Card click navigation
- Dynamic playlist loading
- Connect to Spotify Web API
- User authentication (OAuth)
- Fetch real playlist data
- Stream audio tracks
- Save user preferences
- Create custom playlists
- Dark/Light theme toggle
- Keyboard shortcuts
- Lyrics display
- Queue management
- Share functionality
- Offline mode (PWA)
- Lazy loading for images
- Code splitting
- Service Worker implementation
- Accessibility improvements (ARIA labels)
This project is for educational purposes only. It is not affiliated with or endorsed by Spotify.
- The Spotify name, logo, and design are trademarks of Spotify AB.
- This project is created purely for learning HTML/CSS and portfolio demonstration.
- Not intended for commercial use or distribution.
MIT License - You're free to use this code for learning and personal projects.
Special thanks to:
- Apna College - For the amazing Full Stack Web Development course (Sigma Batch)
- Spotify - For the inspiration and design reference
- Font Awesome - For the comprehensive icon library
- Google Fonts - For Montserrat and Poppins fonts
- Shradha - For teaching HTML & CSS fundamentals
- MDN Web Docs - CSS reference
- CSS-Tricks - Flexbox guides
- Stack Overflow - Community support
- ChatGPT - Loader functionality clarification (3-4 queries)
Made with ❤️ by Subham
© 2025 Subham | Full Stack Development Journey

