Full-Stack Developer Engineer (NUS FinTech Lab), School of Computing
Skills
About the role
Job Description
.loading-container { display: flex; align-items: center; justify-content: center; height: 0pxflex-direction: column; gap: 0px} .loading-container .impress-loader { border: 0pxsolid #f3f3f3; / Light grey / border-top: 0pxsolid #F49C26; / Blue / border-radius: 50%; width: 0pxheight: 0pxanimation: spin 2s linear infinite; } .impress-fail-screen { color: #484D4E; padding: 0pxdisplay: flex; align-items: center; justify-content: center; flex-direction: column; gap: 0px} .impress-fail-screen a { color: #004EEB; } .impress-fail-screen .impress-fail-text { font-size: 0pxfont-weight: 500; line-height: 0pxtext-align: center; display: flex; align-items: center; justify-content: center; } .impress-fail-screen .impress-fail-subtext { font-size: 0pxfont-weight: 400; line-height: 0pxtext-align: center; display: flex; align-items: center; justify-content: center; } #impress-apply-button-wrapper .impress-apply-button, .impress-fail-screen .impress-fail-button { background-color: #F49C26; padding: 0px0pxborder-radius: 0pxcolor: #FFFFFF; border: none; cursor: pointer; font-size: 0pxfloat: right; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .impress-bot-redirection-modal-wrapper { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "HelveticaNeue", Arial, "Noto Sans",sans-serif,"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol","Noto Color Emoji"; font-size: 0px} .impress-bot-redirection-modal-wrapper .impress-bot-redirection-modal-bg { display: flex; position: fixed; z-index: 9; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); justify-content: center; align-items: center; animation: fadeIn 0.5s; } .impress-bot-redirection-modal-wrapper .impress-bot-redirection-modal-bg .impress-bot-redirection-modal { background-color: white; border-radius: 0pxwidth: 0pxanimation: slideDown 0.5s; } .impress-bot-redirection-modal-wrapper .impress-bot-redirection-modal-bg .impress-bot-redirection-modal .impress-bot-redirection-modal-header { display: flex; justify-content: space-between; padding: 0pxbox-shadow: 0px0px0px0px#F0F0F0 inset; } .impress-bot-redirection-modal-wrapper .impress-bot-redirection-modal-bg .impress-bot-redirection-modal .impress-bot-redirection-modal-header > h4 { font-size: 0pxmargin: 0px4px; color: #484D4E !important; } .impress-bot-redirection-modal-wrapper .impress-bot-redirection-modal-bg .impress-bot-redirection-modal .impress-bot-redirection-modal-header svg { fill: #484D4E; } .impress-bot-redirection-modal-wrapper .impress-bot-redirection-modal-bg .impress-bot-redirection-modal .impress-bot-redirection-modal-header .impress-close-btn { border: none; background: transparent; fill: wheat; cursor: pointer; padding: 0; margin: 0; } .impress-bot-redirection-modal-wrapper .impress-bot-redirection-modal-bg .impress-bot-redirection-modal .impress-bot-redirection-modal-body { padding: 0px0pxdisplay: flex; flex-direction: column; gap: 0pxcolor: #484D4E; box-shadow: 0px0px0px0px#F0F0F0 inset; border-radius: 0pxmargin-bottom: 0; } .impress-bot-redirection-modal-wrapper .impress-bot-redirection-modal-bg .impress-bot-redirection-modal .impress-bot-redirection-modal-body .impress-bot-redirection-modal-input-checkbox-container { display: flex; align-items: center; gap: 0px} .impress-bot-redirection-modal-wrapper .impress-bot-redirection-modal-bg .impress-bot-redirection-modal .impress-bot-redirection-modal-body .impress-bot-redirection-modal-input-checkbox-container input[type=checkbox] { margin: 0; } .impress-bot-redirection-modal-wrapper .impress-bot-redirection-modal-bg .impress-bot-redirection-modal .impress-bot-redirection-modal-body .impress-bot-redirection-modal-input-checkbox-container label { margin: 0; } .impress-bot-redirection-modal-wrapper .impress-bot-redirection-modal-bg .impress-bot-redirection-modal .impress-bot-redirection-modal-body input { box-shadow: none; outline: none; border: none; padding: 0pxborder: 0pxsolid #D9D9D9; border-radius: 0px} .impress-bot-redirection-modal-wrapper .impress-bot-redirection-modal-bg .impress-bot-redirection-modal .impress-bot-redirection-modal-footer { display: flex; align-items: center; justify-content: flex-end; gap: 0px} .impress-bot-redirection-modal-wrapper .impress-bot-redirection-modal-bg .impress-bot-redirection-modal .impress-bot-redirection-modal-footer .impress-bot-redirection-modal-footer-cancel { background-color: #FFFFFF; padding: 0px0pxborder-radius: 0pxcolor: #000000; border: 0pxsolid #D9D9D9; cursor: pointer; } .impress-bot-redirection-modal-wrapper .impress-bot-redirection-modal-bg .impress-bot-redirection-modal .impress-bot-redirection-modal-footer .impress-bot-redirection-modal-footer-continue { background-color: #F49C26; padding: 0px0pxborder-radius: 0pxcolor: #FFFFFF; border: none; cursor: pointer; } .impress-bot-redirection-modal-wrapper .impress-bot-redirection-modal-bg .impress-bot-redirection-modal .impress-bot-redirection-modal-footer .impress-disabled { border: 0pxsolid #999999; background-color: #cccccc; color: #666666; cursor: not-allowed; pointer-events: none !important; } .impress-error-block { display: flex; align-items: center; justify-content: center; color: red; } / Animations / @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes slideDown { from { transform: translateY(-50px); } to { transform: translateY(0); } }
.buttontext7322d4a48bbcfa4c a{ border: 0pxsolid transparent; } .buttontext7322d4a48bbcfa4c a: focus{ border: 0pxdashed #ef7c00 !important; outline: none !important; }
Full-Stack Developer Engineer (NUS FinTech Lab), School of Computing
University-Level Unit:
School of Computing
Faculty/Department-Level Unit:
Dean's Office (School of Computing)
: root{ -nus-blue: #003D7C; / NUS Blue (requested) / -nus-orange: #EF7C00;/ NUS Orange (requested) / -text: #000; -shadow: rgba(0,0,0,0.1); } .nus-custom-job-box { font-family: 'Roboto', sans-serif; border: 0pxsolid var(-nus-blue); border-radius: 0pxbackground: #ffffff; padding: 0px0px0pxmargin: 0 00px0; box-shadow: 00px0pxvar(-shadow); transition: max-height 0.4s ease, padding 0.3s ease; overflow: hidden; / Stretch to container width (remove right gap beside Apply area) / width: 100%; max-width: 100%; box-sizing: border-box; } / Extra inner spacing so title doesn't hug the border / .nus-custom-job-box .box-inner { padding: 0px0px8px; / was 00pxadd top/bottom space / } .nus-custom-job-box.is-d { max-height: 0pxpadding-top: 0pxpadding-bottom: 0px} .nus-custom-job-box: not(.is-d) { max-height: none; } .nus-custom-job-box .box-header { display: flex; align-items: center; cursor: pointer; padding: 0; position: relative; } #main-job-title-heading { font-family: 'Roboto', sans-serif; font-size: 0ptfont-weight: 700; color: var(-nus-blue); margin: 0 !important; padding: 0 !important; line-height: 1.25; text-align: left !important; overflow-wrap: break-word; hyphens: auto; } #main-job-title-heading::before, #main-job-title-heading::marker { content: none !important; } .collapsible-content { transition: max-height 0.4s ease, opacity 0.35s ease 0.1s; opacity: 1; } .nus-custom-job-box.is-d .collapsible-content { max-height: 0; opacity: 0; overflow: hidden; } / Desktop/tablet grid / .overview-rows { display: grid !important; grid-template-columns: minmax(180px, 36%) 1fr; gap: 0px0pxalign-items: start; margin-top: 0pxtext-align: left; } .overview-row { display: contents; } .overview-row .label { font-size: 0ptfont-weight: 700; color: var(-nus-blue); / keep labels in NUS Blue / white-space: normal; text-align: left; padding-right: 0pxline-height: 1.3; } .overview-row .value { font-size: 0ptfont-weight: 400; color: var(-text); text-align: left; line-height: 1.3; overflow-wrap: break-word; } .overview-row strong { font-weight: 700; } .box-footer { display: flex; justify-content: center; align-items: center; margin-top: 0pxpadding-top: 0px} / Keep the toggle in blue to align with text; if you prefer orange, change to var(-nus-orange) / .toggle-btn { background: none; border: none; font-family: 'Roboto', sans-serif; color: var(-nus-blue); font-size: 0pxcursor: pointer; display: inline-flex; align-items: center; gap: 0pxwhite-space: nowrap; } / Responsive adjustments / @media (max-width: 1024px) { / Previously there was a right margin; keep width full on tablet too / .nus-custom-job-box { margin-right: 0; } } / MOBILE FIX: keep two columns and prevent label wrapping vertically / @media (max-width: 768px) { .nus-custom-job-box { margin-right: 0; } .overview-rows { grid-template-columns: minmax(140px, 44%) 1fr; gap: 0px0px} .overview-row .label { font-size: 0ptpadding-right: 0pxline-height: 1.25; } .overview-row .value { font-size: 0ptline-height: 1.25; } #main-job-title-heading { font-size: 0ptline-height: 1.25; } } / Very small devices / @media (max-width: 360px) { .overview-rows { grid-template-columns: minmax(128px, 46%) 1fr; gap: 0px0px} #main-job-title-heading { font-size: 0pt} .overview-row .label, .overview-row .value { font-size: 0pt} } / Turn key action buttons (e.g., ) to NUS Orange. SuccessFactors skins vary, so we target a set of common selectors. Adjust or add site-specific classes as needed. / / Buttons that look like primary actions / .sfbutton, .sf-button, .btn, .button, .rcmjobdetail-apply, .rcmjobdetail-apply button, button[id="apply"], a[id="apply"], .btn-apply, .rcmApplyButton, .rcmApplyBtn, input[type="submit"], input[type="button"].primary, button.primary, a.button.primary { background: var(-nus-orange) !important; border: 0pxsolid var(-nus-orange) !important; color: #fff !important; filter: none !important; opacity: 1 !important; } ..sfbutton: focus, .sf-button: focus, .btn: focus, .button: focus, .rcmjobdetail-apply button: focus, button[id="apply"]: focus, a[id="apply"]: focus, .btn-apply: focus, .rcmApplyButton: focus, .rcmApplyBtn: focus, input[type="submit"]: focus, input[type="button"].primary: focus, button.primary: focus, a.button.primary: focus { outline: 0pxsolid rgba(239,124,0,0.35) !important; outline-offset: 0px}
Job Title: Full-Stack Developer Engineer (NUS FinTech Lab), School of Computing University-Level Unit: School of Computing Faculty/Department-Level Unit: Dean's Office (School of Computing)
Employee Category: Executive & Administrative
Posting Start Date: 18/06/2026
Location_ONB: Kent Ridge Campus
Job Description
Technical Project Development
Design and develop full-stack web or mobile applications for research, prototyping, and proof-of-concept initiatives, covering front-end, back-end, APIs, and databases.
Translate research concepts into functional applications that deliver user value and data-driven insights.
Co-lead and contribute to ongoing projects, including:
Development and maintenance of a simulated trading platform, ensuring performance, reliability, and minimal downtime.
Delivery of a Due Diligence Pipeline aligned with client requirements and timelines.
Operation and maintenance of infrastructure supporting an XRPL validator and EVM sidechain, ensuring high availability and performance.
Identify, troubleshoot, and resolve system issues proactively across the stack.
Mentor and collaborate with interns, supporting the development and testing of prototypes and contributing to open-source knowledge assets in the financial ecosystem.
Maintain well-structured documentation, research logs, and version tracking for all projects.
Developer Community & Industry Outreach
Build and maintain relationships with industry and academic partners through events, conferences, and collaborative initiatives.
Organize and lead community engagement activities such as workshops, lab sessions, brownbag talks, and technical content (e.g., podcasts).
Contribute to growing an active developer ecosystem around the lab’s platforms and research.
Research & Lab Support
Support research initiatives related to open-sourcing the trading simulation platform, including:
Validating methodologies and experimental design
Coordinating experiments and simulations
Collecting and integrating data from industry events and public datasets
Performing data analysis using statistical and computational tools
Participate actively in technical discussions, planning sessions, and cross-functional collaboration.
Maintain and update the lab’s WordPress site with accurate and relevant content.
Support the planning and execution of lab activities and initiatives.
Qualifications
Strong full-stack development experience, with proficiency in modern front-end (e.g., React, Angular) and back-end frameworks (e.g., Node.js, Python). Solid understanding of APIs, databases (SQL/NoSQL), and scalable web architecture.
Experience deploying and maintaining applications on cloud platforms (AWS, GCP, or Azure), including debugging, performance optimization, and ensuring system reliability. Familiarity with Docker and CI/CD is a plus.
Ability to take ownership of end-to-end systems, from development to production, and to work effectively in both product and research-driven environment with evolving requirements.
Fluent with AI tools, APIs and AI App developments.
Familiarity with blockchain or distributed systems (e.g., XRPL, Ethereum) and/or strong interest in learning within the FinTech domain.
Proficiency in data handling and analysis (e.g., Python, R, SQL) to support experimentation and derive insights.
Strong communication and collaboration skills, including the ability to mentor interns, contribute to technical discussions, and engage with external stakeholders or developer communities.
Motivation and initiative to contribute to and grow a developer community, including organizing or supporting events, workshops, or technical content.
Interest in FinTech and willingness to contribute to both technical development and broader lab initiatives.
Experience with WordPress is a plus.
More Information
Location: Kent Ridge Campus
Organization: School of Computing
Department : Dean's Office (School of Computing)
Employee Referral Eligible: No
Job requisition ID : 32180
Questions about this role
Want AI Applyd to auto-apply to roles like this?
We tailor your resume per posting, fill the forms, and track replies for you.