Console.WriteLine( "xin chào" );
Available for hire
duydang

Turning ideas into software.

1. About Me

I'm an early-career software engineer and a fan of learning through hands-on experience. I build functional apps for web and desktop, occasionally contributing to open-source works that are powering them.

Loading GitHub contributions...
Back-end

I enjoy building back-ends using .NET where performance matters and Node.js for smaller, agile services.

Platforms
.NET
Node.js
Cloudflare Workers
Frameworks
FastEndpoints
ASP.NET (Minimal APIs / MVC)
Elysia.js
Hono.js
Data
SQL (Raw / ORM)
Entity Framework Core
MongoDB
Drizzle ORM
Front-end

I work across both Svelte and React ecosystems, but regardless of the framework, I have an interest in building my components on top of unstyled UI libraries. I love customization!

Platforms
Browser (TS/JS)
Frameworks
Svelte
React
Tailwind CSS
Tooling
Bun/pnpm/npm
Vite
Turborepo
tsdown
tsup
Desktop

I use Avalonia UI for a stable, lightweight, cross-platform, modern desktop app, and Rust for exploring its immature but rapidly growing ecosystem.

Platforms
.NET
Rust
Frameworks
Avalonia UI
Tauri
egui
fltk-rs
Windows Forms
.NET MAUI
Architectures & Patterns
MVVM
Reactive
Vertical Slice
Infrastructure

These days, I like Docker for containerization, Cloudflare for its robust cloud services, and mise/just for development workflow.

Data
PostgreSQL
MariaDB
MongoDB
SQLite
Messaging
NATS.io
SignalR
WebSockets
DevOps
Podman
Docker
Cloudflare
Supabase
Vercel
Tooling
mise
just
Extras

Some knowledge I gained from solving specific and less common problems.

.NET Source Generators
Generated source code to eliminate repetitive boilerplate at compile-time.
.NET Dynamic Expression
Dynamically composed expressions for flexible EF Core queries at runtime.
C/C# Interop (FFI)
Called native C functions from C# via declared bindings.
C/Rust Interop (FFI)
Called native C functions from Rust via bindings generated by `bindgen`.
Functional Programming
Applied FP principles like pipelines, immutability, and errors-as-values for explicit behavior and predictable code.

2. Works

Application

sorairo

A minimal, local, cross-platform music player built with Avalonia and miniaudio.

windows
macos
linux
cross-platform
dotnet
desktop
avalonia
miniaudio
Active
GitHub

portfolio

A white-paper, pixelated style portfolio website, built just for me.

sveltekit
ssr
cloudflare-workers
zagjs
Active
GitHub

fullest-web

A task management platform designed for public-first collaboration.

docker
csharp
aspnetcore
fastendpoints
efcore
postgresql
clean-architecture
vertical-slice-architecture
sveltekit
vite
tailwindcss
zagjs
azure
cloudflare-workers
cloudflare-r2
cloudflare-kv
neon-db
Early development
GitHub

askkit

A desktop AI chatbot built in Rust that lives in your tray and launches in an instant.

windows
rust
sqlite
svelte
desktop
tauri
tailwindcss
tiptap
sveltekit
GitHub

konekt

A comprehensive and traditional web application for task management with list view, kanban view, and timeline view.

aspnetcore
fast-endpoints
signalr/websocket
efcore
wolverine
vertical-slice-architecture
sveltekit
effect
tailwindcss
melt-ui
cloudflare-workers
GitHub

human

An HR management web app for managing employees, departments, jobs, leave requests, etc... through a Remix-powered dashboard.

remix
react
typescript
tailwindcss
express
ssr
cookie-session
jwt-auth
i18next
react-aria
headless-ui
heroicons
tiptap
tanstack-table
zod
conform
neverthrow
hr-management
dashboard
GitHub
Library

AltV.Community.MValueAdapters.Generators

A roslyn source generator for MValue adapter implementation in alt:V.

csharp
altv
roslyn-generator
coreclr-module
GitHub

attempt

A functional type for error handling in JavaScript/TypeScript.

typescript
javascript
functional
functional-programming
pipe
error-handling
try
try-catch
attempt
result-pattern
GitHub

svelte utils

A collection of Svelte utilities.

svelte
GitHub

3. Contact

I'm always open to new opportunities, feedback, or a quick chat.