6.3 KiB
Wedding and Event Planner
My goal for this project is to be an all-in-one self hosted event planner for major events such as weddings, bridal showers and engagement parties. Users will be able to spin this up as a single Docker container which will create the database and frontend.
Table of Contents
Planned Features
- Account Creation
- First time setup to create the admin user
- Invite users via email (smtp) users can be COUPLE, PLANNER, GUEST
- Create local accounts (no use of SMTP)
- Creating and Editing custom events
- Information about each event
- Date/Time
- Event type
- Details
- Location
- Markdown supported notes
- Information about each event
- Guest book (contact information)
- Ability to switch between table or card view
- Add Guests to events
- Invite guests via email
- Create local account for guest
- Bulk upload
- Creates GuestBookEntry
- Skips dupicates
- Updates entries if uploaded more than once
- Managing RSVP lists
- Guest accounts
- Gift Registries
- Ability for guests to mark an item as purchased
- Task Management
- Custom Theming
Possible Features
- Budget Tracking
- Vendor Tracking
- Seating Charts
- Calendar/Timeline Builder
Updates
6.24.25
- added ability to invite users via email making use of a smtp server and nodemailer
- inviteTokens added to db which are used to sign up and expire onDate and after use
- added ability to create local users if you don't want to use smtp
/admin/create-user - created user pages
- added usernames to
Userstable - updated first time setup to include username creation
6.25.25
- now able to see and edit event data from the individual event page
6.26.25
The Guest Book
- added guest-book page, viewable by PLANNER and COUPLE accounts
- db query is secure behind PLANNER and COUPLE auth sessions
- added ability to add and edit guests to guest book
- save guest infomation (name, email, phone, address, side (which side of the couple), notes)
6.28.25
RSVP List
- add guests from GuestBook to any event
- search GuestBook to add guests
- change status of RSVP
6.29.25 – Notes and Tasks
- Markdown note field per event
- Inline editing with live preview
- Task list per event with due dates & completion toggle
7.24.25 – Notes and Tasks
Major Update
- Added Venues
- Venues are significant locations which can be added to an event.
| Column | Default | Required | Type |
|---|---|---|---|
| Name | null | Yes | String |
| Address | null | Yes | String |
| City/Town | null | Yes | String |
| State | null | Yes | String |
| Postal/Area Code | null | Yes | String |
| Country | 'United States' | Yes | String |
| Phone | null | No | String |
| null | No | String |
- UI changes to Dashboard to make use of Shadcn components
Getting Started
This app is fully deployable with Docker or runnable in development with Node.
Development Mode
- Clone the repo
git clone https://github.com/briannelson95/wedding-planner.git
- Set your enviorment variables
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/wedding_planner
NEXTAUTH_SECRET=your-secret
NEXTAUTH_URL=http://localhost:3000
NEXT_PUBLIC_BASE_URL=http://localhost:3000
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=your@email.com
SMTP_PASS=yourpassword
SMTP_FROM_NAME=Wedding Planner
SMTP_FROM_EMAIL=your@email.com
- Start the database
docker compose up -d db
- Migrate and Generate the Prima files
npx prisma migrate dev --name init
npx prisma generate
- Install dependencies and start app
npm install
npm run dev
Self-Hosted (Production) via Docker
-
Copy
.env.productionMake a copy of your .env as .env.production and customize values. -
Update
docker-compose.ymlAlready included in the repo – here's what it does:
- Runs a postgres:15 container
- Builds the app from the Dockerfile
- Runs migrations before starting the frontend
- Run the app
docker compose up --build
This will expose your instance at http://localhost:3000
Advanced Features
Bulk Uploading Guests to the Guest Book
You can quickly populate your Guest Book by uploading a .csv file with your guest data. This is useful for importing lists from spreadsheets or other planning tools.
Required Format
The CSV file must contain the following column headers:
| Column Name | Required | Description |
|---|---|---|
first |
✅ Yes | First name of guest |
last |
✅ Yes | Last name of guest |
side |
✅ Yes | The side of the couple they are on (e.g., "Bride", "Groom") |
email |
❌ No | Guest's email address |
phone |
❌ No | Guest's phone number |
address |
❌ No | Street address |
notes |
❌ No | Any special notes or details |
Only
first,last, andsideare required — the rest are optional.
Download Example CSV
To helo you get started, you can download a sample CSV file here: Download sample_guest_upload.csv This example includes 2 entries:
- John Smith (side: Groom)
- Jane Dow (side: Bride) Feel free to use this as a template for formatting your own guest lsit before uploading.
Example CSV Content
first,last,side,email,phone,address,notes
Alice,Smith,Brian,alice@example.com,555-1234,"123 Main St","Vegetarian"
Bob,Jones,Kate,bob@example.com,,,
Duplicates
- Uploads skip exact duplicates (based on first and last name).
- If a match is found and new information is available (e.g. a phone number), the guest record will be updated automatically.
Uploading a File
- Navigate to the Guest Book page.
- Click the "Upload CSV" button next to the "Add Guest" button.
- Select a
.csvfile from your computer. - Confirm the filename is displayed.
- Click "Upload" — a confirmation will be shown with the number of guests added or updated.
Built With
- NextJS 15
- NextAuth
- Prisma
- TailwindCSS
- PostgresDB
- Docker