A wedding-planning web application that helps couples organize everything for their big day in one place — guests, tasks, budget, and vendor bookings.
- Authentication — sign up and sign in with JWT-based sessions and bcrypt-hashed passwords.
- Dashboard — a personalized overview pulling together budget, guest count, and recent bookings.
- Guest management — add, edit, and remove guests, grouped by category and side (Bride / Groom / Both), with RSVP and invited-count tracking.
- Task list — a wedding to-do list with due dates and done/undone status.
- Budget tracking — set a total budget and track spending against it from confirmed bookings, with the remaining balance calculated automatically.
- Vendors & bookings — vendor services, bookings, and reviews modeled in the database schema.
| Layer | Technology |
|---|---|
| Runtime | Node.js |
| Server | Express 5 |
| Database | Microsoft SQL Server (via mssql) |
| Auth | jsonwebtoken + bcrypt |
| Config | dotenv |
| Frontend | Static HTML / CSS / vanilla JavaScript |
All database access goes through stored procedures, called from a thin data-access layer in myRepository.js.
SimplyWed-project/
├── app.js # Express app entry point & user routes
├── db.js # SQL Server connection pool
├── middleware.js # JWT authentication middleware
├── myRepository.js # Data-access layer (calls stored procedures)
├── routes/
│ ├── authRoutes.js # /api/auth — signup & signin
│ ├── guestsRoutes.js # /api/guests
│ ├── tasksRoutes.js # /api/tasks
│ └── budgetRoutes.js # /api/budget
├── public/ # Frontend pages (served statically)
│ ├── home, signin, signup
│ ├── userDashboard
│ ├── guests, tasks, budget
│ └── *.css / *.js
├── photos/ # Logo & images (served statically)
├── SimplyWedDB_schema.sql # Database schema (tables)
├── simplywedSP.sql # Stored procedures
└── SimplyWed_Data.sql # Seed / sample data
- Node.js (with npm)
- A running Microsoft SQL Server instance
npm installRun the SQL scripts against your SQL Server instance, in order:
SimplyWedDB_schema.sql— creates theSimplyWeddatabase and tablessimplywedSP.sql— creates the stored proceduresSimplyWed_Data.sql— (optional) loads sample data
Create a .env file in the project root:
DB_USER=your_sql_username
DB_PASSWORD=your_sql_password
DB_SERVER=localhost
DB_NAME=SimplyWed
JWT_SECRET=your_jwt_secretThe
.envfile is git-ignored and should never be committed.
node app.jsThe server starts on http://localhost:3001. Open it in your browser to reach the home page.
All routes are prefixed with /api. Routes marked 🔒 require a valid JWT in the
Authorization: Bearer <token> header.
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/auth/signup |
Register a new user |
| POST | /api/auth/signin |
Sign in and receive a JWT |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/users/userDashboard |
Dashboard data for the user |
| GET | /api/users |
List all users |
| GET | /api/user/:id |
Get a user by id |
| POST | /api/user |
Create a user |
| PUT | /api/user/:id |
Update a user |
| DELETE | /api/user/:id |
Delete a user |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/guests |
List the user's guests |
| GET | /api/guests/categories |
List guest categories |
| GET | /api/guests/:id |
Get a guest by id |
| POST | /api/guests |
Add a guest |
| PUT | /api/guests/:id |
Update a guest |
| DELETE | /api/guests/:id |
Delete a guest |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/tasks |
List the user's tasks |
| GET | /api/tasks/:id |
Get a task by id |
| POST | /api/tasks |
Add a task |
| PUT | /api/tasks/:id |
Update a task |
| DELETE | /api/tasks/:id |
Delete a task |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/budget |
Budget summary (total, spent, remaining, bookings) |
| PUT | /api/budget |
Update the total budget |
The data model centers on the Users table, with related tables for Guests
(and GuestsCategory), Tasks, Vendors (with VendorsCategory and
VendorServices), Bookings, and Reviews. See
SimplyWedDB_schema.sql for the full definition.
