Interactive Guide: Van Don Airport Arrival
https://cdn.tailwindcss.com
https://cdn.jsdelivr.net/npm/chart.js
body {
font-family: ‘Inter’, sans-serif;
background-color: #f8fafc; /* slate-50 */
color: #1e293b; /* slate-800 */
}
.nav-link {
transition: all 0.2s ease-in-out;
cursor: pointer;
}
.nav-link.active, .nav-link:hover {
color: #16a34a; /* green-600 */
border-bottom-color: #16a34a;
}
.section {
display: none;
}
.section.active {
display: block;
}
.step-connector:before {
content: ”;
position: absolute;
top: 50%;
left: -2px;
right: -2px;
height: 2px;
background-color: #cbd5e1; /* slate-300 */
z-index: -1;
}
.chart-container {
position: relative;
width: 100%;
max-width: 600px;
margin-left: auto;
margin-right: auto;
height: 300px;
max-height: 400px;
}
@media (min-width: 768px) {
.chart-container {
height: 350px;
}
}
Prepare for a Smooth Arrival
This section provides an interactive checklist of everything you need to organize before your flight to Vietnam. Completing these steps will ensure your entry is as seamless as possible.
Your Personalized Arrival Process
The arrival procedure at Van Don Airport depends on your visa status. Select your visa type below to view a customized, step-by-step visual guide for navigating the airport from landing to exit.
E-Visa / Visa-Free
Visa on Arrival
Ground Transportation from VDO
Van Don Airport is located about 50-60km from Ha Long City. This section outlines your options for getting to your destination, including an interactive cost comparison to help you choose.
Cost Comparison (USD)
Note: Prices are estimates and can vary.
Airport & Visa Services
Explore premium services designed to make your journey even smoother, from expediting your immigration process to securing your visa with confidence.
Immigration Fast Track Service
Avoid long queues and save significant time with a personalized meet-and-greet service that escorts you through priority lanes.
β±οΈ
Save Time
Bypass general queues at immigration and visa counters.
π€
Personal Escort
Be met upon arrival and guided through every step.
β
Stress-Free
Handles VOA paperwork and payments for you.
Expert Visa Application
Simplify your E-Visa or Visa on Arrival application with a trusted service for a hassle-free, guaranteed process.
π
Simple Forms
Use an intuitive interface, not complex government portals.
β‘
Fast Turnaround
Expedited processing options are available to meet your schedule.
π―
100% Success Rate
Get your visa or your money back, guaranteed.
© 2025 Van Don Airport Guide. Information provided for guidance purposes only.
Always verify official requirements before traveling.
document.addEventListener(‘DOMContentLoaded’, function() {
const checklistData = [
{ text: “Passport valid for 6+ months with 2 blank pages.”, checked: false },
{ text: “Confirm Visa status: Visa-Free, E-Visa, or Visa on Arrival.”, checked: false },
{ text: “Print E-Visa or VOA Approval Letter if applicable.”, checked: false },
{ text: “Have accommodation address & contact info accessible.”, checked: false },
{ text: “Check customs regulations for currency and restricted items.”, checked: false },
{ text: “Prepare cash (USD/VND) for VOA stamping fee if needed.”, checked: false },
{ text: “Acquire a local SIM/eSIM for connectivity.”, checked: false }
];
const arrivalFlows = {
‘visa-free’: [
{ icon: ‘βοΈ’, title: ‘Arrival & Disembark’, description: ‘Follow signs to Immigration.’ },
{ icon: ‘π’, title: ‘Immigration Checkpoint’, description: ‘Present Passport & E-Visa (if any). Get entry stamp.’ },
{ icon: ‘π’, title: ‘Baggage Claim’, description: ‘Collect your checked luggage.’ },
{ icon: ‘π’, title: ‘Customs Check’, description: ‘Proceed through Green or Red lane.’ },
{ icon: ‘π’, title: ‘Exit Airport’, description: ‘Enter the arrivals hall. Welcome to Vietnam!’ }
],
‘voa’: [
{ icon: ‘βοΈ’, title: ‘Arrival & Disembark’, description: ‘Proceed to the Visa on Arrival area first.’ },
{ icon: ‘π’, title: ‘Landing Visa Counter’, description: ‘Submit Approval Letter, Form NA1, photo, and stamping fee.’ },
{ icon: ‘π’, title: ‘Immigration Checkpoint’, description: ‘With visa in passport, get entry stamp.’ },
{ icon: ‘π’, title: ‘Baggage Claim’, description: ‘Collect your checked luggage.’ },
{ icon: ‘π’, title: ‘Customs Check’, description: ‘Proceed through Green or Red lane.’ },
{ icon: ‘π’, title: ‘Exit Airport’, description: ‘Enter the arrivals hall. Welcome to Vietnam!’ }
]
};
const transportData = [
{ name: “Airport Shuttle”, desc: “Most budget-friendly option. Routes 14A & 14B may be free with prior booking. ~1-1.5 hours.”, cost: “~$8 USD” },
{ name: “Taxi”, desc: “Convenient and readily available. Agree on fare or use meter. ~45-60 mins.”, cost: “~$35-50 USD” },
{ name: “Private Car”, desc: “Pre-book for maximum comfort, especially for groups or with lots of luggage. ~45-60 mins.”, cost: “~$40-60 USD” },
{ name: “Ride-Hailing (Grab)”, desc: “Use the app for booking. Availability may vary at the airport.”, cost: “Varies” },
];
function initApp() {
setupNavigation();
populateChecklist();
renderArrivalFlow(‘visa-free’);
setupVisaButtons();
populateTransportOptions();
renderTransportChart();
}
function setupNavigation() {
const navLinks = document.querySelectorAll(‘.nav-link’);
const sections = document.querySelectorAll(‘.section’);
navLinks.forEach(link => {
link.addEventListener(‘click’, () => {
const targetId = link.getAttribute(‘data-target’);
navLinks.forEach(l => l.classList.remove(‘active’));
link.classList.add(‘active’);
sections.forEach(section => {
if (section.id === targetId) {
section.classList.add(‘active’);
} else {
section.classList.remove(‘active’);
}
});
window.scrollTo({ top: 0, behavior: ‘smooth’ });
});
});
}
function populateChecklist() {
const list = document.getElementById(‘checklist’);
list.innerHTML = ”;
checklistData.forEach((item, index) => {
const li = document.createElement(‘li’);
li.className = ‘flex items-center p-4 bg-slate-50 rounded-lg cursor-pointer hover:bg-slate-100 transition-all’;
li.innerHTML = `
✓
${item.text}
`;
li.addEventListener(‘click’, () => toggleChecklistItem(li, index));
list.appendChild(li);
});
}
function toggleChecklistItem(liElement, index) {
checklistData[index].checked = !checklistData[index].checked;
const icon = liElement.querySelector(‘.check-icon’);
const checkmark = icon.querySelector(‘span’);
const text = liElement.querySelector(‘.item-text’);
if (checklistData[index].checked) {
icon.classList.add(‘bg-green-500’, ‘border-green-500’);
checkmark.classList.remove(‘hidden’);
text.classList.add(‘line-through’, ‘text-slate-400’);
} else {
icon.classList.remove(‘bg-green-500’, ‘border-green-500’);
checkmark.classList.add(‘hidden’);
text.classList.remove(‘line-through’, ‘text-slate-400’);
}
}
function setupVisaButtons() {
const btnVisaFree = document.getElementById(‘btn-visa-free’);
const btnVoa = document.getElementById(‘btn-voa’);
btnVisaFree.addEventListener(‘click’, () => {
renderArrivalFlow(‘visa-free’);
btnVisaFree.className = ‘visa-btn bg-green-600 text-white font-semibold py-3 px-6 rounded-lg shadow-md hover:bg-green-700 transition-all transform hover:scale-105’;
btnVoa.className = ‘visa-btn bg-slate-200 text-slate-700 font-semibold py-3 px-6 rounded-lg hover:bg-slate-300 transition-all’;
});
btnVoa.addEventListener(‘click’, () => {
renderArrivalFlow(‘voa’);
btnVoa.className = ‘visa-btn bg-green-600 text-white font-semibold py-3 px-6 rounded-lg shadow-md hover:bg-green-700 transition-all transform hover:scale-105’;
btnVisaFree.className = ‘visa-btn bg-slate-200 text-slate-700 font-semibold py-3 px-6 rounded-lg hover:bg-slate-300 transition-all’;
});
}
function renderArrivalFlow(type) {
const flowContainer = document.getElementById(‘arrival-flow’);
const steps = arrivalFlows[type];
let flowHTML = ‘
‘;
steps.forEach((step, index) => {
flowHTML += `
${step.icon}
${step.title}
${step.description}
${index < steps.length – 1 ? '
‘ : ”}
`;
});
flowHTML += ‘
‘;
flowContainer.innerHTML = flowHTML;
}
function populateTransportOptions() {
const container = document.getElementById(‘transport-options’);
container.innerHTML = ”;
transportData.forEach(option => {
const div = document.createElement(‘div’);
div.className = ‘p-4 border-l-4 border-green-500 bg-green-50 rounded-r-lg’;
div.innerHTML = `
${option.name} ${option.cost}
${option.desc}
`;
container.appendChild(div);
});
}
function renderTransportChart() {
const ctx = document.getElementById(‘transportChart’).getContext(‘2d’);
new Chart(ctx, {
type: ‘bar’,
data: {
labels: [‘Shuttle’, ‘Taxi’, ‘Private Car’],
datasets: [{
label: ‘Estimated Cost (USD)’,
data: [8, 42, 50],
backgroundColor: [
‘rgba(52, 211, 153, 0.6)’, // emerald-400
‘rgba(250, 204, 21, 0.6)’, // yellow-400
‘rgba(59, 130, 246, 0.6)’ // blue-500
],
borderColor: [
‘rgba(5, 150, 105, 1)’, // emerald-600
‘rgba(217, 119, 6, 1)’, // amber-600
‘rgba(37, 99, 235, 1)’ // blue-600
],
borderWidth: 1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: true,
title: {
display: true,
text: ‘Cost in USD ($)’
}
}
},
plugins: {
legend: {
display: false
},
tooltip: {
callbacks: {
label: function(context) {
let label = context.dataset.label || ”;
if (label) {
label += ‘: ‘;
}
if (context.parsed.y !== null) {
label += new Intl.NumberFormat(‘en-US’, { style: ‘currency’, currency: ‘USD’ }).format(context.parsed.y);
}
return label;
}
}
}
}
}
});
}
initApp();
});