7.2 KiB
💒 Wedding Guest List App
A full-stack wedding guest list management application built with React + Vite frontend, FastAPI backend, and PostgreSQL database. Easily manage your wedding guests, import contacts from Google, and track RSVPs, meal preferences, and seating arrangements.
✨ Features
- Guest Management: Add, edit, and delete guest information
- Contact Import: Import contacts directly from your Google account
- Search & Filter: Find guests by name, email, phone, RSVP status, or meal preference
- RSVP Tracking: Track pending, accepted, and declined RSVPs
- Meal Preferences: Manage dietary requirements (vegetarian, vegan, gluten-free, kosher, halal)
- Plus-Ones: Track guests with plus-ones
- Table Assignments: Assign guests to tables
- Modern UI: User-friendly interface with a beautiful gradient design
- Mobile Responsive: Works seamlessly on all devices
🛠️ Tech Stack
Frontend
- React 18
- Vite
- Axios for API calls
- CSS3 with modern styling
Backend
- FastAPI
- SQLAlchemy ORM
- PostgreSQL database
- Google People API integration
- Pydantic for data validation
📋 Prerequisites
- Node.js (v16 or higher)
- Python (v3.8 or higher)
- PostgreSQL (v12 or higher)
- Google Cloud Console account (for contact import feature)
🚀 Installation & Setup
1. Clone the Repository
cd c:\Users\dvirl\OneDrive\Desktop\gitea\invy
2. Database Setup
Install PostgreSQL and create a database:
CREATE DATABASE wedding_guests;
3. Backend Setup
cd backend
# Create virtual environment (optional but recommended)
python -m venv venv
# Activate virtual environment
# Windows:
venv\Scripts\activate
# Linux/Mac:
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Create .env file
copy .env.example .env
Edit the .env file with your database credentials:
DATABASE_URL=postgresql://postgres:your_password@localhost:5432/wedding_guests
4. Frontend Setup
cd frontend
# Install dependencies
npm install
5. Google OAuth Setup (Optional - for contact import)
- Go to Google Cloud Console
- Create a new project or select an existing one
- Enable the Google People API
- Create OAuth 2.0 credentials:
- Application type: Web application
- Authorized JavaScript origins:
http://localhost:5173 - Authorized redirect URIs:
http://localhost:5173
- Copy the Client ID
- Update
GOOGLE_CLIENT_IDinfrontend/src/components/GoogleImport.jsx
🎯 Running the Application
Start the Backend Server
cd backend
uvicorn main:app --reload
The API will be available at: http://localhost:8000
API documentation: http://localhost:8000/docs
Start the Frontend Development Server
cd frontend
npm run dev
The application will be available at: http://localhost:5173
📖 API Documentation
Once the backend is running, visit http://localhost:8000/docs for interactive API documentation powered by Swagger UI.
Main Endpoints
GET /guests/- Get all guestsPOST /guests/- Create a new guestGET /guests/{guest_id}- Get a specific guestPUT /guests/{guest_id}- Update a guestDELETE /guests/{guest_id}- Delete a guestGET /guests/search/- Search and filter guestsPOST /import/google- Import contacts from Google
📱 Usage Guide
Adding Guests Manually
- Click the "+ Add Guest" button
- Fill in the guest details:
- First and last name (required)
- Email and phone number (optional)
- RSVP status
- Meal preference
- Plus-one information
- Table number
- Notes
- Click "Add Guest" to save
Importing from Google Contacts
- Click the "Import from Google" button
- Sign in with your Google account
- Grant permission to access your contacts
- Contacts will be imported automatically
Searching and Filtering
Use the search bar and filters to find guests:
- Search by name, email, or phone number
- Filter by RSVP status (pending, accepted, declined)
- Filter by meal preference
- Click "Clear Filters" to reset
Editing and Deleting Guests
- Click "Edit" on any guest row to modify their information
- Click "Delete" to remove a guest (confirmation required)
🗂️ Project Structure
wedding-guest-list/
├── backend/
│ ├── main.py # FastAPI application entry point
│ ├── models.py # SQLAlchemy database models
│ ├── schemas.py # Pydantic schemas for validation
│ ├── crud.py # Database operations
│ ├── database.py # Database configuration
│ ├── google_contacts.py # Google API integration
│ ├── requirements.txt # Python dependencies
│ └── .env.example # Environment variables template
│
├── frontend/
│ ├── src/
│ │ ├── components/ # React components
│ │ │ ├── GuestList.jsx
│ │ │ ├── GuestForm.jsx
│ │ │ ├── SearchFilter.jsx
│ │ │ └── GoogleImport.jsx
│ │ ├── api/ # API client
│ │ │ └── api.js
│ │ ├── App.jsx # Main app component
│ │ └── main.jsx # Application entry point
│ ├── index.html
│ ├── package.json
│ └── vite.config.js
│
└── README.md
🔒 Security Notes
- Never commit your
.envfile or Google OAuth credentials - Use environment variables for sensitive data
- In production, use HTTPS for all communications
- Implement proper authentication and authorization
- Validate all user inputs on both frontend and backend
🚀 Deployment
Backend Deployment
Consider deploying to:
- Heroku (with PostgreSQL add-on)
- Railway
- Render
- AWS EC2 + RDS
Frontend Deployment
Consider deploying to:
- Vercel
- Netlify
- GitHub Pages
Don't forget to update:
- API base URL in
frontend/src/api/api.js - CORS settings in
backend/main.py - Google OAuth redirect URIs
🤝 Contributing
Contributions are welcome! Feel free to:
- Report bugs
- Suggest new features
- Submit pull requests
📝 License
This project is open source and available under the MIT License.
💡 Tips
- Regularly backup your database
- Test the Google import feature with a test account first
- Use the table assignment feature to organize seating
- Export guest data before the wedding day
- Keep track of dietary restrictions for catering
🆘 Troubleshooting
Database Connection Issues
- Verify PostgreSQL is running
- Check database credentials in
.env - Ensure the database exists
Google Import Not Working
- Verify OAuth credentials are correct
- Check that Google People API is enabled
- Ensure redirect URI matches exactly
Frontend Can't Connect to Backend
- Verify backend is running on port 8000
- Check CORS settings in
backend/main.py - Ensure API URL is correct in
frontend/src/api/api.js
📞 Support
For questions or issues, please open an issue on the GitHub repository.
Made with ❤️ for your special day!