View TNL293107's full-sized avatar
🎯
Feel free to contact me via Gmail or the social media links below.
🎯
Feel free to contact me via Gmail or the social media links below.

Block or report TNL293107

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
TNL293107/README.md
bannertyping

focuslocationopen to work


About

I'm a Software Engineering student at FPT University Đà Nẵng, working mainly on the backend — C#/.NET and Java — with the database layer that sits behind it.

  • 🧩 I like problems where the hard part is the data model and the flow, not the screen.
  • 🛠️ Most of what I build starts as a real annoyance: a checkout that loses orders, ten school portals that each want the same login, a CV you have no way to verify.
  • 🤖 On my team's SWP391 project I owned the Python/FastAPI AI service and took it all the way to production on GCP — pipelines, deployment, SSL, backups.
  • 📚 Currently going deeper on .NET, clean layering, and writing services that are actually testable.
  • 🎯 Looking for a backend / fullstack internship where I can ship real features and get reviewed hard.

Tech Stack

Backend

C#.NETJavaPythonFastAPIServlet / JSPC++

Data

PostgreSQLSQL ServerMySQLRedisEF Core

AI & Infrastructure

Claude APIDockerGCPNginxGitHub Actions

Frontend & Testing

TypeScriptReactJavaScriptxUnitVitestpytestTestcontainers


Selected Work

📈 PQT — quant trading terminal

C#ASP.NET CorePostgreSQLRedisReactPythonC++Docker

Personal · in development

A Bloomberg-inspired research and trading workstation for the Vietnam market (HOSE/HNX/UPCOM) — the loop from market data through research and risk to execution.

  • Modular monolith, not microservices — .NET, React, Python and C++ layers, every significant decision written down as an ADR
  • Readiness that means something — a real PostgreSQL round-trip and a Redis PING, reported per dependency, disclosing no host or driver
  • Four test suites in CI — .NET, Vitest, pytest, CTest — with integration tests on real containers via Testcontainers
  • Phase 0 done; building the instrument master, so one security has one identity no matter how a provider spells it

🔍 CVerify — AI candidate verification

PythonFastAPIClaude APIASP.NET CorePostgreSQLDockerGCP

Team · 82 commits · shipped to production

Screens a candidate by cross-checking their CV against their real GitHub work and a job description, instead of trusting what the CV claims.

  • Ported the AI layer from C# stubs to a Python / FastAPI service — Claude-API agents across three pipelines: repository intelligence, candidate evaluation, JD matching
  • Code intelligence — cyclomatic and cognitive complexity, near-duplicate clone detection via MinHash LSH, and PDF/DOCX/OCR → Markdown extraction
  • C# backend — the JD module end to end: controllers, DTOs, entities, services, EF Core migrations
  • Production — moved deployment AWS EC2 → GCP: reverse proxy, self-hosted MinIO, SSL renewal, daily backups, CI deploy

🛒 DWatch — watch e-commerce

JavaServlet / JSPJSTLSQL ServerMavenJUnit 5BCrypt

Personal · full stack on plain Servlet/JSP

A full watch e-commerce platform, not a demo shop — and lately, the project I went back and secured properly.

  • Cart, checkout with COD + VietQR, guest order tracking, wishlist, admin CRUD
  • BCrypt migration with nobody locked out — verification still accepts the old plaintext rows and rehashes each one on its next correct login
  • CSRF tokens across 17 forms — which closed a real hole: /admin/products?action=delete was a GET link any site could fire from an <img> tag
  • Session fixation, open redirect and account enumeration fixed in the same auth pass
  • Service layer pulled out of the servlets, covered by 54 JUnit 5 + Mockito tests that run without a database

🧰 FU-Autokit — student browser toolkit

JavaScriptChrome MV3jQueryBootstrapService Workernode:test

Personal · 260+ commits · used by real students

Browser extension that removes the daily friction of being an FPTU student.

  • Auto-login across 9 school portals (FAP, CMS, EduNext, FLM, Library…)
  • GPA calculator + the FE score you need to pass
  • VI/EN i18n, themeable UI, MV3 service worker
  • 33 tests on node --test + jsdom, added years after the code — and they immediately caught a stray quote that had been 404-ing the default locale file for every fresh install
all repos

GitHub Activity

629 contributions489 commits40 pull requestscontributed to 9 repositories

Since my first commit in August 2023, updated daily.

top languages by repositorytop languages by commit

activity graph

Counts start from my first commit in August 2023 and include private repositories. CVerify is a fork of my team's repository, so GitHub does not count its commits here — the upstream it was forked from is linked at the top of that page.


Contact

githubrepositories

Da Nang, Vietnam · Open to backend / fullstack internships
Reach me through my GitHub profile.

footer

Pinned Loading

  1. FU-AutokitFU-AutokitPublic

    A Chromium extension to streamline web portals and save time for FPT students.

    JavaScript

  2. PQTPQTPublic

    Personal quant research & trading terminal for the Vietnam market (HOSE/HNX/UPCOM)

    C#

  3. CVerify-ForkedCVerify-ForkedPublic

    Forked from fptu-se-su26/swp391-su26-ai-audit-project-swp391_se20a02_group-05

    An enterprise platform that uses LLMs and static analysis to verify developer code, detect plagiarism/AI content, and build trusted CV profiles.

    C#

  4. DWatchDWatchPublic

    Full-stack Java e-commerce watch store (Servlet/JSP, Maven, SQL Server) with cart, checkout, VietQR payment, and an admin panel.

    Java

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
View TNL293107's full-sized avatar
🎯
Feel free to contact me via Gmail or the social media links below.
🎯
Feel free to contact me via Gmail or the social media links below.

Block or report TNL293107

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
TNL293107/README.md
bannertyping

focuslocationopen to work


About

I'm a Software Engineering student at FPT University Đà Nẵng, working mainly on the backend — C#/.NET and Java — with the database layer that sits behind it.

  • 🧩 I like problems where the hard part is the data model and the flow, not the screen.
  • 🛠️ Most of what I build starts as a real annoyance: a checkout that loses orders, ten school portals that each want the same login, a CV you have no way to verify.
  • 🤖 On my team's SWP391 project I owned the Python/FastAPI AI service and took it all the way to production on GCP — pipelines, deployment, SSL, backups.
  • 📚 Currently going deeper on .NET, clean layering, and writing services that are actually testable.
  • 🎯 Looking for a backend / fullstack internship where I can ship real features and get reviewed hard.

Tech Stack

Backend

C#.NETJavaPythonFastAPIServlet / JSPC++

Data

PostgreSQLSQL ServerMySQLRedisEF Core

AI & Infrastructure

Claude APIDockerGCPNginxGitHub Actions

Frontend & Testing

TypeScriptReactJavaScriptxUnitVitestpytestTestcontainers


Selected Work

📈 PQT — quant trading terminal

C#ASP.NET CorePostgreSQLRedisReactPythonC++Docker

Personal · in development

A Bloomberg-inspired research and trading workstation for the Vietnam market (HOSE/HNX/UPCOM) — the loop from market data through research and risk to execution.

  • Modular monolith, not microservices — .NET, React, Python and C++ layers, every significant decision written down as an ADR
  • Readiness that means something — a real PostgreSQL round-trip and a Redis PING, reported per dependency, disclosing no host or driver
  • Four test suites in CI — .NET, Vitest, pytest, CTest — with integration tests on real containers via Testcontainers
  • Phase 0 done; building the instrument master, so one security has one identity no matter how a provider spells it

🔍 CVerify — AI candidate verification

PythonFastAPIClaude APIASP.NET CorePostgreSQLDockerGCP

Team · 82 commits · shipped to production

Screens a candidate by cross-checking their CV against their real GitHub work and a job description, instead of trusting what the CV claims.

  • Ported the AI layer from C# stubs to a Python / FastAPI service — Claude-API agents across three pipelines: repository intelligence, candidate evaluation, JD matching
  • Code intelligence — cyclomatic and cognitive complexity, near-duplicate clone detection via MinHash LSH, and PDF/DOCX/OCR → Markdown extraction
  • C# backend — the JD module end to end: controllers, DTOs, entities, services, EF Core migrations
  • Production — moved deployment AWS EC2 → GCP: reverse proxy, self-hosted MinIO, SSL renewal, daily backups, CI deploy

🛒 DWatch — watch e-commerce

JavaServlet / JSPJSTLSQL ServerMavenJUnit 5BCrypt

Personal · full stack on plain Servlet/JSP

A full watch e-commerce platform, not a demo shop — and lately, the project I went back and secured properly.

  • Cart, checkout with COD + VietQR, guest order tracking, wishlist, admin CRUD
  • BCrypt migration with nobody locked out — verification still accepts the old plaintext rows and rehashes each one on its next correct login
  • CSRF tokens across 17 forms — which closed a real hole: /admin/products?action=delete was a GET link any site could fire from an <img> tag
  • Session fixation, open redirect and account enumeration fixed in the same auth pass
  • Service layer pulled out of the servlets, covered by 54 JUnit 5 + Mockito tests that run without a database

🧰 FU-Autokit — student browser toolkit

JavaScriptChrome MV3jQueryBootstrapService Workernode:test

Personal · 260+ commits · used by real students

Browser extension that removes the daily friction of being an FPTU student.

  • Auto-login across 9 school portals (FAP, CMS, EduNext, FLM, Library…)
  • GPA calculator + the FE score you need to pass
  • VI/EN i18n, themeable UI, MV3 service worker
  • 33 tests on node --test + jsdom, added years after the code — and they immediately caught a stray quote that had been 404-ing the default locale file for every fresh install
all repos

GitHub Activity

629 contributions489 commits40 pull requestscontributed to 9 repositories

Since my first commit in August 2023, updated daily.

top languages by repositorytop languages by commit

activity graph

Counts start from my first commit in August 2023 and include private repositories. CVerify is a fork of my team's repository, so GitHub does not count its commits here — the upstream it was forked from is linked at the top of that page.


Contact

githubrepositories

Da Nang, Vietnam · Open to backend / fullstack internships
Reach me through my GitHub profile.

footer

Pinned Loading

  1. FU-AutokitFU-AutokitPublic

    A Chromium extension to streamline web portals and save time for FPT students.

    JavaScript

  2. PQTPQTPublic

    Personal quant research & trading terminal for the Vietnam market (HOSE/HNX/UPCOM)

    C#

  3. CVerify-ForkedCVerify-ForkedPublic

    Forked from fptu-se-su26/swp391-su26-ai-audit-project-swp391_se20a02_group-05

    An enterprise platform that uses LLMs and static analysis to verify developer code, detect plagiarism/AI content, and build trusted CV profiles.

    C#

  4. DWatchDWatchPublic

    Full-stack Java e-commerce watch store (Servlet/JSP, Maven, SQL Server) with cart, checkout, VietQR payment, and an admin panel.

    Java

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View TNL293107's full-sized avatar
🎯
Feel free to contact me via Gmail or the social media links below.
🎯
Feel free to contact me via Gmail or the social media links below.

