A beautiful, responsive wedding website optimized for GitHub Pages with mountain wedding theming.
Live Demo: https://yourusername.github.io/wedding
- ποΈ Mountain Wedding Theme - Warm browns, mountain graphics, clean typography
- π Smart Dark/Light Mode - Manual toggle with persistent storage + system preference
- β‘ Performance Optimized - All advanced features enabled, sub-second loading
- π± Fully Responsive - Mobile-first design, touch-friendly
- π Always-On Features - Countdown, animations, lazy loading, offline support
- π Wedding Focused - Ceremony/reception details, hotels, registry, RSVP
- 100% Free - Hosted on GitHub Pages forever
- Google Forms RSVP - No backend needed
You'll need these tools installed:
- Git - Download here or use GitHub Desktop
- GitHub Account - Sign up free
- Bun - Install here - Fast JavaScript runtime for local development
- Node.js - Download here - Works but slower than Bun
Option A: Fork on GitHub (easiest)
- Click the "Fork" button at the top right of this page
- Name it
wedding(or whatever you want) - Clone to your computer:
git clone https://github.com/YOUR-USERNAME/wedding.git
Option B: Download and create new repo
- Click "Code" β "Download ZIP"
- Extract and rename folder to
wedding - Create new repository on GitHub
- Upload your files
- Go to your repo β Settings β Pages (left sidebar)
- Source: Deploy from a branch
- Branch:
main// (root) - Click Save
β
Your site will be live at: https://YOUR-USERNAME.github.io/wedding
Install Bun (recommended):
# macOS/Linux
curl -fsSL https://bun.sh/install | bash
# Windows (PowerShell)
powershell -c "irm bun.sh/install.ps1 | iex"Or install Node.js (alternative):
- Download from nodejs.org
- Follow installer instructions
- Go to Google Forms (requires Google account)
- Click "Blank" to create a new form
- Add these fields:
- Name (Short answer, Required)
- Email (Short answer, Required)
- Number of Guests (Multiple choice: 1, 2, 3, 4)
- Dietary Restrictions (Paragraph, Optional)
- Message (Paragraph, Optional)
- Click Send β Link icon β Copy link
- Replace
/viewformwith/viewform?embedded=trueat the end
π SECURITY (Important!): Protect from spam:
- Click Settings (gear icon) β Responses
- Turn on "Limit to 1 response"
- Consider adding a passcode question as the first field
- Enable "Response receipts" for confirmations
Open config.yaml in any text editor and update with your details:
couple:
names: "Your Names Here"
date:
display: "10.14.2024"
iso: "2024-10-14T15:00:00"
ceremony:
time: "3:00 PM"
venue: "Beautiful Church"
address: "123 Main St"
city: "Your City, ST 12345"
rsvp:
deadline: "2024-09-14"
form_url: "YOUR_GOOGLE_FORM_URL_HERE"Navigate to your project folder and start the dev server:
cd wedding
# If you have Bun
bun run dev
# If you have Node.js
npm run devVisit http://localhost:3000 to see your site!
When you're happy with your changes:
# Generate the production config
bun run build # or: npm run build
# Commit your changes
git add .
git commit -m "Update wedding details"
git pushβ
Your site is now live! Visit https://YOUR-USERNAME.github.io/wedding
- Forked repository and enabled GitHub Pages
- Installed Bun (or Node.js)
- Created Google Form with security settings
- Updated
config.yamlwith your wedding details - Tested locally with
bun run dev - Built and deployed with
bun run build+git push - Tested on mobile device
- Shared link with partner for approval
couple.names- Your names (e.g., "Jane & John")date.display- Wedding date (e.g., "10.14.2024")date.iso- ISO format for calculations (e.g., "2024-10-14")rsvp.formUrl- Your Google Form URL with?embedded=true
theme.primary- Your wedding color (default: mountain brown #8B4513)theme.font- Google Font name (default: "Montserrat")dressCode- e.g., "Mountain Formal", "Cocktail", "Casual"footer.text- Customize the footer message
Edit the sections array in config.json:
"sections": [
{ "id": "home", "name": "Home" },
{ "id": "details", "name": "Details" },
{ "id": "accommodations", "name": "Hotels", "enabled": false },
{ "id": "rsvp", "name": "RSVP" }
]- Create an
imagesfolder in your repository - Add your images (keep them under 1MB for fast loading)
- Reference in config.json:
"images": {
"hero": "./images/hero.jpg",
"venue": "./images/venue.jpg"
}Change theme.primary in config.yaml:
- Mountain Brown (default):
"#8B4513" - Forest Green:
"#2E8B57" - Classic Gold:
"#d4af37" - Romantic Rose:
"#e8b4b8" - Sage Green:
"#87a96b" - Navy Blue:
"#2c3e50" - Burgundy:
"#800020"
The site includes a share button that:
- On mobile: Opens native share dialog
- On desktop: Copies link to clipboard
- Create a file named
CNAMEwith your domain (e.g.,ourwedding.com) - Configure your domain's DNS to point to GitHub Pages
Add more events to config.json:
"welcome": {
"time": "7:00 PM",
"venue": "Hotel Bar",
"address": "789 Hotel St",
"city": "Your City, ST 12345"
}Add hotel blocks:
"hotels": [
{
"name": "Grand Hotel",
"rate": "$150/night",
"code": "SMITHWEDDING",
"link": "https://hotel.com/wedding-block"
}
]Found a bug or want to add a feature? Pull requests are welcome!
- Hosting: GitHub Pages (free forever)
- Framework: None! Just vanilla HTML/CSS/JS
- RSVP: Google Forms (free, no limits)
- Offline: Service Worker
- Animations: CSS + Intersection Observer
- Sharing: Web Share API
Q: Is this really free? A: Yes! GitHub Pages is free for public repos. Your only cost might be a custom domain (optional).
Q: Can guests RSVP on their phones? A: Yes! The Google Form embed is fully responsive.
Q: What if GitHub Pages goes down? A: The site works offline once visited. GitHub Pages has 99.9% uptime.
Q: Can I add more pages? A: Yes! Create new HTML files and link them in the navigation.
Q: How do I see RSVP responses? A: Check your Google Form responses or link it to a Google Sheet.
IMPORTANT: Protect your RSVP form from spam and uninvited responses:
- Limit Responses: Settings β Responses β "Limit to 1 response"
- Add Passcode: Include a passcode field that only invited guests know
- Email Collection: Require email addresses to track responses
- Response Receipts: Send confirmation emails to respondents
- Review Regularly: Check for suspicious submissions
Example passcode question: "What's the secret word? (Hint: it rhymes with 'love')"
# Start dev server (auto-converts YAML to JSON on-the-fly)
bun run dev # Recommended (faster)
# or
npm run dev # If using Node.js
# Visit http://localhost:3000The dev server automatically converts your config.yaml to JSON, so you see changes instantly!
# Build static config.json for GitHub Pages
bun run build # or: npm run build
# Deploy your changes
git add .
git commit -m "Update wedding details"
git push- Development: Edit human-friendly YAML, dev server converts on-the-fly
- Production: GitHub Pages serves pre-built JSON for maximum speed and reliability
- Best of both worlds: Easy editing + fast loading
bun run dev # Start development server
bun run build # Generate config.json for production- Check that GitHub Pages is enabled in repo Settings
- Make sure you ran
bun run buildbefore pushing - Wait 5-10 minutes for GitHub Pages to deploy
- Validate your YAML syntax - use this tool
- Make sure indentation uses spaces, not tabs
- Check that required fields are filled in
- Ensure Google Form URL ends with
?embedded=true - Test the form URL directly in a browser first
- Check that form allows public responses
# Install dependencies first
bun install # or: npm install
# Then try starting again
bun run dev # or: npm run dev- Create an issue on GitHub
- Check existing issues for solutions
- Test on your phone before sharing with guests
- Keep images small - use TinyPNG to compress
- Set up early - gives you time to make tweaks
- Share the link 2-3 months before the wedding
- Backup your config - save a copy of config.yaml
- Use descriptive commit messages - helps track changes
- Test the RSVP form yourself before going live
Made with β€οΈ for couples who'd rather spend money on their honeymoon than a website.
If this helped you, consider starring the repo to help others find it!