Recruiter hoặc CTO đang scout engineer cho vấn đề cụ thể? Chọn vài filter dưới đây — tôi sẽ surface những dự án đã ship giải quyết đúng dạng problem đó. Honest metrics, lessons learned ngắn gọn.
Showing 8 / 8 projects·0 filters active
filters·0 active
01 · DOMAIN
02 · SCALE
03 · LANGUAGE
04 · LATENCY
~/portfolio/orbit-tracker.md
· Senior Engineer (team 4) // 14 tháng · 2022–2023
Logistic platform Đông Nam Á cần dashboard theo dõi 4 triệu shipment/tháng — driver gửi GPS ping mỗi 15 giây, dispatcher xem live map. Hệ thống cũ dùng polling REST mỗi 30s, dữ liệu trễ và RDS quá tải.
# constraint
Phải giữ p95 dưới 200ms từ ping → dashboard render, KHÔNG được tăng cost AWS thêm $20K/tháng. Mỗi driver mobile dùng data 3G nên payload < 800 bytes/message.
# solution
Ship pipeline event-driven Go — Kafka ingest GPS topic, Postgres CDC bằng Debezium fan-out qua Redis Streams, WebSocket SFU push delta-encoded payload. Handled constraint cost bằng cách bỏ RDS read-replica và serve hot path từ Redis.
p95 latency
120ms
từ 850ms ban đầu
Ingest rate
4M events/ngày
peak 280 RPS
Infra saving
$48K/tháng
sau 3 tháng
Uptime 12 tháng
99.94%
2 incident < 8min
# lessons --learned
01CDC Debezium cần snapshot strategy rõ ràng — initial snapshot từng làm down 22 phút.
02Delta encoding tiết kiệm 60% bandwidth nhưng phải document protocol cho mobile team.
03WebSocket connection limit per ALB là 100K — phải shard sớm, không đợi production.
B2C fintech VN cần phân loại 5K giao dịch/ngày — đồng bộ 14 ngân hàng qua Open Banking API, gắn category chuẩn VAS, xuất báo cáo tháng. User mong đợi categorisation accuracy > 92% và xem được trong 2 giây.
# constraint
Anthropic API rate limit 50 RPM tier 1, mỗi call ~$0.003. Budget LLM tối đa $2K/tháng cho 50K MAU. Không thể call LLM mỗi giao dịch — phải cache thông minh.
# solution
Ship hybrid: rule-based classifier (regex + merchant taxonomy 800 entry) chạy trước, fallback LLM Claude Haiku cho 8% giao dịch ambiguous, store embedding pgvector để học từ user correction. Handled constraint rate-limit bằng batch queue 50 transactions/request.
Accuracy
94.2%
measured trên 12K sample
LLM cost
$1.4K/tháng
p50 latency 380ms
MAU
52K
sau 8 tháng launch
Cache hit
91%
sau 30 ngày user
# lessons --learned
01Rule-based đi trước LLM tiết kiệm 90% cost — luôn build classical fallback.
02pgvector trên Postgres 16 đủ tốt cho < 1M embedding, không cần Pinecone.
03User correction loop quan trọng hơn model accuracy ban đầu — phải design UX cho feedback.
~/portfolio/lumio-edtech.md
· Tech Lead (4 engineers) // 13 tháng · 2023–2024
Lumio — Live Classroom Platform
GoWebRTC SFUReact NativePostgresS3CloudFrontAnthropic API
# problem
EdTech series A cần live classroom 2K học sinh đồng thời với recording + AI tóm tắt bài học. Vendor SaaS (Agora/100ms) báo giá $42K/tháng — quá đắt cho margin K-12 VN. Phải self-host SFU.
# constraint
Mobile-first — 70% học sinh dùng Android giá rẻ 3G. Audio packet loss tolerance > 8% bình thường. Recording phải tóm tắt được trong < 5 phút sau buổi học.
# solution
Ship SFU Go tự host trên Hetzner bare-metal (3 region), forward error correction cho audio, recording chunked upload S3 + Anthropic Claude tóm tắt async qua SQS queue. Handled constraint Android low-end bằng simulcast 3 layer + adaptive bitrate aggressive.
Concurrent users
2,180 peak
6 lớp 360 student
Audio MOS
3.8/5
tested 4G + 3G
Infra cost
$6.2K/tháng
vs $42K vendor
Summary latency
4.1 phút p95
sau buổi học
# lessons --learned
01Self-host SFU rẻ hơn 6x nhưng on-call burden tăng — phải có runbook trước launch.
02WebRTC simulcast cần test trên thiết bị Android < $200, không emulator.
03AI summary phải có "retry with longer context" — Haiku đôi khi cắt giữa câu.
~/portfolio/nestmart-saas.md
· Solo Engineer // 6 tháng · 2024
NestMart — F&B Inventory SaaS
Next.jstRPCPostgres + PrismaRedisVercelBullMQ
# problem
B2B SaaS multi-tenant quản lý kho cho 320 cửa hàng F&B VN — POS sync mỗi 5 phút, dự báo nhu cầu time-series, UI tiếng Việt 100%. Mỗi tenant 200-2K SKU, dữ liệu phân tán theo timezone HCM.
# constraint
Vercel Hobby budget tối đa $200/tháng. Tenant lớn nhất gửi 18K POS sync transaction/ngày — không được block UI khi đồng bộ. Phải support offline-first cho mobile cashier (PWA).
# solution
Ship multi-tenant trên Postgres schema-per-tenant + Prisma generated client per schema. POS sync chạy trên BullMQ + Redis, UI optimistic update qua tRPC subscription. Handled constraint Vercel budget bằng cách offload batch job qua Railway worker $20/tháng.
Active tenants
320
avg 480 SKU/tenant
POS sync
1.2M trans/ngày
p95 8 phút end-to-end
Vercel cost
$180/tháng
within budget
PWA offline
92% session
có recover sync
# lessons --learned
01Schema-per-tenant trade-off: dễ isolate nhưng migration cần custom tooling.
02Prisma client size bùng nổ ở 50+ tenant — phải lazy generate hoặc chuyển single schema.
03Offline-first PWA phải có conflict resolution UI rõ ràng, không silent merge.
~/portfolio/fraud-shield.md
· Senior Backend (team 3) // 9 tháng · 2023
FraudShield — Real-time Risk Engine
RustApache FlinkKafkaClickHousegRPCKubernetes
# problem
Ví điện tử VN cần fraud detection real-time trên 800K transaction/ngày — chặn giao dịch nghi vấn trong < 50ms từ lúc user bấm "Xác nhận". Hệ thống cũ Python + Redis check rule, p95 320ms — nhiều false negative.
# constraint
Latency budget cứng 50ms (bao gồm network round-trip ~12ms). Không được tăng tỷ lệ chặn false-positive quá 0.4% — mỗi false-positive là 1 ticket support tốn $3.
# solution
Ship engine Rust gRPC scoring inline, feature store ClickHouse cập nhật streaming qua Flink, model XGBoost ONNX inference local. Handled constraint latency bằng cách pre-compute aggregate features (last-24h-amount, merchant-velocity) trong Flink, score chỉ là vector mult.
p95 inference
38ms
budget 50ms
Throughput
11K TPS peak
Tết spike 2024
False positive
0.31%
down từ 1.2%
Fraud caught
+34%
YoY recovery $/tháng
# lessons --learned
01Rust learning curve mất 6 tuần đầu — nhưng GC-free predictability đáng giá.
02ONNX Runtime Rust binding ổn định hơn Python tflite cho production inline scoring.
03Feature store là khó nhất, không phải model — invest tooling debug trước.
~/portfolio/civic-data.md
· Solo Data Engineer // 4 tháng · 2024
CivicData — Public Records ETL
PythonAirflowDuckDBPostgresS3 Parquetdbt
# problem
NGO Việt Nam scraping 18 cổng dữ liệu công khai (UBND, Bộ Tài Chính, Cục Thuế) — chuẩn hoá thành dataset Parquet hàng tuần cho nghiên cứu báo chí. Mỗi nguồn schema khác, encoding khác (Latin-1, Windows-1258, UTF-8).
# constraint
Budget $0 — chạy trên 1 VPS Hetzner $14/tháng. Phải handle PDF tiếng Việt OCR (15% nguồn là PDF scan). Pipeline phải re-runnable hoàn toàn — replay 6 tháng dữ liệu trong < 4 giờ.
# solution
Ship Airflow trên Docker compose VPS, scraper Python async chia theo source, DuckDB transform local + dbt model SQL, output Parquet partitioned theo tháng. Handled constraint OCR bằng Tesseract VN traineddata + heuristic post-processing.
Sources
18
14 HTML + 4 PDF
Rows/tuần
420K
avg ~60K/source
OCR accuracy
88%
VN diacritics
VPS cost
$14/tháng
4GB RAM đủ
# lessons --learned
01DuckDB thay Spark cho dataset < 50GB — đỡ phức tạp 10 lần.
02OCR tiếng Việt cần custom dictionary, không tin Tesseract default.
03Re-runnable pipeline buộc phải idempotent từ ngày 1 — đừng để retrofit.
~/portfolio/pulse-mobile.md
· Lead Engineer (mobile + backend) // 8 tháng · 2024
Internal HR tool cho công ty 200 nhân viên — onboarding tracker, OKR check-in hàng tuần, performance review 360. Phải có app iOS/Android (push notification + offline mode) và web dashboard cho HR lead.
# constraint
Team mobile chỉ 1 dev (tôi) — không expand sang 2 codebase native. iOS có yêu cầu Face ID + Apple Sign-in (compliance security). Push notification phải gửi local nếu offline > 24h.
# solution
Ship React Native + Expo (single codebase), viết 2 native module Swift cho Face ID + Keychain biometric, Android biometric qua Expo plugin sẵn. Push qua OneSignal + local scheduled notification fallback. Handled constraint solo bằng cách giới hạn surface area native.
Adoption
198/200
sau 3 tuần roll-out
Crash-free
99.7%
iOS + Android
Native modules
2
mỗi cái < 300 LOC
Bundle size
14.2 MB
iOS, OTA update
# lessons --learned
01Expo + 2 native module rẻ hơn full native cho team < 3 mobile dev.
02Face ID iOS có edge case khi user thay đổi face data — phải re-prompt graceful.
03OTA update Expo cứu được 4 hotfix không cần re-submit App Store.
~/portfolio/infra-cost-bot.md
· Solo DevOps Engineer // 3 tháng · 2024
CostBot — DevOps Cost Optimiser
PythonTerraformAWS Cost Explorer APISlack APILambdaDynamoDB
# problem
Startup VN burn AWS $18K/tháng nhưng không ai trong team biết bottleneck ở đâu — Cost Explorer UI khó đọc, finance phụ thuộc CTO export CSV mỗi tháng. Cần daily Slack digest + alert anomaly.
# constraint
Không được động vào production infra — chỉ read-only IAM. Bot phải chạy với cost < $30/tháng (không phải case thuê tool $$$ như Vantage). Tag chuẩn 60% — phải handle untagged resource graceful.
# solution
Ship Lambda cron daily pull Cost Explorer API + Trusted Advisor, store DynamoDB time-series, Slack message phân nhóm theo service + tag, anomaly detection z-score > 2.5. Handled constraint untagged bằng cách map qua resource group + naming convention regex.
Cost saving
$4.2K/tháng
sau 2 tháng action
Bot cost
$11/tháng
Lambda + DDB
Anomaly caught
7/tháng avg
4 actionable
Slack engagement
12 thread/tháng
team thảo luận
# lessons --learned
01Cost Explorer API trễ 24-48h — không dùng cho real-time alert, chỉ daily.
02Anomaly detection đơn giản (z-score) đủ tốt, không cần ML model.
03Tag enforcement quan trọng hơn tool — bot chỉ là người nhắc, không sửa được nguyên nhân.
NEXT STEP
Đã thấy dự án phù hợp? Đặt buổi 30 phút tech chat — free, không pitch.
Tôi dành 30 phút discovery với mỗi project mới — không sale, không deck. Mình bàn về problem cụ thể của bạn, ràng buộc kỹ thuật, và xem stack tôi có fit không. Sau call sẽ gửi technical proposal nếu hai bên đồng ý đi tiếp.