Block or report TNL293107

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
TNL293107/README.md
bannertyping

focuslocationopen to work


About

I'm a Software Engineering student at FPT University Đà Nẵng, working mainly on the backend — C#/.NET and Java — with the database layer that sits behind it.

  • 🧩 I like problems where the hard part is the data model and the flow, not the screen.
  • 🛠️ Most of what I build starts as a real annoyance: a checkout that loses orders, ten school portals that each want the same login, a CV you have no way to verify.
  • 🤖 On my team's SWP391 project I owned the Python/FastAPI AI service and took it all the way to production on GCP — pipelines, deployment, SSL, backups.
  • 📚 Currently going deeper on .NET, clean layering, and writing services that are actually testable.
  • 🎯 Looking for a backend / fullstack internship where I can ship real features and get reviewed hard.

Tech Stack

Backend

C#.NETJavaPythonFastAPIServlet / JSPC++

Data

PostgreSQLSQL ServerMySQLRedisEF Core

AI & Infrastructure

Claude APIDockerGCPNginxGitHub Actions

Frontend & Testing

TypeScriptReactJavaScriptxUnitVitestpytestTestcontainers


Selected Work

📈 PQT — quant trading terminal

C#ASP.NET CorePostgreSQLRedisReactPythonC++Docker

Personal · in development

A Bloomberg-inspired research and trading workstation for the Vietnam market (HOSE/HNX/UPCOM) — the loop from market data through research and risk to execution.

  • Modular monolith, not microservices — .NET, React, Python and C++ layers, every significant decision written down as an ADR
  • Readiness that means something — a real PostgreSQL round-trip and a Redis PING, reported per dependency, disclosing no host or driver
  • Four test suites in CI — .NET, Vitest, pytest, CTest — with integration tests on real containers via Testcontainers
  • Phase 0 done; building the instrument master, so one security has one identity no matter how a provider spells it

🔍 CVerify — AI candidate verification

PythonFastAPIClaude APIASP.NET CorePostgreSQLDockerGCP

Team · 82 commits · shipped to production

Screens a candidate by cross-checking their CV against their real GitHub work and a job description, instead of trusting what the CV claims.

  • Ported the AI layer from C# stubs to a Python / FastAPI service — Claude-API agents across three pipelines: repository intelligence, candidate evaluation, JD matching
  • Code intelligence — cyclomatic and cognitive complexity, near-duplicate clone detection via MinHash LSH, and PDF/DOCX/OCR → Markdown extraction
  • C# backend — the JD module end to end: controllers, DTOs, entities, services, EF Core migrations
  • Production — moved deployment AWS EC2 → GCP: reverse proxy, self-hosted MinIO, SSL renewal, daily backups, CI deploy

🛒 DWatch — watch e-commerce

JavaServlet / JSPJSTLSQL ServerMavenJUnit 5BCrypt

Personal · full stack on plain Servlet/JSP

A full watch e-commerce platform, not a demo shop — and lately, the project I went back and secured properly.

  • Cart, checkout with COD + VietQR, guest order tracking, wishlist, admin CRUD
  • BCrypt migration with nobody locked out — verification still accepts the old plaintext rows and rehashes each one on its next correct login
  • CSRF tokens across 17 forms — which closed a real hole: /admin/products?action=delete was a GET link any site could fire from an <img> tag
  • Session fixation, open redirect and account enumeration fixed in the same auth pass
  • Service layer pulled out of the servlets, covered by 54 JUnit 5 + Mockito tests that run without a database

🧰 FU-Autokit — student browser toolkit

JavaScriptChrome MV3jQueryBootstrapService Workernode:test

Personal · 260+ commits · used by real students

Browser extension that removes the daily friction of being an FPTU student.

  • Auto-login across 9 school portals (FAP, CMS, EduNext, FLM, Library…)
  • GPA calculator + the FE score you need to pass
  • VI/EN i18n, themeable UI, MV3 service worker
  • 33 tests on node --test + jsdom, added years after the code — and they immediately caught a stray quote that had been 404-ing the default locale file for every fresh install
all repos

GitHub Activity

629 contributions489 commits40 pull requestscontributed to 9 repositories

Since my first commit in August 2023, updated daily.

top languages by repositorytop languages by commit

activity graph

Counts start from my first commit in August 2023 and include private repositories. CVerify is a fork of my team's repository, so GitHub does not count its commits here — the upstream it was forked from is linked at the top of that page.


Contact

githubrepositories

Da Nang, Vietnam · Open to backend / fullstack internships
Reach me through my GitHub profile.

footer

Pinned Loading

  1. FU-AutokitFU-AutokitPublic

    A Chromium extension to streamline web portals and save time for FPT students.

    JavaScript

  2. PQTPQTPublic

    Personal quant research & trading terminal for the Vietnam market (HOSE/HNX/UPCOM)

    C#

  3. CVerify-ForkedCVerify-ForkedPublic

    Forked from fptu-se-su26/swp391-su26-ai-audit-project-swp391_se20a02_group-05

    An enterprise platform that uses LLMs and static analysis to verify developer code, detect plagiarism/AI content, and build trusted CV profiles.

    C#

  4. DWatchDWatchPublic

    Full-stack Java e-commerce watch store (Servlet/JSP, Maven, SQL Server) with cart, checkout, VietQR payment, and an admin panel.

    Java

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View TNL293107's full-sized avatar
🎯
Feel free to contact me via Gmail or the social media links below.
🎯
Feel free to contact me via Gmail or the social media links below.

