NoteX is a web application designed as part of a Software Engineering course. Its goal is to provide a social platform where students can freely share their notes.
A working demo of the frontend is online at https://b3nny01.github.io/NoteX/
The development of NoteX followed a Rational Unified Process (RUP)-inspired methodology, divided into three key phases:
- Requirements Analysis: Clearly defined the application's requirements to understand its intended functionality.
- Problem Analysis: Identified challenges and proposed technology-independent solutions, focusing on developing the initial application domain model.
- Project and Implementation: Translated the analysis into a concrete project, defining the system architecture and creating a working prototype.
After the Requirements Analysis, we created the following use case diagram:
The application involves four primary actors:
- User: An unauthenticated user who can search and download notes.
- SignedUser: A logged-in user who can:
- Create, delete, and modify notebooks and notes within their virtual desk.
- Review and report other users' notes.
- Assistant: Manages reported users and can shadow ban accounts.
- Administrator: Manages Assistant accounts and can restore user accounts.
During Problem Analysis, we developed the first version of the domain model, starting with actor translation into classes:
A key aspect was the relationship between a SignedUser and their VirtualDesk:
We also modeled the concept of Reports, where users can report others, and Assistants manage these reports:
NoteX follows a three-layer architecture:
- Client: Built with React, the frontend interacts with the server through REST-inspired APIs. We used the create-react-app workflow, with a Node intermediary server. During the frontend development we used a mock version of the APIs, these mock APIs are the same used in the prototype deployed on github-pages
- Server: The backend is powered by Java EE, with APIs organized into groups (e.g., registration, loginAndAuth, user management). Each group is managed by a servlet that delegates business logic to a controller. Controllers retrieve domain classes via Hibernate, execute methods, and persist changes.
- Persistence: Persistence is managed by an RDBMS for domain-related data (e.g., user info, notebook names) and a web server for note files. This hybrid approach was chosen for simplicity and efficiency.
Release Architecture:
Here are the main pages of NoteX:
To simplify deployment, NoteX uses Gradle (v8.9, or gradlew), npm (v9.2.0), Node.js (v18.19.0), and Docker (v26.1.4).
To test the release architecture of the prototype,
open the frontend/src/data/api.js file and change the ip variable with your ip address, then navigate to the project folder and run:
./gradlew deployThis task will:
- Remove previous NoteX-related Docker containers.
- Generate the backend notex_backend.war using Gradle in the backend/build/libs folder.
- Build the frontend in the build folder using npm.
- Create and activate new application containers using Docker Compose.
Then, open Chrome and go to <your_ip>:8080/notex_frontend, which should display the following screen:
To test the frontend development architecture open the frontend/src/data/api.js file and change the APIs variable at the end of the file from
const APIs=APIs_REALto
const APIs=APIs_MOCKThen open a terminal in the frontend folder and run:
npm startThis will start a Node server at localhost:3000/notex_frontend. Open this link in Chrome to view the NoteX homepage.
A working demo of the frontend is online at https://b3nny01.github.io/NoteX/
Note
The online demo only comprehends the frontend, for this reason every backend request (sign in, login, notebook creation, ...) is simulated and produces no real modification
The project has been developed by: