A modern, minimal portfolio website built with Astro, React, and Tailwind CSS. Features a clean design showcasing projects, experience, and real-time Spotify integration.
- Modern Tech Stack: Built with Astro 5, React 19, and Tailwind CSS 4
- Server-Side Rendering: Optimized performance with Astro's hybrid rendering
- Spotify Integration: Real-time display of currently playing or recently played tracks
- Responsive Design: Mobile-first approach with clean, accessible UI
- TypeScript: Fully typed for better development experience
- Component Library: Reusable React components with Phosphor Icons
- Framework: Astro with React integration
- Styling: Tailwind CSS v4
- Type Safety: TypeScript
- Icons: Phosphor Icons
- Deployment: Vercel
- Package Manager: pnpm
- Node.js 18+
- pnpm (recommended) or npm
# Clone the repository
git clone https://github.com/mttwhlly/mttwhlly.github.io.git
cd mttwhlly.github.io
# Install dependencies
pnpm install
# Start development server
pnpm devThe site will be available at http://localhost:4321
For Spotify integration, create a .env file:
SPOTIFY_CLIENT_ID=your_spotify_client_id
SPOTIFY_CLIENT_SECRET=your_spotify_client_secret
SPOTIFY_REFRESH_TOKEN=your_spotify_refresh_tokenpnpm dev # Start development server
pnpm build # Build for production
pnpm preview # Preview production build
pnpm format # Format code with Prettier/
├── public/ # Static assets
├── src/
│ ├── components/ # React components
│ ├── layouts/ # Astro layouts
│ ├── pages/ # Astro pages & API routes
│ ├── styles/ # Global styles
│ ├── types/ # TypeScript definitions
│ └── utils/ # Utility functions
├── astro.config.mjs # Astro configuration
└── tailwind.config.js # Tailwind configuration
To set up the Spotify integration:
- Create a Spotify app at Spotify Developer Dashboard
- Get your Client ID and Client Secret
- Generate a refresh token using the included
spotify-refresh-token-gen.htmltool - Add the credentials to your environment variables
The site is configured for deployment on Vercel:
# Deploy with Vercel CLI
vercel
# Or connect your GitHub repo to Vercel dashboardMake sure to add your environment variables in the Vercel project settings.
The site uses a custom "lemonlime" color palette defined in src/styles/global.css. Modify the CSS custom properties to change the color scheme.
Uses Host Grotesk for sans-serif and Geist Mono for monospaced text, loaded from Google Fonts.
All components are built with React and styled with Tailwind CSS. They're designed to be reusable and accessible.
MIT License - see LICENSE file for details.
This is a personal portfolio site, but feel free to use it as inspiration for your own projects!
Built with ❤️ by Matt Whalley