"It's a Date!" β The Ultimate Connection App for Unforgettable Experiences Together
"It's a Date!" is the app that simplifies planning and brings you closer to your friends and partners. Say goodbye to endless messaging and indecisiveness, and hello to seamless coordination for your perfect date! Our app simplifies the process by offering 30 exciting date ideas for you to select from. Whether you're looking for a romantic dinner, an adventurous outdoor escapade, or a cozy movie night, we've got you covered. Invite your friend or partner to a date and they receive an instant, real-time notification. When both users choose the same plan, they instantly match and unlock a dedicated page with a detailed description, helpful suggestions, and a map of convenient locations. Users also have access to their notifications and personal profile to review pending invitations and reset their details.
- ReactJS: We will utilize ReactJS to develop a responsive and user-friendly frontend interface. It will handle user interactions, display date ideas, date matches, and provide a seamless experience for our users.
- Node.js: We will use Node.js for the backend to handle the logic of our application.
- MySQL & Sequelize: We will utilize MySQL as the database management system to store information about users, plans, events and selections. We will utilize Sequelize as the ORM to manage our interactions with the database.
The Google Maps API is leveraged to display a map on each "match page" with the intention of adding Google Places pins on this map to suggest useful places related ot the chosen date idea.
- React.js
- MySQL
- Node.js
- NPM
git clone https://github.com/codeop/fs26-group-B.git
cd group-b-project
Before you start, make sure you have MySQL installed on your system. If not, download and install it from the official MySQL site.
To set up the MySQL database, follow these steps:
-
Open your command line interface and start MySQL with this command:
mysql -u root -p -
Create the "planner" database with this command:
CREATE DATABASE planner; -
Connect to the new database with this command:
use planner;
Now, you're ready to use your "planner" database.
Open up the repository in your preferred code editor and create a .env file in the project root directory. In this .env file add the following:
DB_HOST=localhost
DB_USER=root
DB_NAME=planner
DB_PASS= [your db password]
SUPER_SECRET=shhhhh
PUSHER_APP_ID=
PUSHER_KEY=
PUSHER_SECRET=
cluster=
Now create a .env file in the project root directory. In this .env file add the following:
VITE_PUSHER_KEY=
Don't forget to create your .gitignore file and add .env (in both the root directory and client directory)!
To populate the Pusher details in your .env files:
- Navigate to Pusher and create an account.
- Once logged in you should see your Pusher dashboard. Here you need to click "manage" on the channels card.
- Now you can click "Create app" in the top right of the page and fill in the form:
- Fill in a name for the app (we used "its-a-date")
- Select a cluster (we used eu)
- You don't need to tick the box for "Create apps for multiple environments?"
- Frontend: React
- Backend: Node.js
- Navigate to "App Keys" in the left nav and copy the keys you have generated into the .env files that you've just created.
- Open a new terminal
- Navigate to the project directory in the terminal and run the following command to install dependencies:
cd group-b-project
npm install
- Set up the database:
npm run migrate
npm run seed
- Start the application:
npm start
- Open a new terminal (do not close the terminal running the backend)
- Navigate to frontend directory:
cd client
- Install dependencies:
npm install
- Start the application:
npm run dev
Now It's a Date! should be accessible from http://localhost:5173 The backend will be running on port 4000
Here is a brief overview of the API endpoints available:
| Method | URL | Description |
|---|---|---|
POST |
/auth/register |
Register user |
POST |
/auth/login |
Login user |
GET |
/auth/profile |
Access logged in user info |
GET |
/users |
All registered users |
GET |
/users/{id} |
Get user by ID |
GET |
/users/username/{username} |
Get user by username |
DELETE |
/users |
Delete all users |
POST |
/events |
Create new event |
GET |
/events |
Get all events |
GET |
/events/{eventId} |
Get event by ID |
GET |
/events/private/hash |
Get event by hash |
GET |
/events/user |
Get open events by user ID |
GET |
/events/user/{eventId} |
Get unlogged user by event ID |
DELETE |
/events |
Delete all events |
GET |
/plans |
Get all plans |
GET |
/plans/{planId} |
Get plan by ID |
POST |
/selections |
Create a selection assigning a plan for the user1 then check if the same plan is already in the table for user 2 to response with a match |
GET |
/selections |
Get all selections |
GET |
/selections/{userId}/{eventId} |
Get selection by user ID in given event ID |
DELETE |
/selections |
Delete all selections |