A beautiful, fully customizable wedding website template built with React and Tailwind CSS. 100% FREE - no credit card required! Perfect for couples who want to share their special day with guests through a modern, self-hostable web application.
- π¨ Beautiful, Modern UI - Apple-inspired design that looks great on all devices
- πΈ Photo Upload & Gallery - Guests can upload photos and view them in the gallery (stored in Google Drive - FREE, automatically displayed)
- π Blessings & Messages - Collect heartfelt messages (stored in Google Sheets - FREE)
- π Event Management & RSVP - Display multiple events with RSVP functionality
- π Our Story - Share your love story with customizable sections
- π₯ Wedding Party - Showcase bridesmaids and groomsmen
- π Registry - Link to gift registries and cash funds
βοΈ Travel & Accommodation - Share hotel info and travel details- β FAQ - Answer common questions
- β±οΈ Timeline - Show relationship milestones
- π Multi-Cultural Support - Pre-configured for Hindu and Christian weddings
- βοΈ Fully Configurable - Enable/disable features, customize everything
- π Free Deployment - Deploy to Netlify (FREE tier)
- Node.js (v14 or higher) - Download here
- A Google account (FREE) - for Drive and Sheets
- A Netlify account (FREE) - for hosting
That's it! No credit card needed for any service.
-
Clone the repository
git clone <your-repo-url> cd wedding-invite
-
Install dependencies
npm install
-
Configure your site
- Edit
src/siteConfig.jsto customize all content - Copy
env.example.txtto.envand add your secrets (see setup guide below)
- Edit
-
Start the development server
npm start
The app will open at
http://localhost:3000
All features are enabled by default. To disable any feature, edit src/siteConfig.js:
features: {
homepage: { enabled: true, label: "Home" },
ourStory: { enabled: true, label: "Our Story" },
events: { enabled: true, label: "Events & RSVP" },
photoGallery: { enabled: true, label: "Photo Gallery" },
uploadPhotos: { enabled: true, label: "Upload Photos" },
blessings: { enabled: true, label: "Blessings" },
weddingParty: { enabled: true, label: "Wedding Party" },
registry: { enabled: true, label: "Registry" },
travel: { enabled: true, label: "Travel & Accommodation" },
faq: { enabled: true, label: "FAQ" },
timeline: { enabled: true, label: "Timeline" },
}To disable a feature: Change enabled: true to enabled: false
The template supports multiple wedding traditions. Set your wedding type in src/siteConfig.js:
weddingType: "hindu", // Options: "hindu", "christian", "custom"- Pre-configured events: Engagement, Haldi, Mehndi, Sangeet, Baraat, Vidhi, Reception
- Traditional terminology and dress codes
- See
src/examples/hindu-wedding-config.jsfor example
- Pre-configured events: Rehearsal Dinner, Ceremony, Cocktail Hour, Reception, After Party
- Church-friendly content
- See
src/examples/christian-wedding-config.jsfor example
- Create your own event list
- Fully customizable for any tradition or style
Purpose: Store blessings/messages and RSVP data
- Go to Google Sheets
- Create a new spreadsheet
- Name it "Wedding Blessings" (or any name you prefer)
- Add headers in row 1 (optional but recommended):
- Column A:
Name - Column B:
Email - Column C:
Message - Column D:
Timestamp
- Column A:
- Copy the Spreadsheet ID from the URL:
The part after
https://docs.google.com/spreadsheets/d/SPREADSHEET_ID_HERE/edit/d/and before/editis your Spreadsheet ID - Save this ID - you'll need it later
Cost: FREE (unlimited spreadsheets)
Purpose: Store uploaded photos
- Go to Google Drive
- Create a new folder (name it "Wedding Photos" or similar)
- Open the folder
- Copy the Folder ID from the URL:
The part after
https://drive.google.com/drive/folders/FOLDER_ID_HERE/folders/is your Folder ID - Save this ID - you'll need it later
Cost: FREE (15GB free storage - more than enough for wedding photos)
Purpose: Enable API access for Drive and Sheets
- Go to Google Cloud Console
- Sign in with your Google account
- Create a new project:
- Click the project dropdown at the top
- Click "New Project"
- Name it "Wedding Website" (or any name)
- Click "Create"
- Important: No billing account needed - click "Skip" if asked
- Enable APIs:
- Go to "APIs & Services" > "Library"
- Search for "Google Drive API" and click "Enable"
- Search for "Google Sheets API" and click "Enable"
- Create Service Account:
- Go to "IAM & Admin" > "Service Accounts"
- Click "Create Service Account"
- Name: "wedding-website" (or any name)
- Click "Create and Continue"
- Skip role assignment (click "Continue")
- Click "Done"
- Create Key:
- Click on your newly created service account
- Go to "Keys" tab
- Click "Add Key" > "Create new key"
- Choose "JSON" format
- Click "Create"
- The JSON file will download automatically
- Get Service Account Email:
- In the service account details, copy the email address (looks like
wedding-website@project-id.iam.gserviceaccount.com) - You'll need this to share folders/sheets
- In the service account details, copy the email address (looks like
Cost: FREE (free tier includes more than enough API calls for a wedding website)
-
Share Google Drive Folder:
- Open your Google Drive folder
- Click "Share"
- Paste your service account email
- Give it "Editor" permissions
- Click "Send"
-
Share Google Sheet:
- Open your Google Sheet
- Click "Share"
- Paste your service account email
- Give it "Editor" permissions
- Click "Send"
-
Copy
env.example.txtto.env:cp env.example.txt .env
-
Open
.envand fill in your values:GOOGLE_SERVICE_ACCOUNT_JSON:
- Open the JSON file you downloaded from Google Cloud
- Copy the ENTIRE contents (it's one long line)
- Paste it in
.envafter the=sign - Example:
GOOGLE_SERVICE_ACCOUNT_JSON={"type":"service_account","project_id":"your-project",...}
GOOGLE_DRIVE_FOLDER_ID:
- Paste the folder ID you saved from Step 2
- Example:
GOOGLE_DRIVE_FOLDER_ID=ABC123XYZ789
GOOGLE_SPREADSHEET_ID:
- Paste the spreadsheet ID you saved from Step 1
- Example:
GOOGLE_SPREADSHEET_ID=XYZ789ABC123
REACT_APP_RSVP_API_URL:
- Leave empty if not using Google Apps Script
- Or add your Google Apps Script URL if you have one
-
Save the
.envfile
Important: Never commit your .env file to git! It's already in .gitignore.
-
Start the development server:
npm start
-
Test the features:
- Upload a photo (should appear in your Google Drive folder)
- Check Photo Gallery page - uploaded photos should appear there
- Submit a blessing (should appear in your Google Sheet)
- Check RSVP functionality
Important for Photo Gallery:
- Uploaded photos will automatically appear in the Photo Gallery
- Make sure your Google Drive folder is shared with "Anyone with the link" (Viewer permission) for photos to display properly
- Or share each uploaded file individually with "Anyone with the link"
- You can disable showing uploaded photos by setting
showUploadedPhotos: falseinsiteConfig.js
-
Push your code to GitHub:
- Create a GitHub repository
- Push your code (make sure
.envis NOT committed)
-
Connect to Netlify:
- Go to Netlify
- Sign up/login (FREE)
- Click "Add new site" > "Import an existing project"
- Connect to GitHub
- Select your repository
-
Configure Build Settings:
- Build command:
npm run build - Publish directory:
build - Click "Deploy site"
- Build command:
-
Add Environment Variables:
- Go to Site Settings > Environment Variables
- Add each variable from your
.envfile:GOOGLE_SERVICE_ACCOUNT_JSON(paste the entire JSON)GOOGLE_DRIVE_FOLDER_IDGOOGLE_SPREADSHEET_IDREACT_APP_RSVP_API_URL(if using)
-
Redeploy:
- Go to Deploys tab
- Click "Trigger deploy" > "Clear cache and deploy site"
-
Your site is live!
- Netlify will give you a URL like
your-site.netlify.app - You can add a custom domain (FREE) in Site Settings > Domain Management
- Netlify will give you a URL like
Cost: FREE (Netlify free tier includes 100GB bandwidth/month - more than enough)
# Install Netlify CLI
npm install -g netlify-cli
# Login to Netlify
netlify login
# Deploy
netlify deploy --prodAll customizable content is in src/siteConfig.js. Edit this file to personalize:
- Couple Information: Names, display name, photos
- Wedding Date: For countdown timer
- Homepage: Title, subtitle, call-to-action
- Our Story: Partner stories, how we met, proposal, milestones
- Events: Event details, dates, venues, maps, dress codes
- Wedding Party: Bridesmaids and groomsmen
- Registry: Gift registries and cash funds
- Travel: Hotels, transportation, local attractions
- FAQ: Common questions and answers
- Timeline: Relationship milestones
See src/examples/ folder for:
hindu-wedding-config.js- Hindu wedding templatechristian-wedding-config.js- Christian wedding templateminimal-config.js- Minimal setup template
-
Replace placeholder images in
public/images/:partner1.svgβ Your photopartner2.svgβ Your photophoto1.svgthroughphoto4.svgβ Your memory photoshomage_page_background.pngβ Your background image
-
Update image paths in
src/siteConfig.jsif using different filenames
The project uses Tailwind CSS. Customize styles by:
- Editing component files directly
- Modifying
tailwind.config.jsfor theme customization - Adding custom CSS in
src/index.css
Your blessings will be stored with columns:
- Name: Guest's name
- Email: Guest's email
- Message: Their blessing/message
- Timestamp: When it was submitted
Uploaded photos will be stored in your specified folder with:
- Original filename
- Upload timestamp
- Any captions (if enabled)
- "Permission denied": Ensure service account has Editor access to Drive folder and Sheet
- "Invalid credentials": Check that
GOOGLE_SERVICE_ACCOUNT_JSONis valid JSON (one line, no breaks) - "Folder not found": Verify
GOOGLE_DRIVE_FOLDER_IDis correct (from URL after/folders/) - "Spreadsheet not found": Verify
GOOGLE_SPREADSHEET_IDis correct (from URL after/d/)
- Module not found: Run
npm install - Environment variables not loading:
- Ensure
.envfile exists in root directory - For Netlify: Add variables in dashboard, not
.envfile - Variable names must match exactly (case-sensitive)
- Ensure
- Netlify functions not working: Check environment variables are set in Netlify dashboard
- Photos not uploading: Verify
GOOGLE_DRIVE_FOLDER_IDand service account permissions - Blessings not saving: Verify
GOOGLE_SPREADSHEET_IDand service account permissions
Everything is FREE:
- β Google Account - FREE
- β Google Drive (15GB) - FREE
- β Google Sheets (unlimited) - FREE
- β Google Cloud APIs (free tier) - FREE
- β Netlify Hosting (100GB bandwidth/month) - FREE
- β Custom Domain (optional) - ~$10-15/year (not required)
Total Cost: $0 (or ~$10-15/year if you want a custom domain)
- Google Cloud Console
- Google Drive
- Google Sheets
- Netlify Documentation
- React Documentation
- Tailwind CSS Documentation
Contributions are welcome! Please see CONTRIBUTING.md for guidelines on how to contribute.
ISC License - feel free to use this template for your wedding website!
For issues and questions, please open an issue on GitHub.
Made with β€οΈ for couples celebrating their special day
Remember: This entire setup is FREE. No credit card required. No hidden costs. Just follow the steps above and you'll have a beautiful wedding website in no time!










