A nostalgic Napster-style interface that lets you search for artists and play songs via the Spotify API.
This project recreates the nostalgic interface of the original Napster v2.0 client, bringing back the classic Windows 98 aesthetic while providing modern Spotify integration.
Screenshot made with getpixxel.com
- Authentic Win98 UI: A recreation of Windows 98/Napster v2.0 interface
- Spotify Integration: Search and play tracks using Spotify's API
- Full Track Playback: Spotify Web Playback SDK integration for full tracks
- Responsive Design: Works on desktop and mobile devices
- Classic Napster Feel: Complete with fake user data, connection types, and file sizes
- Framework: Next.js 15.5.2 (App Router)
- Language: TypeScript 5
- Styling: Tailwind CSS 3.3.0 with custom Win98 utilities
- Authentication: NextAuth.js 4.24.11 with Spotify OAuth
- Audio: Spotify Web Playback SDK
- Deployment: Vercel-ready
- Node.js 18+
- Spotify Developer Account
- ngrok (for local HTTPS development)
-
Clone the repository
git clone https://github.com/yourusername/napstify.git cd napstify -
Install dependencies
npm install
-
Set up environment variables
cp env.example .env.local
Fill in your Spotify credentials:
SPOTIFY_CLIENT_ID=your_spotify_client_id SPOTIFY_CLIENT_SECRET=your_spotify_client_secret NEXTAUTH_URL=http://localhost:3000 NEXTAUTH_SECRET=your_nextauth_secret
-
Configure Spotify App
- Go to Spotify Developer Dashboard
- Create a new app
- Add
http://localhost:3000/api/auth/callback/spotifyto Redirect URIs - Copy Client ID and Client Secret to
.env.local
-
Generate NextAuth Secret
openssl rand -base64 32
Copy the output to
NEXTAUTH_SECRETin your.env.local -
Start development server
npm run dev
-
For HTTPS (required for Spotify OAuth)
npx ngrok http 3000
Update
NEXTAUTH_URLand Spotify redirect URI with the ngrok URL.
napstify/
├── app/ # Next.js App Router
│ ├── api/ # API routes
│ │ ├── auth/ # NextAuth.js authentication
│ │ └── search/ # Spotify search API proxy
│ ├── globals.css # Global styles
│ ├── layout.tsx # Root layout
│ ├── page.tsx # Main page
│ └── providers.tsx # NextAuth provider wrapper
├── components/ # React components
│ ├── AudioController.ts # Audio playback logic
│ ├── Icons98.tsx # Win98-style icons
│ ├── ResultsTable.tsx # Search results table
│ ├── SpotifyPlayer.ts # Spotify Web Playback SDK
│ ├── Toolbar98.tsx # Win98 toolbar
│ ├── Win98Modal.tsx # Win98-style modals
│ └── Win98Window.tsx # Main window component
├── lib/ # Utility libraries
│ └── spotify.ts # Spotify API integration
├── types/ # TypeScript type definitions
│ └── next-auth.d.ts # NextAuth type extensions
├── tailwind.config.ts # Tailwind configuration
├── env.example # Environment variables template
└── README.md # This file
The Win98 color palette is defined in tailwind.config.ts:
colors: {
'win98': {
face: '#d5d2c9', // Main background
light: '#ffffff', // Highlight color
shadow: '#808080', // Shadow color
dark: '#000000', // Border color
titlebar: '#000080', // Title bar blue
}
}All Win98-styled components use Tailwind utilities:
.win98-btn- 3D beveled buttons.win98-input- Sunken input fields.win98-titlebar- Blue gradient title bar.win98-table-header- Table headers
Want to help? Check out CONTRIBUTING.md for details. It's pretty simple - just fork, make changes, and submit a PR!
MIT License - see LICENSE for details.
Made with ❤️ for all the people who installed viruses on their parents computer.
