Scientific Events
A platform for scientific events with over 100 thousand participants - on-site reception, DOI assignment for papers and proceedings, and a front-end that had to be fast both in the event queue and in the browser of whoever submits a paper.
A scientific event mixes a crowd at the door with metadata rigor in the backend.
Receiving over 100 thousand participants means two problems that don't talk to each other. On-site, it's reception: read the participant's QR, confirm, and print a badge in seconds, because there's a queue behind them. In the backend, it's a scientific catalog: every paper and every proceedings needs a DOI with correct metadata, deposited with a registration agency like Crossref or DataCite.
The codebase already existed and had grown in plain JavaScript. The front-end loaded everything at once and the load time was heavy - especially bad in a product that has to be snappy in the reception queue.
Full-stack engineer weighted toward the front-end, owning the TS migration and the performance work.
- - I led the incremental migration from JavaScript to TypeScript on a large codebase, without stopping product delivery.
- - I drove the front-end performance work: code splitting, bundle reduction, and caching that cut load time by ~40%.
- - I built and maintained the DOI flows - assembling metadata and depositing it with a registration agency for papers and proceedings.
- - I covered the critical flows with end-to-end tests in Cypress, including the on-site reception path.
Understand the event as a physical operation, not just software.
On-site reception has queues, a badge printer, and people waiting. The system has to read the QR and let the participant through in seconds, not a second and a half.
Treat the DOI as a metadata contract, not a text field.
Assigning DOIs to papers and proceedings means assembling metadata in the right shape and depositing it with a registration agency (Crossref / DataCite). If the metadata is wrong, the identifier is born broken.
Attack performance by measuring, not by guessing.
Big bundle, everything loaded at once. Route-based code splitting, bundle reduction, and caching cut load time by around 40% - validated by measurement, not by feel.
Migrate JavaScript to TypeScript incrementally.
No big bang. File-by-file migration, typing the boundaries first, with a green build at every step - the team kept shipping features while the codebase got typed.
A platform used by 100K+ participants got faster in the browser, more predictable in the code, and reliable across the reception and DOI flows.
- - The TypeScript migration removed a whole class of runtime bugs and made large refactors far less scary.
- - The ~40% load-time reduction improved perceived speed in a product used by 100K+ participants.
- - DOI flows started producing identifiers with consistent metadata, with no manual correction rework.
- - The Cypress E2E suite became a real safety net: regressions in check-in and DOI flows got caught before reaching production.