Help
RSS
API
Feed
Maltego
Contact
Domain > cv.quocvu.studio
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2025-12-07
89.117.139.130
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyConnection: Keep-AliveKeep-Alive: timeout5, max100Content-Type: text/htmlContent-Length: 795Date: Sun, 07 Dec 2025 18:13:23 GMTServer: LiteSpeedLocation: https://cv.quocvu.studio/platform: hostingerpanel: hpanelContent-Security-Policy: upgrade-insecure-requests !DOCTYPE html>html styleheight:100%>head>meta nameviewport contentwidthdevice-width, initial-scale1, shrink-to-fitno />title> 301 Moved Permanently/title>style>@media (prefers-color-scheme:dark){body{background-color:#000!important}}/style>/head>body stylecolor: #444; margin:0;font: normal 14px/20px Arial, Helvetica, sans-serif; height:100%; background-color: #fff;>div styleheight:auto; min-height:100%; > div styletext-align: center; width:800px; margin-left: -400px; position:absolute; top: 30%; left:50%;> h1 stylemargin:0; font-size:150px; line-height:150px; font-weight:bold;>301/h1>h2 stylemargin-top:20px;font-size: 30px;>Moved Permanently/h2>p>The document has been permanently moved./p>/div>/div>/body>/html>
Port 443
HTTP/1.1 200 OKConnection: Keep-AliveKeep-Alive: timeout5, max100Content-Type: text/htmlLast-Modified: Sun, 30 Nov 2025 15:30:36 GMTEtag: b3de-692c631c-2c7d8ea7e8a8eb55;;;Accept-Ranges: bytesContent-Length: 46046Date: Sun, 07 Dec 2025 18:13:23 GMTServer: LiteSpeedplatform: hostingerpanel: hpanelContent-Security-Policy: upgrade-insecure-requests !DOCTYPE html>html langen classscroll-smooth>head> meta charsetUTF-8> meta nameviewport contentwidthdevice-width, initial-scale1.0> title>Vu Nguyen - Frontend Engineer/title> script srchttps://cdn.tailwindcss.com>/script> link hrefhttps://fonts.googleapis.com/css2?familyInter:wght@300;400;500;600;700&familyJetBrains+Mono:wght@400;700&displayswap relstylesheet> link relicon typeimage/png sizes16x16 hrefhttp://cv.quocvu.studio/images/icon.png> script srchttps://unpkg.com/lucide@latest>/script> style> :root { --bg-dark: #0f172a; --card-bg: #1e293b; --accent: #38BDF8; --text-main: #f1f5f9; --text-muted: #94a3b8; } body { font-family: Inter, sans-serif; background-color: var(--bg-dark); color: var(--text-main); background-image: radial-gradient(circle at 50% 0%, #1e293b 0%, #0f172a 70%); } .font-mono { font-family: JetBrains Mono, monospace; } .section { scroll-margin-top: 80px; } .accent-text { color: var(--accent); } .bg-accent { background-color: var(--accent); } /* Card Styling */ .card { background-color: rgba(30, 41, 59, 0.7); backdrop-filter: blur(10px); border: 1px solid rgba(148, 163, 184, 0.1); border-radius: 1rem; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .card:hover { transform: translateY(-4px); border-color: rgba(56, 189, 248, 0.3); box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.2), 0 10px 10px -5px rgba(0, 0, 0, 0.1); } .card:hover .card-icon { color: var(--accent); transform: scale(1.1); } /* Tags */ .tag { background-color: rgba(56, 189, 248, 0.1); color: #7DD3FC; padding: 0.25rem 0.75rem; border-radius: 9999px; font-size: 0.75rem; font-weight: 500; font-family: JetBrains Mono, monospace; border: 1px solid rgba(56, 189, 248, 0.2); } /* Buttons */ .btn-primary { background-color: var(--accent); color: #0f172a; font-weight: 600; padding: 0.5rem 1.25rem; border-radius: 0.5rem; transition: all 0.2s; } .btn-primary:hover { background-color: #7DD3FC; transform: translateY(-1px); } .btn-outline { background-color: transparent; border: 1px solid rgba(148, 163, 184, 0.3); color: var(--text-main); font-weight: 500; padding: 0.5rem 1.25rem; border-radius: 0.5rem; transition: all 0.2s; } .btn-outline:hover { border-color: var(--accent); color: var(--accent); background-color: rgba(56, 189, 248, 0.05); } /* Icon Links */ .icon-link { transition: all 0.2s; color: var(--text-muted); } .icon-link:hover { color: var(--accent); transform: translateY(-2px); } /style>/head>body classantialiased selection:bg-sky-500/30> header classfixed top-0 left-0 right-0 z-50 border-b border-slate-800 bg-slate-900/80 backdrop-blur-md> div classcontainer mx-auto px-6 h-16 flex justify-between items-center> a href#hero classtext-xl font-bold tracking-tight group> Vu Nguyenspan classaccent-text group-hover:animate-pulse>./span> /a> nav classhidden md:flex space-x-8 text-sm font-medium text-slate-300> a href#about classhover:text-white hover:accent-text transition-colors>About/a> a href#experience classhover:text-white hover:accent-text transition-colors>Experience/a> a href#skills classhover:text-white hover:accent-text transition-colors>Skills/a> a href#projects classhover:text-white hover:accent-text transition-colors>Projects/a> a href#community classhover:text-white hover:accent-text transition-colors>Community/a> /nav> a hrefmailto:nguyenquocvu.work@gmail.com classhidden md:block btn-primary text-sm> Say Hello /a> button idmobile-menu-btn classmd:hidden text-slate-300 hover:text-white> i data-lucidemenu>/i> /button> /div> div idmobile-menu classhidden md:hidden bg-slate-900 border-b border-slate-800> nav classflex flex-col p-4 space-y-4> a href#about classtext-slate-300 hover:accent-text>About/a> a href#experience classtext-slate-300 hover:accent-text>Experience/a> a href#skills classtext-slate-300 hover:accent-text>Skills/a> a href#projects classtext-slate-300 hover:accent-text>Projects/a> a href#community classtext-slate-300 hover:accent-text>Community/a> a hrefmailto:nguyenquocvu.work@gmail.com classbtn-primary text-center>Contact Me/a> /nav> /div> /header> main classcontainer mx-auto px-6> section idhero classmin-h-screen flex items-center pt-20> div classgrid grid-cols-1 md:grid-cols-12 gap-12 items-center w-full> div classmd:col-span-7 space-y-6> p classfont-mono text-sky-400>Hi, my name is/p> h1 classtext-5xl md:text-7xl font-bold tracking-tighter text-white> Vu Nguyen. /h1> h2 classtext-4xl md:text-6xl font-bold tracking-tight text-slate-400> I build things for the web. /h2> p classmax-w-xl text-lg text-slate-400 leading-relaxed> Im a Frontend Engineer expanding into full-stack development. I specialize in building exceptional digital experiences using React, Angular, and modern AI integrations. /p> div classpt-4 flex items-center space-x-6> a hrefhttps://www.linkedin.com/in/ngquocvu target_blank classicon-link>i data-lucidelinkedin classw-6 h-6>/i>/a> a hrefhttps://www.youtube.com/@vu.junior target_blank classicon-link>i data-lucideyoutube classw-6 h-6>/i>/a> a hrefmailto:nguyenquocvu.work@gmail.com classicon-link>i data-lucidemail classw-6 h-6>/i>/a> a hreftel:+84967852575 classicon-link>i data-lucidephone classw-6 h-6>/i>/a> /div> /div> div classmd:col-span-5 flex justify-center relative> div classabsolute inset-0 bg-sky-500/20 blur-3xl rounded-full transform translate-y-4>/div> div classrelative w-64 h-80 md:w-80 md:h-96 rounded-2xl overflow-hidden border-2 border-slate-700 bg-slate-800 shadow-2xl transition-transform hover:scale-1.02 duration-300> img srchttps://cv.quocvu.studio/images/profile.jpg altVu Nguyen classw-full h-full object-cover opacity-90 hover:opacity-100 transition-opacity onerrorthis.onerrornull;this.srchttps://placehold.co/400x500/1e293b/94a3b8?textVu+Nguyen;> div classabsolute inset-0 bg-gradient-to-t from-slate-900/60 to-transparent>/div> /div> /div> /div> /section> section idabout classpy-24 section> h3 classtext-2xl font-bold mb-8 flex items-center text-slate-100> span classfont-mono text-sky-400 text-xl mr-4>01./span> About Me span classh-px bg-slate-700 flex-grow ml-6>/span> /h3> div classgrid grid-cols-1 md:grid-cols-3 gap-12 text-slate-400 leading-relaxed> div classmd:col-span-2 space-y-4> p> Im a Frontend Engineer with real-world experience building and launching applications for global clients. I love being part of the entire product journey and I am expanding into fullstack development to contribute across the stack. /p> p> Im always looking for ways to make things faster, smoother, and more impactful for users. Writing clean, maintainable code backed by strong testing and documentation is a commitment I take seriously. /p> p> Outside of work, Im passionate about volunteering and mentoring other developers, sharing what Ive learned, and helping others grow in their careers. /p> /div> div> /div> /div> /section> section idexperience classpy-24 section> h3 classtext-2xl font-bold mb-12 flex items-center text-slate-100> span classfont-mono text-sky-400 text-xl mr-4>02./span> Where Ive Worked span classh-px bg-slate-700 flex-grow ml-6>/span> /h3> div classspace-y-12 max-w-4xl border-l border-slate-700 ml-3 md:ml-6 pl-8 md:pl-12 relative> div classrelative> span classabsolute -left-41px md:-left-57px top-1 h-5 w-5 rounded-full border-2 border-sky-400 bg-slate-900>/span> h4 classtext-xl font-semibold text-slate-100> Software Engineer span classtext-sky-400>@ EPAM Systems Vietnam/span> /h4> p classfont-mono text-sm text-slate-500 mb-4 mt-1>Nov 2021 - Present/p> ul classspace-y-3 text-slate-400 text-sm md:text-base> li classflex items-start> i data-lucidechevron-right classw-5 h-5 text-sky-400 mr-2 shrink-0>/i> span>Played a key role in end-to-end development, delivering responsive and scalable web applications (e-commerce, data-heavy apps) using React, TypeScript, Redux, and Commercetools./span> /li> li classflex items-start> i data-lucidechevron-right classw-5 h-5 text-sky-400 mr-2 shrink-0>/i> span>Committed to clean, maintainable code backed by strong testing (Vitest), linting (ESLint), and CI/CD practices./span> /li> li classflex items-start> i data-lucidechevron-right classw-5 h-5 text-sky-400 mr-2 shrink-0>/i> span>Improved legacy codebases while building cutting-edge projects with a focus on performance, security, and strong frontend architecture./span> /li> /ul> /div> div classrelative> span classabsolute -left-41px md:-left-57px top-1 h-5 w-5 rounded-full border-2 border-slate-600 bg-slate-900>/span> h4 classtext-xl font-semibold text-slate-100> Web Developer span classtext-sky-400>@ Multiple Clients/span> /h4> p classfont-mono text-sm text-slate-500 mb-4 mt-1>Sep 2020 - Oct 2021/p> ul classspace-y-3 text-slate-400 text-sm md:text-base> li classflex items-start> i data-lucidechevron-right classw-5 h-5 text-sky-400 mr-2 shrink-0>/i> span>Implemented and deployed websites for diverse clients using React.js, Next.js, and WordPress./span> /li> li classflex items-start> i data-lucidechevron-right classw-5 h-5 text-sky-400 mr-2 shrink-0>/i> span>Enhanced websites with video editing and design skills using Adobe Premiere, Photoshop, and Canva./span> /li> /ul> /div> /div> /section> section idskills classpy-24 section> h3 classtext-2xl font-bold mb-12 flex items-center text-slate-100> span classfont-mono text-sky-400 text-xl mr-4>03./span> Skills & Tools span classh-px bg-slate-700 flex-grow ml-6>/span> /h3> div classgrid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6> div classcard p-6 hover:bg-slate-800/50> h4 classtext-lg font-semibold text-sky-100 mb-4 flex items-center> i data-lucidecode-2 classw-5 h-5 mr-3 text-sky-400>/i> Core /h4> div classflex flex-wrap gap-2> span classtag>HTML/span>span classtag>CSS/span>span classtag>JavaScript (ES6+)/span>span classtag>TypeScript/span> /div> /div> div classcard p-6 hover:bg-slate-800/50> h4 classtext-lg font-semibold text-sky-100 mb-4 flex items-center> i data-lucidelayout classw-5 h-5 mr-3 text-sky-400>/i> Frontend /h4> div classflex flex-wrap gap-2> span classtag>React.js/span>span classtag>Next.js/span>span classtag>Redux/span>span classtag>Vite/span>span classtag>Material UI/span>span classtag>Tailwind/span> /div> /div> div classcard p-6 hover:bg-slate-800/50> h4 classtext-lg font-semibold text-sky-100 mb-4 flex items-center> i data-lucidedatabase classw-5 h-5 mr-3 text-sky-400>/i> Backend & AI /h4> div classflex flex-wrap gap-2> span classtag>NestJS/span>span classtag>Prisma/span>span classtag>PostgreSQL/span>span classtag>Langchain/span>span classtag>Gemini API/span> /div> /div> div classcard p-6 hover:bg-slate-800/50> h4 classtext-lg font-semibold text-sky-100 mb-4 flex items-center> i data-lucideterminal classw-5 h-5 mr-3 text-sky-400>/i> DevOps & Tools /h4> div classflex flex-wrap gap-2> span classtag>Git/span>span classtag>CI/CD/span>span classtag>AWS/span>span classtag>Vitest/span>span classtag>Jira/span> /div> /div> /div> /section> section idprojects classpy-24 section> h3 classtext-2xl font-bold mb-12 flex items-center text-slate-100> span classfont-mono text-sky-400 text-xl mr-4>04./span> Things Ive Built span classh-px bg-slate-700 flex-grow ml-6>/span> /h3> div classgrid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6> div classcard p-6 flex flex-col h-full group> div classflex justify-between items-start mb-6> i data-lucidefolder classw-10 h-10 text-sky-400 card-icon transition-transform>/i> div classflex gap-4> a hrefhttp://reviewthe.quocvu.studio target_blank classtext-slate-400 hover:text-sky-400 transition-colors>i data-lucideexternal-link classw-5 h-5>/i>/a> /div> /div> h4 classtext-xl font-bold text-slate-100 mb-2 group-hover:text-sky-400 transition-colors>reviewthe.quocvu.studio/h4> p classtext-slate-400 text-sm leading-relaxed mb-6 flex-grow> An AI-powered tool for the community. Features a Next.js frontend and a robust backend with NestJS, Prisma, and PostgreSQL. /p> ul classflex flex-wrap gap-3 font-mono text-xs text-slate-500> li>Next.js/li> li>Langchain/li> li>NestJS/li> li>PostgreSQL/li> /ul> /div> div classcard p-6 flex flex-col h-full group> div classflex justify-between items-start mb-6> i data-lucidefolder classw-10 h-10 text-sky-400 card-icon transition-transform>/i> div classflex gap-4> a hrefhttps://imaginart.vercel.app/ target_blank classtext-slate-400 hover:text-sky-400 transition-colors>i data-lucideexternal-link classw-5 h-5>/i>/a> /div> /div> h4 classtext-xl font-bold text-slate-100 mb-2 group-hover:text-sky-400 transition-colors>ImaginArt/h4> p classtext-slate-400 text-sm leading-relaxed mb-6 flex-grow> Generate and store unique artwork using AI. This app leverages image generation models to create stunning visuals from text prompts. /p> ul classflex flex-wrap gap-3 font-mono text-xs text-slate-500> li>React/li> li>AI Models/li> li>Vercel/li> /ul> /div> div classcard p-6 flex flex-col h-full group> div classflex justify-between items-start mb-6> i data-lucidefolder classw-10 h-10 text-sky-400 card-icon transition-transform>/i> div classflex gap-4> a hrefhttp://quynhnha.com target_blank classtext-slate-400 hover:text-sky-400 transition-colors>i data-lucideexternal-link classw-5 h-5>/i>/a> /div> /div> h4 classtext-xl font-bold text-slate-100 mb-2 group-hover:text-sky-400 transition-colors>quynhnha.com/h4> p classtext-slate-400 text-sm leading-relaxed mb-6 flex-grow> A professional WordPress website built for a dental clinic service, showcasing their services and providing contact information. /p> ul classflex flex-wrap gap-3 font-mono text-xs text-slate-500> li>WordPress/li> li>PHP/li> li>Design/li> /ul> /div> /div> /section> section idcommunity classpy-24 section> h3 classtext-2xl font-bold mb-12 flex items-center text-slate-100> span classfont-mono text-sky-400 text-xl mr-4>05./span> Community & Speaking span classh-px bg-slate-700 flex-grow ml-6>/span> /h3> div classspace-y-10> div classcard p-8 group relative overflow-hidden> div classabsolute top-0 right-0 p-4 opacity-10 group-hover:opacity-20 transition-opacity> i data-lucidemic-2 classw-32 h-32 text-sky-400>/i> /div> div classgrid grid-cols-1 md:grid-cols-2 gap-8 items-center relative z-10> div classorder-2 md:order-1> div classinline-flex items-center gap-2 mb-3 px-3 py-1 rounded-full bg-slate-800 border border-slate-700 text-slate-300 text-xs font-mono> i data-lucidemic classw-3 h-3>/i> Speaker /div> h4 classtext-2xl font-bold text-white mb-2>DevFest on Campus 2025/h4> h5 classtext-lg font-medium text-sky-400 mb-4>Session: Live Coding “Build Gemini Chatbot using Angular”/h5> div classflex items-start gap-2 text-slate-400 text-sm mb-4> i data-lucidemap-pin classw-4 h-4 mt-1 shrink-0>/i> span>Saigon Universitybr>273 An Duong Vuong, Cho Quan, HCMC/span> /div> p classtext-slate-400 leading-relaxed mb-6> Transitioning from theory to practice. I will conduct a live coding session to build an intelligent chatbot integrated with Gemini API, applying the power of Generative AI into an Angular UI. /p> div classflex flex-wrap gap-2 mb-6> span classtag>Angular/span> span classtag>Gemini API/span> span classtag>Generative AI/span> /div> a hrefhttps://gdg.community.dev/events/details/google-gdg-ho-chi-minh-city-presents-devfest-on-campus-2025-gdgoc-sai-gon-university/ target_blank classbtn-outline inline-flex items-center> Event Details i data-lucideexternal-link classw-4 h-4 ml-2>/i> /a> /div> div classorder-1 md:order-2> div classrounded-xl overflow-hidden shadow-2xl border border-slate-700> img srchttps://cv.quocvu.studio/images/devfest-campus-2025.jpg altDevFest on Campus classw-full h-auto object-cover transform group-hover:scale-105 transition-transform duration-500 onerrorthis.onerrornull;this.srchttps://placehold.co/600x400/1e293b/94a3b8?textDevFest+Campus+2025;> /div> /div> /div> /div> div classcard p-8 group> div classgrid grid-cols-1 md:grid-cols-2 gap-8 items-center> div classorder-2 md:order-1> div classinline-flex items-center gap-2 mb-3 px-3 py-1 rounded-full bg-slate-800 border border-slate-700 text-slate-300 text-xs font-mono> i data-lucidemic classw-3 h-3>/i> Speaker /div> h4 classtext-2xl font-bold text-white mb-2>Road to DevFest HCMC 2025/h4> h5 classtext-lg font-medium text-sky-400 mb-4>Topic: Building a Chatbot in Angular using Gemini API/h5> p classtext-slate-400 leading-relaxed mb-6> Shared insights on integrating AI into web applications. As a speaker, I guided developers through the process of connecting Angular applications with Googles Gemini API to create responsive and intelligent conversational interfaces. /p> div classflex flex-wrap gap-2 mb-6> span classtag>Angular/span> span classtag>AI Integration/span> /div> a hrefhttps://gdg.community.dev/events/details/google-gdg-ho-chi-minh-city-presents-road-to-devfest-hcmc-2025-01-ai-webpack/ target_blank classbtn-outline inline-flex items-center> Event Details i data-lucideexternal-link classw-4 h-4 ml-2>/i> /a> /div> div classorder-1 md:order-2> div classrounded-xl overflow-hidden shadow-2xl border border-slate-700> img srchttps://cv.quocvu.studio/images/road-to-devfest-2025.jpg altRoad to DevFest classw-full h-auto object-cover transform group-hover:scale-105 transition-transform duration-500 onerrorthis.onerrornull;this.srchttps://placehold.co/600x400/1e293b/94a3b8?textRoad+to+DevFest;> /div> /div> /div> /div> div classcard p-8 group> div classgrid grid-cols-1 md:grid-cols-2 gap-8 items-center> div classorder-2 md:order-1> div classinline-flex items-center gap-2 mb-3 px-3 py-1 rounded-full bg-slate-800 border border-slate-700 text-slate-300 text-xs font-mono> i data-lucidemic classw-3 h-3>/i> Speaker /div> h4 classtext-2xl font-bold text-white mb-2>Gemini Study Jams 2025/h4> h5 classtext-lg font-medium text-sky-400 mb-4>Track 2: Prompt Engineering & Core Developments/h5> p classtext-slate-400 leading-relaxed mb-6> Facilitated a collaborative learning event at FPT University. Guided participants through curated tutorials and hands-on labs focused on the Gemini API, helping members build projects and earn verifiable skill badges. /p> div classflex flex-wrap gap-3> a hrefhttps://www.youtube.com/watch?vpHDfeHblJMw&listPLFPy0otOh2SpbTfQ3NJmlCvy6wDNd0_99 target_blank classbtn-primary inline-flex items-center bg-red-600 hover:bg-red-700 text-white> i data-lucideyoutube classw-4 h-4 mr-2>/i> Watch Talk /a> a hrefhttps://gdg.community.dev/events/details/google-gdg-on-campus-fpt-university-ho-chi-minh-city-vietnam-presents-gemini-study-jams-2025-track-1-gemini-fundamentals/ target_blank classbtn-outline inline-flex items-center> Event Page i data-lucideexternal-link classw-4 h-4 ml-2>/i> /a> /div> /div> div classorder-1 md:order-2> div classrounded-xl overflow-hidden shadow-2xl border border-slate-700> img srchttps://cv.quocvu.studio/images/gemini-study-jams.jpg altGemini Study Jams classw-full h-auto object-cover transform group-hover:scale-105 transition-transform duration-500 onerrorthis.onerrornull;this.srchttps://placehold.co/600x400/1e293b/94a3b8?textGemini+Study+Jams;> /div> /div> /div> /div> div classcard p-8 group> div classgrid grid-cols-1 md:grid-cols-2 gap-8 items-center> div classorder-2 md:order-1> div classinline-flex items-center gap-2 mb-3 px-3 py-1 rounded-full bg-slate-800 border border-slate-700 text-slate-300 text-xs font-mono> i data-lucideheart classw-3 h-3>/i> Ambassador /div> h4 classtext-2xl font-bold text-white mb-3>Lead The Change/h4> p classtext-slate-400 leading-relaxed> As an Ambassador for a hrefhttps://leadthechange.asia/camnang/ target_blank classtext-sky-400 hover:underline>Lead The Change/a>, I had the privilege of sharing my inspiration story with students, aiming to motivate the next generation of tech talent in Vietnam. /p> /div> div classorder-1 md:order-2> div classrounded-xl overflow-hidden shadow-2xl border border-slate-700> img srchttps://cv.quocvu.studio/images/story-telling.png altLead The Change classw-full h-auto object-cover transform group-hover:scale-105 transition-transform duration-500 onerrorthis.onerrornull;this.srchttps://placehold.co/600x400/1e293b/94a3b8?textStory+Telling;> /div> /div> /div> /div> /div> /section> section idawards classpy-24 section> h3 classtext-2xl font-bold mb-12 text-center text-slate-100>Awards & Recognition/h3> div classmax-w-4xl mx-auto grid grid-cols-1 md:grid-cols-2 gap-6> div classcard p-6 border-l-4 border-l-sky-500> h4 classfont-semibold text-lg text-white mb-4 flex items-center> i data-lucideaward classw-5 h-5 mr-3 text-sky-400>/i> EPAM Systems /h4> ul classspace-y-3 text-slate-400 text-sm> li classflex items-center>span classw-2 h-2 rounded-full bg-sky-500 mr-3>/span>Contributor of the Year (2024)/li> li classflex items-center>span classw-2 h-2 rounded-full bg-sky-500 mr-3>/span>Contributor of the Year (2023)/li> li classflex items-center>span classw-2 h-2 rounded-full bg-sky-500 mr-3>/span>Star of the Quarter (Q2/2023)/li> /ul> /div> div classcard p-6 border-l-4 border-l-purple-500> h4 classfont-semibold text-lg text-white mb-4 flex items-center> i data-lucideusers classw-5 h-5 mr-3 text-purple-400>/i> Community Leadership /h4> ul classspace-y-3 text-slate-400 text-sm> li classflex items-center>span classw-2 h-2 rounded-full bg-purple-500 mr-3>/span>Mentor: Youth Digital Citizen Challenge 2024/li> li classflex items-center>span classw-2 h-2 rounded-full bg-purple-500 mr-3>/span>Mentor: Shecodes 2023/li> li classflex items-center>span classw-2 h-2 rounded-full bg-purple-500 mr-3>/span>Coordinator: Google Developer Groups VN/li> /ul> /div> /div> /section> /main> footer classpy-12 border-t border-slate-800 bg-slate-900> div classcontainer mx-auto px-6 text-center> div classflex justify-center items-center space-x-8 mb-8> a hrefhttps://www.linkedin.com/in/ngquocvu target_blank classicon-link hover:text-white>i data-lucidelinkedin classw-6 h-6>/i>/a> a hrefhttps://www.youtube.com/@vu.junior target_blank classicon-link hover:text-white>i data-lucideyoutube classw-6 h-6>/i>/a> a hrefmailto:nguyenquocvu.work@gmail.com classicon-link hover:text-white>i data-lucidemail classw-6 h-6>/i>/a> /div> p classtext-slate-500 text-sm>© 2024 Vu Nguyen. Built with span classtext-sky-500>♥/span> and Tailwind CSS./p> /div> /footer> script> lucide.createIcons(); // Mobile Menu Logic const mobileMenuBtn document.getElementById(mobile-menu-btn); const mobileMenu document.getElementById(mobile-menu); mobileMenuBtn.addEventListener(click, () > { mobileMenu.classList.toggle(hidden); }); const mobileNavLinks document.querySelectorAll(#mobile-menu a); mobileNavLinks.forEach(link > { link.addEventListener(click, () > { mobileMenu.classList.add(hidden); }); }); /script> div idchatbot-container classfixed bottom-6 right-6 z-50 flex flex-col items-end font-sans> div idchat-window classhidden mb-4 w-80 md:w-96 bg-slate-900 border border-slate-700 rounded-2xl shadow-2xl overflow-hidden flex flex-col transition-all duration-300 transform origin-bottom-right scale-95 opacity-0> div classbg-slate-800 p-4 border-b border-slate-700 flex justify-between items-center> div classflex items-center gap-2> div classw-2 h-2 rounded-full bg-green-500 animate-pulse>/div> h3 classfont-bold text-white text-sm>Ask about Vu/h3> /div> button idclose-chat classtext-slate-400 hover:text-white transition-colors> svg xmlnshttp://www.w3.org/2000/svg width18 height18 viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2 stroke-linecapround stroke-linejoinround>path dM18 6 6 18/>path dm6 6 12 12/>/svg> /button> /div> div idchat-messages classh-80 overflow-y-auto p-4 space-y-4 bg-slate-900/95 scroll-smooth> div classflex items-start gap-3> div classw-8 h-8 rounded-full bg-sky-500/10 flex items-center justify-center shrink-0 border border-sky-500/20> svg xmlnshttp://www.w3.org/2000/svg width16 height16 viewBox0 0 24 24 fillnone stroke#38BDF8 stroke-width2 stroke-linecapround stroke-linejoinround>path dM12 8V4H8/>rect width16 height12 x4 y8 rx2/>path dM2 14h2/>path dM20 14h2/>path dM15 13v2/>path dM9 13v2/>/svg> /div> div classbg-slate-800 rounded-2xl rounded-tl-none p-3 text-sm text-slate-300 border border-slate-700 shadow-sm> Hi! Im powered by Gemini 1.5 Flash. Ask me anything about Vus experience or projects! /div> /div> /div> div classp-4 bg-slate-800 border-t border-slate-700> form idchat-form classflex gap-2> input typetext idchat-input placeholderType a question... classflex-1 bg-slate-900 border border-slate-700 text-slate-200 text-sm rounded-lg px-3 py-2 focus:outline-none focus:border-sky-500 transition-colors autocompleteoff> button typesubmit classbg-sky-500 hover:bg-sky-400 text-slate-900 rounded-lg p-2 transition-colors disabled:opacity-50 disabled:cursor-not-allowed> svg xmlnshttp://www.w3.org/2000/svg width16 height16 viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2 stroke-linecapround stroke-linejoinround>path dm22 2-7 20-4-9-9-4Z/>path dM22 2 11 13/>/svg> /button> /form> /div> /div> button idchat-toggle classbg-sky-500 hover:bg-sky-400 text-slate-900 rounded-full p-4 shadow-lg shadow-sky-500/20 transition-all duration-300 hover:scale-105 group> svg xmlnshttp://www.w3.org/2000/svg width24 height24 viewBox0 0 24 24 fillnone strokecurrentColor stroke-width2 stroke-linecapround stroke-linejoinround classgroup-hover:scale-110 transition-transform>path dM7.9 20A9 9 0 1 0 4 16.1L2 22Z/>/svg> /button>/div>script typemodule> import { GoogleGenerativeAI } from https://esm.run/@google/generative-ai; // --- CONFIGURATION --- const API_KEY AIzaSyA8aoJa91bSal03eU8rLySBuOyp4bA05Jw; // Define the strict context based on your CV const SYSTEM_INSTRUCTION ` You are an AI assistant for Vu Nguyens portfolio website. You must answer questions ONLY based on the provided information below. If a user asks about general topics (e.g., What is 2+2?, Write me code, Who is the president?), politely refuse and state that you can only answer questions about Vu Nguyen. Keep answers concise, professional, and friendly. --- DATA CONTEXT --- NAME: Vu Nguyen ROLE: Frontend Engineer (expanding to Full-stack) CONTACT: nguyenquocvu.work@gmail.com | (+84) 9678-525-75 | Ho Chi Minh City LINKS: linkedin.com/in/ngquocvu | cv.quocvu.studio | youtube.com/@vu.junior PROFESSIONAL SUMMARY: Frontend Engineer with real-world experience building apps for global clients. Expanding into full-stack (NestJS, Prisma). Passionate about performance, clean code, accessibility, and mentoring. WORK EXPERIENCE: 1. Software Engineer @ EPAM Systems Vietnam (Nov 2021 - Present) - Key role in end-to-end development of responsive, scalable web apps (e-commerce, data-heavy). - Tech Stack: React, TypeScript, Vite, Redux, Material UI, Ant Design, Commercetools. - Focus: Clean code (ESLint, Prettier, Husky), Testing (Vitest), CI/CD, Accessibility (WCAG). - Improved legacy codebases & built modern architectures on AWS. 2. Web Developer @ Multiple Clients (Sep 2020 - Oct 2021) - Deployed websites using React.js, Next.js, WordPress. - Video editing & design (Adobe Premiere, Photoshop, Canva). SKILLS: - Core: HTML, CSS, Javascript, TypeScript. - Frontend: React.js, Angular, Vite, Redux, Material UI, Tailwind. - Backend/AI: NestJS, Prisma, PostgreSQL, Langchain, Gemini API. - DevOps: Git, GitHub, Agile, Jira, AWS (EC2, ECS), CI/CD. EDUCATION: - Bachelor of Engineering in IT, Saigon University (Sep 2017 - Aug 2021). AWARDS: - EPAM Contributor of the Year (2024, 2023). - EPAM Star of the Quarter (Q2/2023). COMMUNITY & SPEAKING: - Speaker: DevFest on Campus 2025 (Topic: Build Gemini Chatbot using Angular). - Speaker: Road to DevFest HCMC 2025. - Facilitator: Gemini Study Jams 2025 (Prompt Engineering). - Ambassador: Lead The Change. - Mentor: Youth Digital Citizen Challenge 2024, Shecodes 2023. PROJECTS: - reviewthe.quocvu.studio: AI community tool (Next.js, Langchain, Gemini, NestJS, Postgres). - ImaginArt: AI Art generator (React). - quynhnha.com: Dental clinic website (WordPress). `; // --- INITIALIZE GEMINI --- const genAI new GoogleGenerativeAI(API_KEY); const model genAI.getGenerativeModel({ model: gemini-2.5-flash, systemInstruction: SYSTEM_INSTRUCTION }); let chatSession model.startChat({ history: , generationConfig: { maxOutputTokens: 200, }, }); // --- UI LOGIC --- const chatWindow document.getElementById(chat-window); const chatToggle document.getElementById(chat-toggle); const closeChat document.getElementById(close-chat); const chatMessages document.getElementById(chat-messages); const chatForm document.getElementById(chat-form); const chatInput document.getElementById(chat-input); const submitBtn chatForm.querySelector(button); // UI: Toggle Window function toggleChat() { if (chatWindow.classList.contains(hidden)) { chatWindow.classList.remove(hidden); setTimeout(() > chatWindow.classList.remove(scale-95, opacity-0), 10); chatInput.focus(); } else { chatWindow.classList.add(scale-95, opacity-0); setTimeout(() > chatWindow.classList.add(hidden), 300); } } chatToggle.addEventListener(click, toggleChat); closeChat.addEventListener(click, toggleChat); // UI: Add Message Bubble function addMessage(text, isUser false) { const div document.createElement(div); div.className `flex items-start gap-3 ${isUser ? flex-row-reverse : }`; // Simple SVG Icons inline to avoid external dependency issues inside the dynamic insert const botIcon `div classw-8 h-8 rounded-full bg-sky-500/10 flex items-center justify-center shrink-0 border border-sky-500/20>svg xmlnshttp://www.w3.org/2000/svg width16 height16 viewBox0 0 24 24 fillnone stroke#38BDF8 stroke-width2 stroke-linecapround stroke-linejoinround>path dM12 8V4H8/>rect width16 height12 x4 y8 rx2/>path dM2 14h2/>path dM20 14h2/>path dM15 13v2/>path dM9 13v2/>/svg>/div>`; const userIcon `div classw-8 h-8 rounded-full bg-slate-700 flex items-center justify-center shrink-0>svg xmlnshttp://www.w3.org/2000/svg width16 height16 viewBox0 0 24 24 fillnone stroke#cbd5e1 stroke-width2 stroke-linecapround stroke-linejoinround>path dM19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2/>circle cx12 cy7 r4/>/svg>/div>`; const bubbleColor isUser ? bg-sky-600 text-white : bg-slate-800 text-slate-300 border border-slate-700; const roundedClass isUser ? rounded-tr-none : rounded-tl-none; div.innerHTML ` ${isUser ? userIcon : botIcon} div class${bubbleColor} rounded-2xl ${roundedClass} p-3 text-sm shadow-sm max-w-80% leading-relaxed> ${text} /div> `; chatMessages.appendChild(div); chatMessages.scrollTop chatMessages.scrollHeight; } // UI: Loading State function showLoading() { const div document.createElement(div); div.id loading-indicator; div.className flex items-start gap-3; div.innerHTML ` div classw-8 h-8 rounded-full bg-sky-500/10 flex items-center justify-center shrink-0 border border-sky-500/20>svg xmlnshttp://www.w3.org/2000/svg width16 height16 viewBox0 0 24 24 fillnone stroke#38BDF8 stroke-width2 stroke-linecapround stroke-linejoinround>path dM12 8V4H8/>rect width16 height12 x4 y8 rx2/>path dM2 14h2/>path dM20 14h2/>path dM15 13v2/>path dM9 13v2/>/svg>/div> div classbg-slate-800 rounded-2xl rounded-tl-none p-3 border border-slate-700 flex items-center gap-1 h-10> span classw-1.5 h-1.5 bg-slate-500 rounded-full animate-bounce>/span> span classw-1.5 h-1.5 bg-slate-500 rounded-full animate-bounce styleanimation-delay: 0.1s>/span> span classw-1.5 h-1.5 bg-slate-500 rounded-full animate-bounce styleanimation-delay: 0.2s>/span> /div> `; chatMessages.appendChild(div); chatMessages.scrollTop chatMessages.scrollHeight; } function removeLoading() { const loading document.getElementById(loading-indicator); if (loading) loading.remove(); } // --- HANDLE SUBMIT --- chatForm.addEventListener(submit, async (e) > { e.preventDefault(); const message chatInput.value.trim(); if (!message) return; // 1. Show User Message addMessage(message, true); chatInput.value ; chatInput.disabled true; submitBtn.disabled true; showLoading(); try { // 2. Send to Gemini using the SDK const result await chatSession.sendMessage(message); const responseText result.response.text(); // 3. Show Bot Response removeLoading(); addMessage(responseText); } catch (error) { console.error(Gemini Error:, error); removeLoading(); addMessage(Sorry, Im having trouble connecting to the server. Please check your API key or try again later.); } finally { chatInput.disabled false; submitBtn.disabled false; chatInput.focus(); } });/script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]