Elio Darras
FreelanceIn production

Application CSI · Université Paris Cité

Doctoral monitoring committee management

csi-universite-paris-cite.local
Real interface · fictional data
The real interface, reconstructed with entirely fictional data.

Case study. No integration, no screenshots, no real data.

Role

Freelance

A full-stack application orchestrating the monitoring committees of around 600 PhD students: four-actor workflow, configurable questionnaire, PDF reports. Presented as a case study, with reconstructed screens and fictional data.

What's inside

  • Four-actor workflow.
  • Configurable questionnaire.
  • PDF report generation.
  • FileMaker integration.
  • Server-side authentication guard and two-factor authentication.
  • GDPR-compliant access logging.

In detail

01What the application is for

Every PhD student must be seen once a year by an individual monitoring committee, required by the decree of 25 May 2016. The committee assesses the thesis progress, working conditions and supervision, then issues a report that conditions re-enrolment.

Before the application, this ran on Word forms, e-mails and spreadsheets, for around 600 PhD students across five departments of the BioSPC doctoral school. The application handles the whole chain: the student's self-assessment, the committee's report, transmission to the department head, the final report, with a PDF at each step. It works alongside FileMaker, which remains the administrative reference.

02A campaign's cycle

Administration imports a CSV or Excel exported from FileMaker. The import is tolerant: it detects encoding and separator, recognises columns by fuzzy matching, and returns statistics. Then it sends the student's link, individually or in bulk on a filtered list.

The student completes their identity, thesis, committee, scientific activities, training hours, answers the self-assessment questions and uploads their scientific report. Their validation automatically sends signed links to the committee members, with the report attached, minus the confidential part.

A single committee member writes the report: interview date, review and correction of the student's answers, conclusion, recommendation, then a confidential section reserved for the school's management. Submission triggers the send to the department head with the full report. Administration finally sends the final report to the student, thesis supervisor in copy.

Six flags describe progress, each with a send counter and timestamp, and compose the import identifier passed to FileMaker.

03Questionnaire, PDF, e-mails, FileMaker

The questionnaire is configured without technical help: target, section, one of ten types, mandatory or not, visible in the PDF or to the committee, confidential or not, with frozen system blocks placed in the desired order. It exports and imports as a whole to prepare a campaign aside.

The PDF is generated on the fly at every request, in nine sections, in two versions: full for the department head, and without the confidential section for the student and the committee. A confidential question is hidden regardless of its visibility flag, and the anomaly is logged.

Twelve editable e-mail templates with variables, five recipient groups per department, direct SMTP from the domain account. Three key-protected export routes feed the FileMaker connector, dynamic answers flattened; MongoDB is the source of truth.

04Security, log, stack

Administration by hashed password then a single-use code sent by e-mail, hashed too, with expiry and lockout after five attempts; a twelve-hour signed session. A global guard protects every route by default, exceptions are explicit. Uploaded files are no longer freely accessible.

Every request is logged: action, actor, resource, file, IP address, status code. The log lives in the database with a twelve-month purge, is searchable with filters, and is forwarded to an external syslog collector so it survives a compromise of the machine.

NestJS 10, Mongoose 8, MongoDB Atlas, pdf-lib, nodemailer, exceljs; React 18 in TypeScript with Formik and Yup. Production on Debian 13, PM2 under a service account, nginx for TLS. About 16,000 lines of TypeScript, 86 files, 50 API endpoints. Known limits, such as the student link without a token, are documented and tracked in the file handed to the security officer.

Presented as a case study, with reconstructed screens and fictional data.