Skip to content

ecrent/web_development_project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

110 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Meeting Time Finder

A full-stack web application that eliminates the back-and-forth of scheduling — helping teams instantly find meeting times that work for everyone.


Overview

Meeting Time Finder lets users create scheduling sessions, submit their availability, and automatically surface the optimal meeting times for the entire group. Built as a portfolio project with production-grade architecture: deployed on AWS, secured with JWT authentication, rate-limited, and covered end-to-end with automated tests.


Features

  • User Authentication — Secure registration and login using JWT access/refresh tokens and bcrypt password hashing
  • Session Management — Create or join scheduling sessions via unique invite codes
  • Availability Input — Submit available time slots through an intuitive interface
  • Optimal Time Finder — Algorithm automatically identifies the best meeting times across all participants
  • Admin Dashboard — Full admin interface for managing users, sessions, and schedules
  • Rate Limiting — API and auth-specific rate limiting to protect against abuse
  • RESTful API — Versioned API (/api/v1) with consistent error handling

Tech Stack

Frontend

Technology Purpose
React 18 UI framework
React Router v6 Client-side routing
Bootstrap Responsive styling
Axios HTTP client
Context API Global state management
Cypress End-to-end testing

Backend

Technology Purpose
Node.js + Express REST API server
PostgreSQL Relational database
JWT (jsonwebtoken) Stateless authentication
Passport.js Auth middleware
bcrypt Password hashing
express-rate-limit API rate limiting
PM2 (ecosystem.config.js) Process management
Docker Compose Local database setup

Cloud & Deployment

Service Purpose
AWS EC2 Backend API hosting
AWS Amplify Frontend hosting & CI/CD
AWS API Gateway API routing
AWS SDK Cloud service integration

Architecture

┌─────────────────────┐       ┌──────────────────────────┐
│   AWS Amplify        │       │   AWS EC2 (Node/Express)  │
│   React Frontend     │──────▶│   REST API  /api/v1       │
│ freetimefinder.click │       │   PM2 Process Manager     │
└─────────────────────┘       └────────────┬─────────────┘
                                            │
                               ┌────────────▼─────────────┐
                               │      PostgreSQL DB         │
                               └──────────────────────────┘

Project Structure

web_development_project/
├── client/                  # React frontend
│   ├── src/                 # Components, pages, context
│   ├── cypress/             # E2E test suites
│   ├── sample env file      # Environment variable template
│   └── package.json
├── server/                  # Node.js/Express backend
│   ├── routes/              # API route handlers
│   ├── middleware/          # Auth, rate limiting
│   ├── config/              # Database configuration
│   ├── db/                  # SQL init scripts
│   ├── utils/               # Helper functions
│   ├── __tests__/           # Jest test suites
│   ├── docker-compose.yml   # Local PostgreSQL setup
│   ├── ecosystem.config.js  # PM2 config
│   ├── sample env file      # Environment variable template
│   └── index.js             # App entry point
└── amplify.yml              # AWS Amplify build config

Getting Started

Prerequisites

1. Clone the Repository

git clone https://github.com/ecrent/web_development_project.git
cd web_development_project

2. Configure Environment Variables

Copy the sample env files and fill in your values:

# Server
cp "server/sample env file" server/.env

# Client
cp "client/sample env file" client/.env

Server .env variables:

NODE_ENV=development
PORT=3000

DATABASE_URL=postgres://user:password@localhost:5432/mydb
DB_QUERY_TIMEOUT=5000
DB_CRITICAL_TIMEOUT=15000

JWT_SECRET=your-secret-here
JWT_EXPIRES_IN=24h
REFRESH_TOKEN_SECRET=your-refresh-secret
REFRESH_TOKEN_EXPIRES_IN=7d

API_URL=http://localhost:3000
CLIENT_URL=http://localhost:3001

DB_POOL_MAX=30
DB_POOL_IDLE_TIMEOUT=30000
DB_CONNECTION_TIMEOUT=15000

3. Start the Database

cd server
docker-compose up -d

4. Initialize the Database Schema

psql -U user -d mydb -f db/db_init.sql

5. Install Dependencies & Run

# Server
cd server
npm install
npm start        # Starts on http://localhost:3000

# Client (in a new terminal)
cd client
npm install
npm start        # Starts on http://localhost:3001

API Overview

All endpoints are prefixed with /api/v1.

Resource Endpoint Description
Auth POST /users/register Register a new user
Auth POST /users/login Login and receive JWT
Sessions GET/POST /sessions List or create sessions
Schedules GET/POST /schedules Manage availability
Optimal Times GET /optimal-times Get best meeting times
Admin GET /admin/* Admin management routes

Testing

Backend (Jest)

cd server
npm test                    # Run all tests
npm run test:coverage       # With coverage report
npm run test:integration    # Integration tests only
npm run test:security       # Security tests only
npm run test:database       # Database tests only

Frontend (Cypress E2E)

cd client
npm run cypress:open        # Interactive mode
npm run cypress:run         # Headless mode
npm run test:e2e            # Start app + run E2E tests

E2E test coverage:

  • auth.cy.js — Registration, login, and auth flows
  • session-flow.cy.js — Creating and joining sessions
  • schedule.cy.js — Managing availability
  • results.cy.js — Viewing optimal meeting times
  • admin-flows.cy.js — Admin functionality

Deployment

The application is deployed on AWS:

  • Frontend — Hosted on AWS Amplify with automatic CI/CD triggered on pushes to the production branch (configured via amplify.yml)
  • Backend — Hosted on AWS EC2, managed with PM2 for process persistence and auto-restart
  • API Gateway — AWS API Gateway routes traffic to the EC2 backend
  • Database — PostgreSQL instance connected via DATABASE_URL

License

This project is licensed under the MIT License.

Copyright (c) 2025 ecrent

About

A full-stack web application that eliminates the back-and-forth of scheduling — helping teams instantly find meeting times that work for everyone.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Generated from github/codespaces-express