Skip to content

Repository files navigation

matrimony

Your very own wedding website!

A beautiful, easy-to-deploy wedding website for you and your partner. Guests can save the date, confirm their RSVP, and take part in a wedding-day photo challenge - all managed through a simple admin panel. This is an adaptation of my own wedding website that came about when a friend mentioned they might like to run it too.

Screenshots

Home Details
Home page Details page
Photo Challenge Gallery
Photo challenge Gallery
Admin Dashboard Wedding Settings
Admin dashboard Wedding settings

Features

  • Wedding pages for home, details, and live stream
  • Simple admin panel - manage everything from the browser after first login
  • Save the Date form to collect guest contact details before the big day
  • Personalised RSVP links - each guest gets a unique QR code for one-click confirmation
  • Time-locked photo challenge that unlocks automatically on your wedding day
  • Photo gallery of guest-submitted challenge photos, downloadable as a ZIP
  • Email notifications when guests save the date or confirm their RSVP
  • Customisable themes - choose from classic, editorial, minimal, romantic, or luxe layouts with full colour control
  • Optional site password to keep guest pages private until you're ready to share

Deploy

Option 1 - Render (one-click)

Render hosts the app and provisions a PostgreSQL database automatically. All credentials - secret_key, database user, password, and connection URL - are generated by Render and never need to be set manually.

Warning

Render free tier limits: the web service spins down after 15 minutes of inactivity, and uploaded photos are lost on restart (ephemeral disk). The free PostgreSQL instance expires after 30 days. A paid plan is recommended for a live wedding website.

Deploy to Render

Option 2 - Docker

Docker files live in the docker/ directory. Requires Docker and Docker Compose.

cp docker/.env.example docker/.env
# Open docker/.env - set SECRET_KEY and DB_PASS to random values before first run.
# Generate values with: python3 -c "import secrets; print(secrets.token_urlsafe(24))"

docker compose -f docker/docker-compose.yml up -d

Security: docker/.env.example ships with placeholder credentials - always replace SECRET_KEY and DB_PASS with strong unique values before starting the containers.

Open http://localhost:8000 in your browser. On first run you'll be walked through a short setup wizard.

Connecting to an existing PostgreSQL instance? Use the external-db compose file instead:

# Fill in DB_HOST, DB_USER, DB_PASS, DB_NAME in docker/.env (or set DATABASE_URL directly)
docker compose -f docker/docker-compose.external-db.yml up -d

Option 3 - Manual / venv (self-hosted)

For running directly on a server or your local machine with an existing PostgreSQL instance.

1. Create a virtual environment

python -m venv venv
source venv/bin/activate   # Windows: venv\Scripts\activate

2. Install dependencies

pip install -r requirements.txt

3. Configure environment

cp .env.example .env

Open .env and fill in:

  • SECRET_KEY - any long random string
  • DB_HOST, DB_USER, DB_PASS, DB_NAME - your PostgreSQL connection details

4. Set up the database

If you need to create the database and user from scratch (prompts for the root/superuser password):

python setup_database.py

If the database already exists and you just need to create the tables:

python setup_database.py --tables-only

5. Run the app

python app.py

Open http://localhost:5000. The setup wizard will appear on first run to create your admin account and enter your wedding details.

Running in production? Use Gunicorn instead:

gunicorn -w 4 -b 0.0.0.0:8000 app:app

Admin Panel

Once you're set up, log in at /admin to manage everything from the browser - no config files or server restarts needed:

  • Wedding details - couple names, date & time, venue info, registry links, Twitch stream
  • Theme & colours - 5 layout styles and full colour customisation
  • Photo challenges - add, edit, or remove challenges for your guests
  • Guest list - view RSVPs, import/export CSV, send bulk emails
  • Photo gallery - browse and download everything guests submitted
  • Site settings - password protection and email (SMTP) configuration

Tech Stack

  • Backend: Flask, Flask-Mail, Flask-SQLAlchemy
  • Database: PostgreSQL
  • Frontend: Jinja2 templates, custom CSS, vanilla JavaScript

AI Disclaimer

Development of this site made heavy use of AI (Claude Sonnet 4.6) to take it from a custom and highly specific site for myself and my wife to something generic enough for anyone to use. The original site had no admin panel and was driven purely by database entries and YAML config files.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages