Tim Vu

Backend Developer

Production experience in financial systems

C# / ASP.NET / SQL Server / Python

Experience

Ordered by relevance to backend development. Dates show when each role took place.

Projects

FinCore

In Development

Account changes and transactions share domain rules, keeping lifecycle state and balances consistent as the API grows.

Status: Backend in development. Account lifecycle and transaction behavior are implemented; classification, forecasting, and portfolio management remain future scope.

C# ASP.NET Core EF Core SQL Server xUnit

ForexAlert

Implemented

An alert-only currency monitor handles interrupted market-data connections and limits duplicate notifications with persisted delivery state.

Status: Alert monitor implemented. It does not place trades or execute orders.

C# .NET IBKR Twilio JSON persistence

PomodoroYT

Published Extension

Focus and break sessions coordinate YouTube playback in a Chrome extension, with ad muting and saved preferences.

Status: Published in the Chrome Web Store. This YouTube extension is separate from the separately linked SoundCloud web timer.

TypeScript Chrome Extension HTML CSS Chrome Storage

Schedule Booker

Implemented

Web app · Render

Customer appointments and barbershop administration, with an admin console, booking calendar, and financial charts. Booking requests recheck availability inside a locked database transaction.

Status: Core booking flows implemented. Demo hosted on Render.

Python Flask PostgreSQL SQLite Jinja JavaScript Render

AI Facial Authentication

Implemented
CI-CD CodeQL Dependency review

Facial-recognition login flow rebuilt as a Python and Flask app to simplify hosting, testing, and development.

The original version combined JS face detection, PHP, and PhpMyAdmin before I moved it to a lighter stack.

Python Flask SQLite face-api.js GitHub Actions Render

Mini ATS - Resume Scanner

Implemented
CI-CD Render deploy

Upload a PDF resume, parse it into structured editable fields, and save the result back to SQLite.

GitHub Actions CI runs checks; successful CI triggers an automated Render deploy hook.

Python Flask SQLite GitHub Actions Render

AI Note Search

Implemented
CI Manual wake workflow

Streamlit app for searching notes by meaning, with category and tag filters, editing, and import/export.

The documented setup uses Streamlit Community Cloud, GitHub Actions CI, and a manually triggered wake workflow.

Python Streamlit NLP GitHub Actions

Simple Stock Trading (Jakarta EE)

Implemented

Servlet/JSP app that loads 8 stock CSVs into H2 and lets users log in, view prices, and trade.

Java Jakarta EE Tomcat H2 JSP

Bank ATM (C# - First Project)

Implemented

Console ATM simulator with login, deposit/withdraw, and balance checks.

C# .NET

Water Reminder

Implemented
GitHub Pages

Lightweight daily water-intake tracker with progress, goals, and local storage. This project was built for a friend, for fun.

HTML CSS JavaScript Firestore GitHub Pages

Personal Website

Implemented
CI-CD GitHub Pages Link checks

Personal website with user analytics, scroll progress, contact form, and view count.

GitHub Actions deploys to GitHub Pages on push, plus weekly automated link checking.

HTML CSS JavaScript GitHub Pages GitHub Actions Google Analytics GoatCounter EmailJS

Home Lab & Infrastructure

Two machines. Private services, local DNS, and real workloads.

Home Lab at a Glance

Debian Server

Applications & Compute

  • Docker Compose
  • Nextcloud
  • Minecraft / Prominence II
  • SSH administration
  • htop monitoring
  • Tailscale

Raspberry Pi 4

Network Services

  • Pi-hole
  • Local DNS
  • Domain filtering
  • SSH administration
  • Debian 12
  • 13th Gen Intel Core i7
  • ~16 GB RAM
  • 512 GB SSD

Owner-reported resources; not yet matched to the pictured ThinkPad.

Architecture, hardware & evidence

Nextcloud Deployment

  1. Authorized deviceSends a private request
  2. TailscaleConnects authorized devices
  3. Tailscale ServeForwards HTTPS to the application
Debian Server Docker Compose environment
Nextcloud App
Web interface and file access.nextcloud:apache
PostgreSQL 17
Application database; file metadata.postgres:17-alpine
Redis 7
Redis service.redis:7-alpine
Cron
Scheduled Nextcloud background jobs.nextcloud:apache
Uses shared application resources
Shared application configuration and file storage; runs independently of web visits.
Persistent Storage
Durable application files and database data.
Conceptual request flow and service responsibilities, not a literal Docker network topology. Files live in persistent storage; metadata lives in the database.

4 running at captureCompose project: nextcloud · Up ~7 days · PostgreSQL healthy

Inspect deployment capture
Technical notes
  • Separate containers keep the application, PostgreSQL, Redis and scheduled jobs independently manageable.
  • Volumes or bind mounts preserve data beyond a container's lifecycle. Deleting that storage can still lose data; the database retains its own persistent records.
  • Cron uses shared application configuration and data so jobs can run without web traffic.
  • Compose groups service definitions and dependencies for inspection, logs and explicit restarts over SSH.
  • Tailscale Serve forwards HTTPS to the local loopback service on port 8080. Redis caching and locking settings, mount paths and backup procedures are not established by the capture.

Nextcloud background-job documentation

Network & Access

Private Nextcloud & Administration
  1. My DeviceAuthorized to connect
  2. TailscalePrivate tailnet
  3. Debian ServerReceives permitted connections
Tailscale Serve HTTPS
Forwards to Nextcloud
SSH
Connects to administration

Private services are accessed through authorized devices without exposing unnecessary public endpoints.

Public Minecraft
  1. External PlayersConnect for multiplayer
  2. playit.ggSeparate public tunnel
  3. Minecraft ServerProminence II on Debian

The game server uses a separate public tunnel for multiplayer access.

Local DNS Filtering
  1. Home DevicesConfigured DNS clients
  2. Raspberry Pi 4Dedicated network device
  3. Pi-hole / DNSResolves and filters domains

Configured home devices use the Raspberry Pi for DNS resolution and filtering.

Three separate access paths. The public tunnel serves Minecraft; Nextcloud stays on the private path. Local DNS applies to configured home devices, not automatically to every tailnet device.
Access & security notes
  • Devices must be authorized and connected. Nextcloud and SSH authentication, updates, device security and access controls remain necessary; private networking does not secure the whole host.
  • SSH over the tailnet is the administration route. This does not imply that Tailscale SSH is enabled.
  • DNS resolution and service reachability are separate checks. Resolving a name does not confirm that the service itself is reachable. Pi-hole filters at the DNS/domain level.
  • The home network connects through a Bell router. Device identifiers, real addresses, credentials and tunnel endpoints are omitted.

Tailscale Serve documentation

Meet the Machines

Explore the hardware behind the lab.
Drag to rotate · Scroll/pinch to zoom

Lenovo ThinkPad T16 Gen 2
Debian 12 · Application Hosting · Remote Administration
Three-quarter view of the open ThinkPad T16 Gen 2, the lab's Debian home server.

Static hardware preview · Interactive 3D available with JavaScript and WebGL.

Server workloads / Prominence IISee operations
Raspberry Pi 4
Pi-hole · Local DNS · Network Filtering
Three-quarter view of the Raspberry Pi 4 assembly used for DNS and filtering.

Static hardware preview · Interactive 3D available with JavaScript and WebGL.

Dedicated network device / DNS filteringSee DNS activity

Operational Evidence

Historical captures · Private details redacted

Debian Operations
Real Debian server desktop with the Minecraft server console, htop CPU and memory monitoring, and the playit.gg tunnel client. Private connection details are redacted.
Minecraft console, htop monitoring, and playit.gg connectivity.Process-level CPU and memory readings help distinguish a busy process from overall host pressure; these are live checks rather than historical monitoring.View full-size
Prominence II
In-game view of the hosted Prominence II multiplayer world, with players beside a forest temple and the modpack interface.
Real multiplayer workload hosted on Debian.Memory allocation · CPU load · Process management · Connectivity & reliabilityView full-size
Pi-hole Dashboard
Real Pi-hole dashboard on the Raspberry Pi showing DNS query activity, blocked queries, blocklist domains, and client activity graphs.
DNS requests, filtering activity, and client statistics.View full-size
Self-hosted File Storage
Nextcloud Files
Working Nextcloud Files interface with file navigation, folder cards, and upload controls. Personal folder names are permanently redacted.
Nextcloud Files — Self-hosted file management running on my Debian server.View full-size
Docker Compose
Debian terminal showing docker ps, docker compose ls, and docker stats for four Nextcloud services. All are up seven days at capture; PostgreSQL is healthy. Shell identity, local path, and container IDs are permanently redacted.
Docker Compose — Nextcloud, PostgreSQL, Redis, and Cron running as separate services.View full-size

What I Learned

Containers
Separate services and persist data.
Networking
Trace DNS, connectivity, and service failures.
Operations
Monitor processes and resource usage.
Security
Separate private and public access.

Skills

Core Backend

C#

Python

SQL Server

ASP.NET

T-SQL

REST API

Cloud and DevOps

Azure

GitHub Actions

GitHub

Other Languages

Java

Swift

Tools

Windows Terminal

Debian / Linux

About

Hey, I'm Tim — a backend developer who enjoys building systems that solve real problems.

I have production experience with C#, ASP.NET, SQL Server, and Azure, along with backend development using Node.js and PostgreSQL. My experience also includes enterprise IT support at DART Aerospace.

Outside work, I read books, listen to Hans Zimmer, and build personal applications. I enjoy experimenting with APIs and automation, learning something new, and turning everyday problems into useful projects. I also like helping others work through a problem, so feel free to reach out.

Portrait of Vu Luong Quy

Certifications

IT Essentials: PC Hardware and Software

Cisco Networking Academy

Cisco

Let's build something together.

Prefer another way to reach me? Send a message on LinkedIn.

All fields are required.

You can also message me on LinkedIn if the form is unavailable.