A beautiful, secure wedding website built with Next.js featuring password protection, guest management, and an elegant RSVP system.
- JWT-based password protection for main site and admin dashboard
- Server-side authentication checks to prevent flicker
- HTTP-only cookies for enhanced security
- Cannot be bypassed by cookie manipulation
- Unique RSVP links for each guest/family
- Support for multiple guests per invitation
- Meal preference selection (Beef, Fish, Vegetarian, Kids)
- Special dietary requirements and requests
- Real-time RSVP updates (guests can modify their responses)
- Comprehensive RSVP tracking and statistics
- Guest attendance overview
- Meal count summaries for catering
- Submission timestamps
- Responsive design for mobile management
- Elegant stone and rose color palette
- Animated confetti effects
- Responsive design for all devices
- Floral accent decorations
- Professional typography
- Node.js 18+
- npm, yarn, pnpm, or bun
-
Clone the repository
git clone <your-repo-url> cd wedding
-
Install dependencies
npm install
-
Set up environment variables
Create a
.env.localfile in the root directory:# Password for accessing the wedding site WEDDING_PASSWORD=your_secure_password_here # JWT Secret for signing tokens (generate with: node -e "console.log(require('crypto').randomBytes(64).toString('hex'))") JWT_SECRET=your_very_long_random_jwt_secret_key_here
-
Configure wedding details and guest list
Add your wedding information and guests to the
.env.localfile:# Wedding Details GROOM_NAME=Your Name BRIDE_NAME=Partner Name BRIDE_PARENTS=Bride's Parents Names GROOM_PARENTS=Groom's Parents Names DATE=Your Wedding Date TIME=Reception Time CEREMONY_TIME=Ceremony Time VENUE_NAME=Your Venue Name VENUE_ADDRESS=Venue Address VENUE_CITY=City, State # Guest List (JSON format) GUESTS=[ { "id": "john-smith-abc123", "name": "John Smith", "phoneNumber": "1234567890", "uniqueUrl": "john-smith-abc123", "maxGuests": 2 }, { "id": "sarah-johnson-def456", "name": "Sarah Johnson", "phoneNumber": "0987654321", "uniqueUrl": "sarah-johnson-def456", "maxGuests": 1 } ]
-
Run the development server
npm run dev
-
Open your browser
Visit http://localhost:3000
- Password-protected wedding information
- Beautiful photo display
- Wedding details (date, time, venue)
- Guest list overview (for development)
- Unique URLs for each guest invitation
- Guest attendance confirmation
- Meal preference selection
- Special requests form
- Elegant thank you confirmation
- Password-protected management interface
- Real-time RSVP statistics
- Detailed guest responses
- Meal count summaries
- Export-ready data views
- Framework: Next.js 15 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- Authentication: JWT tokens with HTTP-only cookies
- Deployment: Vercel-ready
- JWT Authentication: Cryptographically signed tokens prevent forgery
- Server-Side Validation: All auth checks happen server-side
- HTTP-Only Cookies: Tokens cannot be accessed by client-side JavaScript
- Automatic Expiration: 24-hour token lifetime
- Production Security: Secure cookies in production environment
src/
├── app/
│ ├── admin/ # Admin dashboard
│ ├── api/ # API routes (auth, RSVP, logout)
│ ├── rsvp/[guestUrl]/ # Individual guest RSVP pages
│ └── page.tsx # Main wedding page
├── components/
│ ├── ElegantConfetti.tsx # Animated confetti effects
│ ├── PasswordProtection.tsx # Auth wrapper component
│ └── RSVPForm.tsx # RSVP form component
├── types/
│ └── index.ts # TypeScript type definitions
└── utils/
├── auth.ts # Authentication utilities
└── guests.ts # Guest data and wedding details
- Push to GitHub
- Connect to Vercel
- Set environment variables in Vercel dashboard:
WEDDING_PASSWORDJWT_SECRET
- Deploy
Works with any Node.js hosting platform. Make sure to:
- Set environment variables
- Use
NODE_ENV=production - Configure secure cookie settings
Update your .env.local file to customize:
- Couple names (
GROOM_NAME,BRIDE_NAME) - Parent names (
BRIDE_PARENTS,GROOM_PARENTS) - Wedding date and times (
DATE,TIME,CEREMONY_TIME) - Venue information (
VENUE_NAME,VENUE_ADDRESS,VENUE_CITY) - Guest list (
GUESTSJSON array)
The design uses Tailwind CSS with a stone/rose color palette:
stone-*for neutral tonesrose-*for accent colors- Easily customizable in component files
- Add new meal options in
RSVPForm.tsx - Modify admin dashboard in
AdminClient.tsx - Customize email notifications (future enhancement)
This project is private and intended for personal wedding use.
Built with ❤️ for your special day