Block or report TNL293107

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
TNL293107/README.md
bannertyping

focuslocationopen to work


About

I'm a Software Engineering student at FPT University Đà Nẵng, working mainly on the backend — C#/.NET and Java — with the database layer that sits behind it.

  • 🧩 I like problems where the hard part is the data model and the flow, not the screen.
  • 🛠️ Most of what I build starts as a real annoyance: a checkout that loses orders, ten school portals that each want the same login, a CV you have no way to verify.
  • 🤖 On my team's SWP391 project I owned the Python/FastAPI AI service and took it all the way to production on GCP — pipelines, deployment, SSL, backups.
  • 📚 Currently going deeper on .NET, clean layering, and writing services that are actually testable.
  • 🎯 Looking for a backend / fullstack internship where I can ship real features and get reviewed hard.

Tech Stack

Backend

C#.NETJavaPythonFastAPIServlet / JSPC++

Data

PostgreSQLSQL ServerMySQLRedisEF Core

AI & Infrastructure

Claude APIDockerGCPNginxGitHub Actions

Frontend & Testing

TypeScriptReactJavaScriptxUnitVitestpytestTestcontainers


Selected Work

📈 PQT — quant trading terminal

C#ASP.NET CorePostgreSQLRedisReactPythonC++Docker

Personal · in development

A Bloomberg-inspired research and trading workstation for the Vietnam market (HOSE/HNX/UPCOM) — the loop from market data through research and risk to execution.

  • Modular monolith, not microservices — .NET, React, Python and C++ layers, every significant decision written down as an ADR
  • Readiness that means something — a real PostgreSQL round-trip and a Redis PING, reported per dependency, disclosing no host or driver
  • Four test suites in CI — .NET, Vitest, pytest, CTest — with integration tests on real containers via Testcontainers
  • Phase 0 done; building the instrument master, so one security has one identity no matter how a provider spells it

🔍 CVerify — AI candidate verification

PythonFastAPIClaude APIASP.NET CorePostgreSQLDockerGCP

Team · 82 commits · shipped to production

Screens a candidate by cross-checking their CV against their real GitHub work and a job description, instead of trusting what the CV claims.

  • Ported the AI layer from C# stubs to a Python / FastAPI service — Claude-API agents across three pipelines: repository intelligence, candidate evaluation, JD matching
  • Code intelligence — cyclomatic and cognitive complexity, near-duplicate clone detection via MinHash LSH, and PDF/DOCX/OCR → Markdown extraction
  • C# backend — the JD module end to end: controllers, DTOs, entities, services, EF Core migrations
  • Production — moved deployment AWS EC2 → GCP: reverse proxy, self-hosted MinIO, SSL renewal, daily backups, CI deploy

🛒 DWatch — watch e-commerce

JavaServlet / JSPJSTLSQL ServerMavenJUnit 5BCrypt

Personal · full stack on plain Servlet/JSP

A full watch e-commerce platform, not a demo shop — and lately, the project I went back and secured properly.

  • Cart, checkout with COD + VietQR, guest order tracking, wishlist, admin CRUD
  • BCrypt migration with nobody locked out — verification still accepts the old plaintext rows and rehashes each one on its next correct login
  • CSRF tokens across 17 forms — which closed a real hole: /admin/products?action=delete was a GET link any site could fire from an <img> tag
  • Session fixation, open redirect and account enumeration fixed in the same auth pass
  • Service layer pulled out of the servlets, covered by 54 JUnit 5 + Mockito tests that run without a database

🧰 FU-Autokit — student browser toolkit

JavaScriptChrome MV3jQueryBootstrapService Workernode:test

Personal · 260+ commits · used by real students

Browser extension that removes the daily friction of being an FPTU student.

  • Auto-login across 9 school portals (FAP, CMS, EduNext, FLM, Library…)
  • GPA calculator + the FE score you need to pass
  • VI/EN i18n, themeable UI, MV3 service worker
  • 33 tests on node --test + jsdom, added years after the code — and they immediately caught a stray quote that had been 404-ing the default locale file for every fresh install
all repos

GitHub Activity

629 contributions489 commits40 pull requestscontributed to 9 repositories

Since my first commit in August 2023, updated daily.

top languages by repositorytop languages by commit

activity graph

Counts start from my first commit in August 2023 and include private repositories. CVerify is a fork of my team's repository, so GitHub does not count its commits here — the upstream it was forked from is linked at the top of that page.


Contact

githubrepositories

Da Nang, Vietnam · Open to backend / fullstack internships
Reach me through my GitHub profile.

footer

Pinned Loading

  1. FU-AutokitFU-AutokitPublic

    A Chromium extension to streamline web portals and save time for FPT students.

    JavaScript

  2. PQTPQTPublic

    Personal quant research & trading terminal for the Vietnam market (HOSE/HNX/UPCOM)

    C#

  3. CVerify-ForkedCVerify-ForkedPublic

    Forked from fptu-se-su26/swp391-su26-ai-audit-project-swp391_se20a02_group-05

    An enterprise platform that uses LLMs and static analysis to verify developer code, detect plagiarism/AI content, and build trusted CV profiles.

    C#

  4. DWatchDWatchPublic

    Full-stack Java e-commerce watch store (Servlet/JSP, Maven, SQL Server) with cart, checkout, VietQR payment, and an admin panel.

    Java

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
View TNL293107's full-sized avatar
🎯
Feel free to contact me via Gmail or the social media links below.
🎯
Feel free to contact me via Gmail or the social media links below.

