Phuong Nguyen

Software engineer / Espoo, Finland

Phuong Nguyen

I build backend and data systems, mostly in TypeScript and Python. I'm doing my MSc in Computer Science at Aalto University.

About

I spent a year at Viomba, a small Finnish ad-tech startup, where I built their ad crawler from scratch: the controller, the workers, the database layer and the admin dashboard. I'm now on the Big Data and Large-Scale Computing track at Aalto, working on distributed systems, stream processing and cloud infrastructure. Before that I did bachelor's degrees in Data Science and in Economics.

I like systems that handle a lot of data and keep running. Outside work I run a small homelab, tinker with ESP32 boards, and follow trains and public transport closely, which is where a lot of my project ideas come from.

Experience

Junior Software Developer, Viomba OyJul 2023 - Jul 2024

A 12-person ad-tech startup. I owned the ad-snapshot crawler end to end and reported to the CTO, working with a DevOps engineer and an ML developer.

  • Built a distributed web crawler from scratch. A controller hands out jobs (target site, crawl depth, link filters, stop conditions) to Puppeteer workers on AWS EC2, scaling to a few hundred workers at peak.
  • Workers move through pages with human-like randomness to avoid bot detection, find ads, record iframes, sizes and metadata, de-duplicate and rank links, and send heartbeats so the controller can spot failed workers.
  • Designed the MySQL data layer, using Prisma for most access and raw SQL for the large queries.
  • Built the internal admin dashboard and APIs for jobs, tasks, domains and ads, used across the company.
  • The crawl data fed the company's ML work, which combined it with eye-tracking data to estimate how much attention ads get.

TypeScriptNestJSPuppeteerVuePrismaMySQLAWS EC2

Front-end developer and designer, Kc97ble Free Contest (volunteer)2020 - 2023

Helped run weekly competitive programming contests for over 300 students across Vietnam. Built the landing pages and the contest platform's front end in React.

EducationAalto University

DegreeDetailsYear
M.Sc. (Tech.), Computer ScienceBig Data and Large-Scale Computing trackMaster's thesis planned for spring 20272027 (expected)
B.Sc. (Tech.), Data Science, with honoursThesis: Deep Learning in Medium Range Weather Forecasting: A Literature Review2025
B.Sc., Economics and Business AdministrationAdvanced minor in Computer ScienceThesis: Immigrant Settlement Pattern and Accessibility of Public Transportation (Python, ArcGIS and Stata on the Helsinki Region Travel Time Matrix)2023

Selected coursework

Cloud Software and Systems, Scalable Systems and Data Management, Programming Parallel Computers, Principles of Algorithmic Techniques, Declarative Programming, Cybersecurity, Operating Systems, Information Security, Software Engineering, Databases for Data Science, Machine Learning, Federated Learning, Introduction to Large Language Models, Theory of Computation, Data Structures and Algorithms.

Projects

Load shedding for stream pattern detection

Extended the OpenCEP complex event processing engine with adaptive load shedding, tested on a "hot paths" query over Citi Bike trips. When latency goes over a target, a utility score ranks partial matches on six factors and the weakest are dropped before the expensive step. At half the baseline latency it still found 65 % of the matches. I worked on the architecture, the pattern-tree integration and the engine internals.

PythonOpenCEPStream processing

Course project / Team of twoGitHub
Text2Cypher with GraphRAG

Answering natural-language questions over a Nobel laureate knowledge graph in Kuzu. I led the pipeline design and built the few-shot example selection, the self-refinement loop and a validate-and-repair step on top of EXPLAIN. On a 10-question benchmark it went from 6 to 9 answered, and cache hits cut query generation from about 20 ms to under 1 ms.

PythonKuzuDSPyLLMs

Course project / Team of twoGitHub
Finnish rail punctuality

Does the weather predict when a long-distance train will be late? I worked with 509,110 arrivals from 2018 to 2024, used time-ordered validation and gradient boosting, and checked the results with bootstrap intervals. Adding weather raised ROC-AUC on the 2024 test year from 0.675 to 0.701.

Pythonmarimoscikit-learn

Course project / SoloGitHub
Library management system

A full-stack library app. The frontend has JWT login, browsing, borrowing, reservations, returns, favourites and an admin dashboard. The backend is a Spring Boot REST API for books, copies, categories, reservations and user history.

TypeScriptReactReduxJava 17Spring Boot

Integrify bootcampFrontendBackend
Product data enrichment for Droppe

Aalto Data Science Project with Droppe Oy. I worked on the standards-extraction module, using natural language processing to pull product standards out of more than 36,000 product entries.

PythonNLTKPyTorch

Company project / 2024
Homelab and self-hosting

Forgejo, AFFiNE, Jellyfin, a Minecraft server and a Discord bot, mostly as Docker containers behind a Caddy reverse proxy on a Hetzner VPS. Cron jobs report the server's state and restart services when they fail. Now building a Kubernetes cluster across my own machines.

LinuxDockerCaddyKubernetes

Personal / Ongoing

More course and personal work

ProjectWhat it isStack
CI/CD pipelinesCloud Software and SystemsGitLab CI pipelines that lint, test, build and publish a Python package to Google Artifact Registry on a git tag, and deploy a documentation site to Google Cloud Storage, with a staging build on Cloud Run.GitLab CI, Docker, nginx, Google Cloud
Vaccine distribution databaseDatabases, group projectA 12-table PostgreSQL schema loaded from spreadsheet data, with SQL queries and analysis notebooks.PostgreSQL, Python, SQLAlchemy, pandas
Used-car price predictionMachine LearningData cleaning, analysis and models from linear regression to random forest and XGBoost.Python, scikit-learn, XGBoost, Jupyter
Data dashboard and interior design appsProgramming Studio, ScalaTwo desktop applications with JSON data handling.Scala 3, sbt, circe
Dungeon crawlerC++ team projectAn object-oriented game built as a team.C++, CMake
Home automationPersonalA temperature sensor tied to heater and lighting presets, including a simulated sunrise, with a web interface on an ESP32.ESP32

Skills

LanguagesTypeScript, JavaScript, Python, SQL. Also used: Java, Scala, C, C++, Rust
BackendNode.js, NestJS, Express, Spring Boot, Prisma, REST APIs, JWT auth, Puppeteer
FrontendReact, Redux, Vue, Mantine, Tailwind
DatabasesPostgreSQL, MySQL, Redis, Kuzu
Cloud and DevOpsAWS (EC2, S3, IAM), Google Cloud (Cloud Run, Cloud Build, Artifact Registry, Cloud Storage), Docker, Docker Compose, Linux, Caddy, nginx, GitLab CI/CD, Kubernetes, OpenTofu
Data and MLpandas, scikit-learn, XGBoost, PyTorch, NLTK, DSPy, marimo, Jupyter
ConceptsDistributed systems, stream processing, parallel computing, scalable data processing, federated learning, LLM pipelines
Spoken languagesVietnamese (native), English (fluent)

Contact