This application was developed to manage student absences for the IT department of Marie & Louis Pasteur University.
Built by a team of 3 students, this project started with an inherited legacy codebase. However, due to its poor code quality, we made the strategic decision to rewrite the entire application from scratch (both client and server architectures).
The project was delivered on time and is fully operational. It was developed over a 4-month period, representing approximately 3 weeks of full-time work for the team, with the remaining effort completed alongside coursework. This experience allowed us to learn and master React, while actively implementing security measures to protect the application against common web vulnerabilities.
- Dashboard: View personal absence history.
- Justifications: Submit absence justifications directly through the app.
- Attendance Tracking: easily take roll call directly from a smartphone or computer during class.
- Absence Management: Validate or reject student justifications.
- System Configuration: Manage user accounts, create subjects, configure special student accommodations (regimes), and adjust global app settings.
- Impersonation System: Ability to act on behalf of a professor to input paper-based attendance, or act on behalf of a student to upload a justification received via email.
- Data Security: Built-in tools to create database backups and restore previous versions directly from the interface.
- Responsive Design: Optimized for both desktop and mobile screens.
- PWA (Progressive Web App): Users can install the application directly onto their smartphones or computers for a native-like experience.
For more details, screenshots of the UI, and in-depth explanations of our technical choices and how we achieved this result, please check our complete project report located at: report/report.pdf.
To ensure the project functions properly, it is recommended to use the following versions. These correspond to our initial development environment:
- Node.js: v23.11.0
- npm: v10.9.2
- React: v19.2.1
At the root of the project, several commands are configured in the package.json to launch the application according to your needs:
npm run dev: Simultaneously launches the server (with automatic reload vianodemon) and the client (in development mode). This is the main command to use during development. The server logs will be displayed in yellow and the client logs in blue.
💡 Note for development: Once launched via
dev, the application is accessible by default on port5173(http://localhost:5173).
npm run quick-prod: Builds the React client application, then launches the Node.js server. Useful in development if your dependencies are already installed and you want to test the final output quickly (with optimizations).npm run prod: The complete command for a clean deployment. It handles the installation of all dependencies (at the root, in the client, and in the server), building the client, and then launching the server in production.
💡 Note for production: Once launched via
quick-prodorprod, the application is accessible by default on port3000(http://localhost:3000).
Create a /server/.env file identical to the /server/.env.example template.
- Replace
JWT_SECRETwith a random 128-character string. You can generate one using this command:node -e "console.log(require('crypto').randomBytes(128).toString('hex'))" - Set
CORS_ORIGINwith your allowed URL (e.g.,https://my-site.com). If you have multiple domains, separate them with a comma (e.g.,https://my-site.com,https://api.my-site.com).
⚠️ For local development only: You can addENABLE_DEV_AUTH=trueto use the test accounts (student, prof, admin) without the LDAP connection. Never enable this in production.
Create the database /server/database/appAbsences.db by executing the following command at the root of the project:
sqlite3 server/database/appAbsences.db < server/database/schema.sqlLaunch the project using the following command at the root:
npm run prodIn a CI environment, simply run npm run prod for everything to be updated automatically (dependency installation, client build, server launch).