Block or report TNL293107

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
TNL293107/README.md
bannertyping

focuslocationopen to work


About

I'm a Software Engineering student at FPT University Đà Nẵng, working mainly on the backend — C#/.NET and Java — with the database layer that sits behind it.

  • 🧩 I like problems where the hard part is the data model and the flow, not the screen.
  • 🛠️ Most of what I build starts as a real annoyance: a checkout that loses orders, ten school portals that each want the same login, a CV you have no way to verify.
  • 🤖 On my team's SWP391 project I owned the Python/FastAPI AI service and took it all the way to production on GCP — pipelines, deployment, SSL, backups.
  • 📚 Currently going deeper on .NET, clean layering, and writing services that are actually testable.
  • 🎯 Looking for a backend / fullstack internship where I can ship real features and get reviewed hard.

Tech Stack

Backend

C#.NETJavaPythonFastAPIServlet / JSPC++

Data

PostgreSQLSQL ServerMySQLRedisEF Core

AI & Infrastructure

Claude APIDockerGCPNginxGitHub Actions

Frontend & Testing

TypeScriptReactJavaScriptxUnitVitestpytestTestcontainers


Selected Work

📈 PQT — quant trading terminal

C#ASP.NET CorePostgreSQLRedisReactPythonC++Docker

Personal · in development

A Bloomberg-inspired research and trading workstation for the Vietnam market (HOSE/HNX/UPCOM) — the loop from market data through research and risk to execution.

  • Modular monolith, not microservices — .NET, React, Python and C++ layers, every significant decision written down as an ADR
  • Readiness that means something — a real PostgreSQL round-trip and a Redis PING, reported per dependency, disclosing no host or driver
  • Four test suites in CI — .NET, Vitest, pytest, CTest — with integration tests on real containers via Testcontainers
  • Phase 0 done; building the instrument master, so one security has one identity no matter how a provider spells it

🔍 CVerify — AI candidate verification

PythonFastAPIClaude APIASP.NET CorePostgreSQLDockerGCP

Team · 82 commits · shipped to production

Screens a candidate by cross-checking their CV against their real GitHub work and a job description, instead of trusting what the CV claims.

  • Ported the AI layer from C# stubs to a Python / FastAPI service — Claude-API agents across three pipelines: repository intelligence, candidate evaluation, JD matching
  • Code intelligence — cyclomatic and cognitive complexity, near-duplicate clone detection via MinHash LSH, and PDF/DOCX/OCR → Markdown extraction
  • C# backend — the JD module end to end: controllers, DTOs, entities, services, EF Core migrations
  • Production — moved deployment AWS EC2 → GCP: reverse proxy, self-hosted MinIO, SSL renewal, daily backups, CI deploy

🛒 DWatch — watch e-commerce

JavaServlet / JSPJSTLSQL ServerMavenJUnit 5BCrypt

Personal · full stack on plain Servlet/JSP

A full watch e-commerce platform, not a demo shop — and lately, the project I went back and secured properly.

  • Cart, checkout with COD + VietQR, guest order tracking, wishlist, admin CRUD
  • BCrypt migration with nobody locked out — verification still accepts the old plaintext rows and rehashes each one on its next correct login
  • CSRF tokens across 17 forms — which closed a real hole: /admin/products?action=delete was a GET link any site could fire from an <img> tag
  • Session fixation, open redirect and account enumeration fixed in the same auth pass
  • Service layer pulled out of the servlets, covered by 54 JUnit 5 + Mockito tests that run without a database

🧰 FU-Autokit — student browser toolkit

JavaScriptChrome MV3jQueryBootstrapService Workernode:test

Personal · 260+ commits · used by real students

Browser extension that removes the daily friction of being an FPTU student.

  • Auto-login across 9 school portals (FAP, CMS, EduNext, FLM, Library…)
  • GPA calculator + the FE score you need to pass
  • VI/EN i18n, themeable UI, MV3 service worker
  • 33 tests on node --test + jsdom, added years after the code — and they immediately caught a stray quote that had been 404-ing the default locale file for every fresh install
all repos

GitHub Activity

629 contributions489 commits40 pull requestscontributed to 9 repositories

Since my first commit in August 2023, updated daily.

top languages by repositorytop languages by commit

activity graph

Counts start from my first commit in August 2023 and include private repositories. CVerify is a fork of my team's repository, so GitHub does not count its commits here — the upstream it was forked from is linked at the top of that page.


Contact

githubrepositories

Da Nang, Vietnam · Open to backend / fullstack internships
Reach me through my GitHub profile.

footer

Pinned Loading

  1. FU-AutokitFU-AutokitPublic

    A Chromium extension to streamline web portals and save time for FPT students.

    JavaScript

  2. PQTPQTPublic

    Personal quant research & trading terminal for the Vietnam market (HOSE/HNX/UPCOM)

    C#

  3. CVerify-ForkedCVerify-ForkedPublic

    Forked from fptu-se-su26/swp391-su26-ai-audit-project-swp391_se20a02_group-05

    An enterprise platform that uses LLMs and static analysis to verify developer code, detect plagiarism/AI content, and build trusted CV profiles.

    C#

  4. DWatchDWatchPublic

    Full-stack Java e-commerce watch store (Servlet/JSP, Maven, SQL Server) with cart, checkout, VietQR payment, and an admin panel.

    Java

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View TNL293107's full-sized avatar
🎯
Feel free to contact me via Gmail or the social media links below.
🎯
Feel free to contact me via Gmail or the social media links below.

