A modern, responsive website for 45th Parallel, a cover band from Hillsboro, Oregon.
- React with Vite
- Tailwind CSS for styling
- React Router for navigation
npm installnpm run devnpm run buildnpm run previewsrc/
├── components/ # Reusable components
│ ├── Navbar.jsx # Navigation bar with mobile menu
│ ├── Footer.jsx # Site footer with social links
│ ├── Hero.jsx # Hero section component
│ ├── ContactForm.jsx # Booking inquiry form
│ ├── PhotoGallery.jsx # Photo grid with lightbox
│ └── VideoPlayer.jsx # YouTube video embeds
├── pages/ # Page components
│ ├── Home.jsx # Homepage
│ ├── About.jsx # Band bios and story
│ ├── Gallery.jsx # Photo gallery
│ ├── Media.jsx # Videos and song list
│ ├── Calendar.jsx # Upcoming shows
│ └── Contact.jsx # Booking form and contact info
├── App.jsx # Main app with routing
├── main.jsx # Entry point
└── index.css # Tailwind + custom styles
The contact form uses Formspree. To enable it:
- Create a free account at Formspree
- Create a new form and get your form ID
- Update
src/components/ContactForm.jsx:const formspreeEndpoint = 'https://formspree.io/f/YOUR_FORM_ID'
Edit src/pages/Gallery.jsx and update the photos array:
const photos = [
{
id: 1,
src: 'https://your-image-url.jpg',
alt: 'Description of photo',
},
// Add more photos...
]Edit src/pages/Calendar.jsx and update the upcomingEvents array:
const upcomingEvents = [
{
id: 1,
date: '2024-03-15',
time: '8:00 PM',
venue: 'Venue Name',
location: 'City, OR',
description: 'Event description',
ticketLink: 'https://...', // optional
},
// Add more events...
]Edit src/pages/Media.jsx to add YouTube video IDs. You can also embed specific videos by updating the VideoPlayer component.
Social links are in src/components/Footer.jsx. Update the href values in the socialLinks array.
The color scheme is defined in tailwind.config.js:
band-dark: #1a1a2e (dark navy)band-accent: #16213e (accent navy)band-highlight: #e94560 (red/pink accent)band-light: #f5f5f5 (light gray background)
This project is ready for deployment on:
- Netlify: Connect your repo and deploy
- Vercel: Connect your repo and deploy
- GitHub Pages: Run
npm run buildand deploy thedistfolder
If deploying to Netlify, you can use Netlify Forms instead of Formspree:
- Add
data-netlify="true"to your form element - Add a hidden input:
<input type="hidden" name="form-name" value="contact" />
Private - 45th Parallel Band