Tiago Santos

Backend Engineer | TypeScript, Node.js, GCP

Fintech, business travel and regulatory compliance at scale

I build backend systems where being wrong is expensive: expense and business-travel spend platforms that have to stay correct, auditable, and legally valid across several European tax regimes.

Cologne, Germany · Portuguese / EU citizen · English C2 (Cambridge CAE, Grade A), German A2

Work

Backend Engineer

Perk · January 2024 - present · Zurich, Switzerland

Expense and business-travel spend platform for enterprises. I joined Yokoy as a backend engineer on the Expense platform, which TravelPerk later acquired and rebranded as Perk. TypeScript and Node.js microservices on GCP (Cloud Run, Cloud Functions), Firestore and MongoDB, PostgreSQL, Terraform, Datadog.

  • Led France receipt digitization from refinement to full rollout: receipts converted to PDF/A-3 with lossless compression, XMP metadata, internal timestamping, and digital signature, gated per legal entity behind a feature flag. A legal prerequisite for selling in France.
  • Found, while verifying that rollout, that receipts for Spanish legal entities had been signed for months with an expired certificate, making them legally invalid, with no alerting or error logging to catch it. Scoped the affected records and built the expiry monitoring and alerting now in place.
  • Owned travel-to-expense integrations (TravelPerk, Egencia): booking import, duplicate and credit-note handling, lodge-card matching, and auto-submission of pre-approved travel expenses into the expense workflow.
  • Implemented a new expense action API so a stale client could no longer silently overwrite a document.
  • Standardized user-facing errors and workflow notifications onto a localization-key contract, across the expense backend and a shared workflow library, so users can see what went wrong and fix it themselves instead of opening a support ticket, against a team goal of halving support volume.
  • Reliability: Datadog monitors and structured audit logs for the signing pipeline, expand/contract PostgreSQL migrations, and a regular firefighter rotation. Traced a callback race from production logs that had orphaned 610 expense records over 20 months.
  • Work agent-first in Cursor: I plan and design the change, delegate implementation to MCP-connected agents, and verify the result myself.

Software Engineer (Technical Lead)

Etops · September 2022 - December 2023 · Zurich, Switzerland

Globalance World: a sustainability and wealth-impact analytics platform for a Zurich private bank, ingesting third-party provider data and computing impact metrics at security, portfolio and country level across 12,000 portfolios and 300,000 securities. TypeScript and Node.js services on MongoDB and Redis, React frontends, Docker and CI/CD.

  • Took the platform over when the senior engineer and the CTO left at the same time, as the only person who knew how the systems worked, and was sole owner of around 50 repositories for about a year.
  • Ran requirements directly with the bank's stakeholders, finance specialists with no software background: worked out what was feasible, then designed and implemented it.
  • Owned delivery end to end, including the servers, deployments and production maintenance.
  • The client brought a platform's frontend in-house from an external vendor on the strength of our delivery record, after earlier attempts to win that work had not succeeded; I took it on and owned it for my last four months.
  • Interviewed and selected the engineer for the one opening I was given, then onboarded him across the codebase and ran his code reviews.
  • Handed the work over to a team of three on my departure.

Software Engineer (Full Stack)

Etops · September 2020 - August 2022 · Zurich, Switzerland

Stack: TypeScript, Node.js, React, Go, MongoDB, Redis, Docker, CI/CD.

  • Built a machine-learning document parser for a Swiss financial institution that recognized and extracted text from scanned document images, using Azure Cognitive Services, TensorFlow, Detectron2 and YOLOv5 with COCO, YOLO and LabelMe datasets. Several backend services and one frontend.
  • Contributed to and maintained a data warehouse platform for a Swiss financial institution, across several backend services and one frontend.
  • Worked on the Globalance World analytics platform in a three-person team with a senior engineer and the CTO, and took it over when they left.

BI Developer, previously BI Intern

Bondalti · 2016 - 2017 · Portugal

SAP BW and Power BI reporting alongside my Computer Science degree: datasource activation, transformations and data transfer processes from SAP R/3 into SAP BW, process chains to automate master and transactional loads, and Power BI dashboards built with DAX.

Writing

The Startup, on Medium

How to Deploy an HTTPS Node.js, PostgreSQL, Redis Back-end, and a React Front-end to AWS

A step-by-step tutorial for deploying a single-instance HTTPS stack on AWS: a Node.js API with PostgreSQL on RDS and Redis on ElastiCache, plus a React frontend on Amplify. The core problem it solves is serving HTTPS without a load balancer, terminating TLS on the EC2 instance itself with NGINX and a Let's Encrypt certificate on Elastic Beanstalk. It also covers the workarounds the standard instructions do not: patching certbot to recognize Amazon Linux 2, the Elastic Beanstalk NGINX config conflict, and the 63-character hostname limit that breaks certificate issuance.

July 2020 · 11.1K views · 3.8K reads · 17 min read

Read It