Block or report TNL293107

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
TNL293107/README.md
bannertyping

focuslocationopen to work


About

I'm a Software Engineering student at FPT University Đà Nẵng, working mainly on the backend — C#/.NET and Java — with the database layer that sits behind it.

  • 🧩 I like problems where the hard part is the data model and the flow, not the screen.
  • 🛠️ Most of what I build starts as a real annoyance: a checkout that loses orders, ten school portals that each want the same login, a CV you have no way to verify.
  • 🤖 On my team's SWP391 project I owned the Python/FastAPI AI service and took it all the way to production on GCP — pipelines, deployment, SSL, backups.
  • 📚 Currently going deeper on .NET, clean layering, and writing services that are actually testable.
  • 🎯 Looking for a backend / fullstack internship where I can ship real features and get reviewed hard.

Tech Stack

Backend

C#.NETJavaPythonFastAPIServlet / JSPC++

Data

PostgreSQLSQL ServerMySQLRedisEF Core

AI & Infrastructure

Claude APIDockerGCPNginxGitHub Actions

Frontend & Testing

TypeScriptReactJavaScriptxUnitVitestpytestTestcontainers


Selected Work

📈 PQT — quant trading terminal

C#ASP.NET CorePostgreSQLRedisReactPythonC++Docker

Personal · in development

A Bloomberg-inspired research and trading workstation for the Vietnam market (HOSE/HNX/UPCOM) — the loop from market data through research and risk to execution.

  • Modular monolith, not microservices — .NET, React, Python and C++ layers, every significant decision written down as an ADR
  • Readiness that means something — a real PostgreSQL round-trip and a Redis PING, reported per dependency, disclosing no host or driver
  • Four test suites in CI — .NET, Vitest, pytest, CTest — with integration tests on real containers via Testcontainers
  • Phase 0 done; building the instrument master, so one security has one identity no matter how a provider spells it

🔍 CVerify — AI candidate verification

PythonFastAPIClaude APIASP.NET CorePostgreSQLDockerGCP

Team · 82 commits · shipped to production

Screens a candidate by cross-checking their CV against their real GitHub work and a job description, instead of trusting what the CV claims.

  • Ported the AI layer from C# stubs to a Python / FastAPI service — Claude-API agents across three pipelines: repository intelligence, candidate evaluation, JD matching
  • Code intelligence — cyclomatic and cognitive complexity, near-duplicate clone detection via MinHash LSH, and PDF/DOCX/OCR → Markdown extraction
  • C# backend — the JD module end to end: controllers, DTOs, entities, services, EF Core migrations
  • Production — moved deployment AWS EC2 → GCP: reverse proxy, self-hosted MinIO, SSL renewal, daily backups, CI deploy

🛒 DWatch — watch e-commerce

JavaServlet / JSPJSTLSQL ServerMavenJUnit 5BCrypt

Personal · full stack on plain Servlet/JSP

A full watch e-commerce platform, not a demo shop — and lately, the project I went back and secured properly.

  • Cart, checkout with COD + VietQR, guest order tracking, wishlist, admin CRUD
  • BCrypt migration with nobody locked out — verification still accepts the old plaintext rows and rehashes each one on its next correct login
  • CSRF tokens across 17 forms — which closed a real hole: /admin/products?action=delete was a GET link any site could fire from an <img> tag
  • Session fixation, open redirect and account enumeration fixed in the same auth pass
  • Service layer pulled out of the servlets, covered by 54 JUnit 5 + Mockito tests that run without a database

🧰 FU-Autokit — student browser toolkit

JavaScriptChrome MV3jQueryBootstrapService Workernode:test

Personal · 260+ commits · used by real students

Browser extension that removes the daily friction of being an FPTU student.

  • Auto-login across 9 school portals (FAP, CMS, EduNext, FLM, Library…)
  • GPA calculator + the FE score you need to pass
  • VI/EN i18n, themeable UI, MV3 service worker
  • 33 tests on node --test + jsdom, added years after the code — and they immediately caught a stray quote that had been 404-ing the default locale file for every fresh install
all repos

GitHub Activity

629 contributions489 commits40 pull requestscontributed to 9 repositories

Since my first commit in August 2023, updated daily.

top languages by repositorytop languages by commit

activity graph

Counts start from my first commit in August 2023 and include private repositories. CVerify is a fork of my team's repository, so GitHub does not count its commits here — the upstream it was forked from is linked at the top of that page.


Contact

githubrepositories

Da Nang, Vietnam · Open to backend / fullstack internships
Reach me through my GitHub profile.

footer

Pinned Loading

  1. FU-AutokitFU-AutokitPublic

    A Chromium extension to streamline web portals and save time for FPT students.

    JavaScript

  2. PQTPQTPublic

    Personal quant research & trading terminal for the Vietnam market (HOSE/HNX/UPCOM)

    C#

  3. CVerify-ForkedCVerify-ForkedPublic

    Forked from fptu-se-su26/swp391-su26-ai-audit-project-swp391_se20a02_group-05

    An enterprise platform that uses LLMs and static analysis to verify developer code, detect plagiarism/AI content, and build trusted CV profiles.

    C#

  4. DWatchDWatchPublic

    Full-stack Java e-commerce watch store (Servlet/JSP, Maven, SQL Server) with cart, checkout, VietQR payment, and an admin panel.

    Java

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View TNL293107's full-sized avatar
🎯
Feel free to contact me via Gmail or the social media links below.
🎯
Feel free to contact me via Gmail or the social media links below.

Block or report TNL293107

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
TNL293107/README.md
bannertyping

focuslocationopen to work


About

I'm a Software Engineering student at FPT University Đà Nẵng, working mainly on the backend — C#/.NET and Java — with the database layer that sits behind it.

  • 🧩 I like problems where the hard part is the data model and the flow, not the screen.
  • 🛠️ Most of what I build starts as a real annoyance: a checkout that loses orders, ten school portals that each want the same login, a CV you have no way to verify.
  • 🤖 On my team's SWP391 project I owned the Python/FastAPI AI service and took it all the way to production on GCP — pipelines, deployment, SSL, backups.
  • 📚 Currently going deeper on .NET, clean layering, and writing services that are actually testable.
  • 🎯 Looking for a backend / fullstack internship where I can ship real features and get reviewed hard.

Tech Stack

Backend

C#.NETJavaPythonFastAPIServlet / JSPC++

Data

PostgreSQLSQL ServerMySQLRedisEF Core

AI & Infrastructure

Claude APIDockerGCPNginxGitHub Actions

Frontend & Testing

TypeScriptReactJavaScriptxUnitVitestpytestTestcontainers


Selected Work

📈 PQT — quant trading terminal

C#ASP.NET CorePostgreSQLRedisReactPythonC++Docker

Personal · in development

A Bloomberg-inspired research and trading workstation for the Vietnam market (HOSE/HNX/UPCOM) — the loop from market data through research and risk to execution.

  • Modular monolith, not microservices — .NET, React, Python and C++ layers, every significant decision written down as an ADR
  • Readiness that means something — a real PostgreSQL round-trip and a Redis PING, reported per dependency, disclosing no host or driver
  • Four test suites in CI — .NET, Vitest, pytest, CTest — with integration tests on real containers via Testcontainers
  • Phase 0 done; building the instrument master, so one security has one identity no matter how a provider spells it

🔍 CVerify — AI candidate verification

PythonFastAPIClaude APIASP.NET CorePostgreSQLDockerGCP

Team · 82 commits · shipped to production

Screens a candidate by cross-checking their CV against their real GitHub work and a job description, instead of trusting what the CV claims.

  • Ported the AI layer from C# stubs to a Python / FastAPI service — Claude-API agents across three pipelines: repository intelligence, candidate evaluation, JD matching
  • Code intelligence — cyclomatic and cognitive complexity, near-duplicate clone detection via MinHash LSH, and PDF/DOCX/OCR → Markdown extraction
  • C# backend — the JD module end to end: controllers, DTOs, entities, services, EF Core migrations
  • Production — moved deployment AWS EC2 → GCP: reverse proxy, self-hosted MinIO, SSL renewal, daily backups, CI deploy

🛒 DWatch — watch e-commerce

JavaServlet / JSPJSTLSQL ServerMavenJUnit 5BCrypt

Personal · full stack on plain Servlet/JSP

A full watch e-commerce platform, not a demo shop — and lately, the project I went back and secured properly.

  • Cart, checkout with COD + VietQR, guest order tracking, wishlist, admin CRUD
  • BCrypt migration with nobody locked out — verification still accepts the old plaintext rows and rehashes each one on its next correct login
  • CSRF tokens across 17 forms — which closed a real hole: /admin/products?action=delete was a GET link any site could fire from an <img> tag
  • Session fixation, open redirect and account enumeration fixed in the same auth pass
  • Service layer pulled out of the servlets, covered by 54 JUnit 5 + Mockito tests that run without a database

🧰 FU-Autokit — student browser toolkit

JavaScriptChrome MV3jQueryBootstrapService Workernode:test

Personal · 260+ commits · used by real students

Browser extension that removes the daily friction of being an FPTU student.

  • Auto-login across 9 school portals (FAP, CMS, EduNext, FLM, Library…)
  • GPA calculator + the FE score you need to pass
  • VI/EN i18n, themeable UI, MV3 service worker
  • 33 tests on node --test + jsdom, added years after the code — and they immediately caught a stray quote that had been 404-ing the default locale file for every fresh install
all repos

GitHub Activity

629 contributions489 commits40 pull requestscontributed to 9 repositories

Since my first commit in August 2023, updated daily.

top languages by repositorytop languages by commit

activity graph

Counts start from my first commit in August 2023 and include private repositories. CVerify is a fork of my team's repository, so GitHub does not count its commits here — the upstream it was forked from is linked at the top of that page.


Contact

githubrepositories

Da Nang, Vietnam · Open to backend / fullstack internships
Reach me through my GitHub profile.

footer

Pinned Loading

  1. FU-AutokitFU-AutokitPublic

    A Chromium extension to streamline web portals and save time for FPT students.

    JavaScript

  2. PQTPQTPublic

    Personal quant research & trading terminal for the Vietnam market (HOSE/HNX/UPCOM)

    C#

  3. CVerify-ForkedCVerify-ForkedPublic

    Forked from fptu-se-su26/swp391-su26-ai-audit-project-swp391_se20a02_group-05

    An enterprise platform that uses LLMs and static analysis to verify developer code, detect plagiarism/AI content, and build trusted CV profiles.

    C#

  4. DWatchDWatchPublic

    Full-stack Java e-commerce watch store (Servlet/JSP, Maven, SQL Server) with cart, checkout, VietQR payment, and an admin panel.

    Java

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
View TNL293107's full-sized avatar
🎯
Feel free to contact me via Gmail or the social media links below.
🎯
Feel free to contact me via Gmail or the social media links below.

