invy/README.md
2025-12-29 05:49:05 +02:00

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)

  1. Go to Google Cloud Console
  2. Create a new project or select an existing one
  3. Enable the Google People API
  4. Create OAuth 2.0 credentials:
    • Application type: Web application
    • Authorized JavaScript origins: http://localhost:5173
    • Authorized redirect URIs: http://localhost:5173
  5. Copy the Client ID
  6. Update GOOGLE_CLIENT_ID in frontend/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 guests
  • POST /guests/ - Create a new guest
  • GET /guests/{guest_id} - Get a specific guest
  • PUT /guests/{guest_id} - Update a guest
  • DELETE /guests/{guest_id} - Delete a guest
  • GET /guests/search/ - Search and filter guests
  • POST /import/google - Import contacts from Google

📱 Usage Guide

Adding Guests Manually

  1. Click the "+ Add Guest" button
  2. 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
  3. Click "Add Guest" to save

Importing from Google Contacts

  1. Click the "Import from Google" button
  2. Sign in with your Google account
  3. Grant permission to access your contacts
  4. 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 .env file 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!