I build decision systems. I take an operational problem, write it down as a model, solve it with the right tool, and then ship the result into something a person actually uses. That means an exact formulation when the problem admits one, and a heuristic when it does not. MSc in Industrial Engineering and Management at Instituto Superior Técnico, currently on exchange in Complex Systems Engineering and Management at TU Delft.
Most of my work sits in one of four places: integer programming and network design, supply-chain and logistics optimization, quantitative finance and market simulation, and, increasingly, automating the document-heavy operational work that surrounds all three.
| Project | What it demonstrates | Stack |
|---|---|---|
| Hop-constrained spanning trees | Network design under a bound on root-to-node hops: an exact MILP alongside a constructive tree-repair heuristic, compared on generated instances | Python · PuLP/CBC · NetworkX |
| Green hydrogen supply chain | National-scale MIP: facility location, renewable allocation, storage, transport and investment timing, with a sensitivity study over the cost drivers | Python · PuLP/CBC · Sensitivity analysis |
| Travelling purchaser visualizer | Joint purchasing and routing decisions made visible: construction heuristics and local search you can step through in the browser | React · TypeScript · Heuristics |
| Justice operations: ML + allocation | Forecasting completed court cases, then feeding those forecasts into an integer staff-allocation model | Python · Gurobi · Regression & ensembles |
| Project | What it demonstrates | Stack |
|---|---|---|
| Limit order book simulation | A discrete-event matching engine plus analysis of the order flow it generates: arrivals, executions, cancellations, depth and spread | Simul8 · Python · pandas |
| Twin-win barrier payoff | Monte Carlo simulation of a twin-win structure on WTI, with seeded, reproducible runs and explicit assumptions | Python · Monte Carlo · NumPy |
| Project | What it demonstrates | Stack |
|---|---|---|
| Antimicrobial resistance dynamics | Stock-and-flow modelling with nonlinear calibration and scenario analysis | System dynamics · Excel · Solver |
| Numerical methods for epidemics | SEIQV worm-propagation dynamics: equilibria by Newton iteration, trajectories by Heun integration | MATLAB · ODEs · Root finding |
More repositories: smaller or older work, kept for the record
| Project | Note |
|---|---|
| Traffic flow simulation | Exploratory animation of stochastic arrivals, signal phases and queue spacing |
| US elections sentiment | Lexicon sentiment and keyword grouping over Reddit discussion titles |
| PortfolioCalc | Early portfolio-metrics prototype; its README documents the methodology limits rather than hiding them |
Each repository states what it needs to run, where its outputs are, and where its conclusions stop. Group coursework credits its full team.
Most of what I build reduces to the same shape. Choose what to open, and assign demand to it, at least cost:
Facilities, hydrogen plants, court staff, hops in a tree, purchases on a route. The objects change, the discipline does not. State the decision variables, defend every constraint, report the bound alongside the answer, and say where the model stops being trustworthy.
I build and maintain two systems for a Portuguese freight forwarder. Both repositories are private and the client is not named, so these summaries stand in for code I cannot link.
This is the system the company uses to run a shipment from start to finish. The work used to live in spreadsheets and email.
Everything about a shipment sits in one record. The quote, the costs, the documents and the delivery are all in the same place, and each person sees only the part their role allows.
It also handles the money. What the client pays, what the shipment costs, the margin, and freight in more than one currency.
It reads the company mailbox and turns those messages into records, so nobody copies data by hand.
It is written in TypeScript. The data lives in PostgreSQL, with the rules that matter written into the database itself.
The documentation has one rule: the code wins. If a document disagrees with the code, the document is wrong and gets fixed. Every claim about the business is marked with where it came from: how the industry works, how this company works, or what the code does. When two sources disagree, the rule is to stop and ask.
Where it stands. It is being prepared for rollout. Everything is built and tested end to end. There is no hosting or scheduler yet, and it has not run on a real shipment.
A Chrome extension that fills in a government customs portal, so the team stops retyping the same numbers. It works in both directions of the warehouse, goods in and goods out.
It reads the customs declaration and the shipping documents, including scanned ones, using OCR. It matches each line of cargo to the right document by comparing figures that appear in both.
It never submits the form. It fills the fields it can. It checks the fields it cannot change against the source documents and marks each one pass or fail. It shows anything the portal would reject. Then it stops, and a person presses the button.
It also builds as a userscript, for computers where extensions are blocked.
Core interests: integer and mixed-integer programming, network design, heuristics and local search, parallel computing, discrete-event and system-dynamics simulation, supply-chain and logistics optimization, market microstructure, and reproducible modelling.
MSc, Industrial Engineering and Management, Instituto Superior Técnico, 2025–2027 · current GPA 18.2/20. BSc in the same programme, 2022–2025.
Exchange semester at TU Delft, Complex Systems Engineering and Management, September–January 2027.
Consulting intern at Efficio. Spend analysis, supplier assessment and sourcing decisions.
Vice President / Head of Asset Management, Técnico Investment Club. Portfolio risk visualization, optimization and simulation.
Languages: Portuguese (native) · English (fluent, Cambridge Advanced).