Block or report TNL293107

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
TNL293107/README.md
bannertyping

focuslocationopen to work


About

I'm a Software Engineering student at FPT University Đà Nẵng, working mainly on the backend — C#/.NET and Java — with the database layer that sits behind it.

  • 🧩 I like problems where the hard part is the data model and the flow, not the screen.
  • 🛠️ Most of what I build starts as a real annoyance: a checkout that loses orders, ten school portals that each want the same login, a CV you have no way to verify.
  • 🤖 On my team's SWP391 project I owned the Python/FastAPI AI service and took it all the way to production on GCP — pipelines, deployment, SSL, backups.
  • 📚 Currently going deeper on .NET, clean layering, and writing services that are actually testable.
  • 🎯 Looking for a backend / fullstack internship where I can ship real features and get reviewed hard.

Tech Stack

Backend

C#.NETJavaPythonFastAPIServlet / JSPC++

Data

PostgreSQLSQL ServerMySQLRedisEF Core

AI & Infrastructure

Claude APIDockerGCPNginxGitHub Actions

Frontend & Testing

TypeScriptReactJavaScriptxUnitVitestpytestTestcontainers


Selected Work

📈 PQT — quant trading terminal

C#ASP.NET CorePostgreSQLRedisReactPythonC++Docker

Personal · in development

A Bloomberg-inspired research and trading workstation for the Vietnam market (HOSE/HNX/UPCOM) — the loop from market data through research and risk to execution.

  • Modular monolith, not microservices — .NET, React, Python and C++ layers, every significant decision written down as an ADR
  • Readiness that means something — a real PostgreSQL round-trip and a Redis PING, reported per dependency, disclosing no host or driver
  • Four test suites in CI — .NET, Vitest, pytest, CTest — with integration tests on real containers via Testcontainers
  • Phase 0 done; building the instrument master, so one security has one identity no matter how a provider spells it

🔍 CVerify — AI candidate verification

PythonFastAPIClaude APIASP.NET CorePostgreSQLDockerGCP

Team · 82 commits · shipped to production

Screens a candidate by cross-checking their CV against their real GitHub work and a job description, instead of trusting what the CV claims.

  • Ported the AI layer from C# stubs to a Python / FastAPI service — Claude-API agents across three pipelines: repository intelligence, candidate evaluation, JD matching
  • Code intelligence — cyclomatic and cognitive complexity, near-duplicate clone detection via MinHash LSH, and PDF/DOCX/OCR → Markdown extraction
  • C# backend — the JD module end to end: controllers, DTOs, entities, services, EF Core migrations
  • Production — moved deployment AWS EC2 → GCP: reverse proxy, self-hosted MinIO, SSL renewal, daily backups, CI deploy

🛒 DWatch — watch e-commerce

JavaServlet / JSPJSTLSQL ServerMavenJUnit 5BCrypt

Personal · full stack on plain Servlet/JSP

A full watch e-commerce platform, not a demo shop — and lately, the project I went back and secured properly.

  • Cart, checkout with COD + VietQR, guest order tracking, wishlist, admin CRUD
  • BCrypt migration with nobody locked out — verification still accepts the old plaintext rows and rehashes each one on its next correct login
  • CSRF tokens across 17 forms — which closed a real hole: /admin/products?action=delete was a GET link any site could fire from an <img> tag
  • Session fixation, open redirect and account enumeration fixed in the same auth pass
  • Service layer pulled out of the servlets, covered by 54 JUnit 5 + Mockito tests that run without a database

🧰 FU-Autokit — student browser toolkit

JavaScriptChrome MV3jQueryBootstrapService Workernode:test

Personal · 260+ commits · used by real students

Browser extension that removes the daily friction of being an FPTU student.

  • Auto-login across 9 school portals (FAP, CMS, EduNext, FLM, Library…)
  • GPA calculator + the FE score you need to pass
  • VI/EN i18n, themeable UI, MV3 service worker
  • 33 tests on node --test + jsdom, added years after the code — and they immediately caught a stray quote that had been 404-ing the default locale file for every fresh install
all repos

GitHub Activity

629 contributions489 commits40 pull requestscontributed to 9 repositories

Since my first commit in August 2023, updated daily.

top languages by repositorytop languages by commit

activity graph

Counts start from my first commit in August 2023 and include private repositories. CVerify is a fork of my team's repository, so GitHub does not count its commits here — the upstream it was forked from is linked at the top of that page.


Contact

githubrepositories

Da Nang, Vietnam · Open to backend / fullstack internships
Reach me through my GitHub profile.

footer

Pinned Loading

  1. FU-AutokitFU-AutokitPublic

    A Chromium extension to streamline web portals and save time for FPT students.

    JavaScript

  2. PQTPQTPublic

    Personal quant research & trading terminal for the Vietnam market (HOSE/HNX/UPCOM)

    C#

  3. CVerify-ForkedCVerify-ForkedPublic

    Forked from fptu-se-su26/swp391-su26-ai-audit-project-swp391_se20a02_group-05

    An enterprise platform that uses LLMs and static analysis to verify developer code, detect plagiarism/AI content, and build trusted CV profiles.

    C#

  4. DWatchDWatchPublic

    Full-stack Java e-commerce watch store (Servlet/JSP, Maven, SQL Server) with cart, checkout, VietQR payment, and an admin panel.

    Java