NU Sync is a full-stack social web application built to foster technical collaboration and community engagement among Northeastern students. Designed as a modern reimagining of a Q&A platform, NU Sync integrates user networking, real-time messaging, music sharing, and code collaboration—all within a clean, interactive interface.
The platform allows users to build connections through customizable profiles, friend requests, and mutual contact discovery. Once connected, users can exchange messages, share music via Spotify, and collaborate through code snippet sharing with built-in execution support for five languages.
Interactive elements include polls on questions, real-time notifications, music taste compatibility indicators, and a Spotify-powered guessing game. Privacy and user control are core to the experience, with features such as custom notification preferences, quiet hours, user blocking, and detailed status settings (online, idle, DND, invisible).
NU Sync supports an enhanced user experience through comprehensive backend testing, a responsive frontend, and seamless integration with third-party services like Spotify and Piston API. Designed and delivered in Agile sprints, the platform exemplifies scalable, user-centric full-stack development with a strong emphasis on interactivity, customization, and collaboration.
Run npm install in the root directory to install all dependencies for the client, server, and shared folders.
{ : .note } Refer to IP1 and IP2 for further instructions related to setting up MongoDB, setting environment variables, and running the client and server.
client: Contains the frontend application code, responsible for the user interface and interacting with the backend. This directory includes all React components and related assets.server: Contains the backend application code, handling the logic, APIs, and database interactions. It serves requests from the client and processes data accordingly.shared: Contains all shared type definitions that are used by both the client and server. This helps maintain consistency and reduces duplication of code between the two folders. The type definitions are imported and shared within each folder'stypes/types.tsfile.
The schemas for the database are documented in the directory server/models/schema.
A class diagram for the schema definition is shown below:
| Endpoint | Method | Description |
|---|---|---|
| /addAnswer | POST | Add a new answer |
| Endpoint | Method | Description |
|---|---|---|
| /addComment | POST | Add a new comment |
| Endpoint | Method | Description |
|---|---|---|
| /addMessage | POST | Add a new message |
| /getMessages | GET | Retrieve all messages |
| Endpoint | Method | Description |
|---|---|---|
| /getQuestion | GET | Fetch questions by filter |
| /getQuestionById/ | GET | Fetch a specific question by ID |
| /addQuestion | POST | Add a new question |
| /upvoteQuestion | POST | Upvote a question |
| /downvoteQuestion | POST | Downvote a question |
| Endpoint | Method | Description |
|---|---|---|
| /getTagsWithQuestionNumber | GET | Fetch tags along with the number of questions |
| /getTagByName/ | GET | Fetch a specific tag by name |
| Endpoint | Method | Description |
|---|---|---|
| /signup | POST | Create a new user account |
| /login | POST | Log in as a user |
| /resetPassword | PATCH | Reset user password |
| /getUser/ | GET | Fetch user details by username |
| /getUsers | GET | Fetch all users |
| /deleteUser/ | DELETE | Delete a user by username |
| /updateBiography | PATCH | Update user biography |
| Endpoint | Method | Description |
|---|---|---|
/createChat |
POST | Create a new chat. |
/:chatId/addMessage |
POST | Add a new message to an existing chat. |
/:chatId |
GET | Retrieve a chat by its ID, optionally populating participants and messages. |
/:chatId/addParticipant |
POST | Add a new participant to an existing chat. |
/getChatsByUser/:username |
GET | Retrieve all chats for a specific user based on their username. |
| Endpoint | Method | Description |
|---|---|---|
| /create | POST | Create a new game |
| /join | POST | Join an existing game |
| /leave | POST | Leave a game |
| /games | GET | Retrieve all games |
Mutation testing helps you measure the effectiveness of your tests by introducing small changes (mutations) to your code and checking if your tests catch them. To run mutation testing with Stryker, use the following command in server/:
npm run stryker{ : .note } In case you face an "out of memory" error while running Stryker, use the following command to increase the memory allocation to 4GB for Node.js:
node --max-old-space-size=4096 ./node_modules/.bin/stryker run