Interactive Guide: Arriving at Hai Phong (HPH) Airport
https://cdn.tailwindcss.com
https://cdn.jsdelivr.net/npm/chart.js
Goal: Organize/Filter -> Viz: Interactive Buttons -> Interaction: Click to filter content -> Justification: The most critical user choice, gates all other relevant info.
– Report Info: Arrival steps -> Goal: Organize/Inform -> Viz: HTML/CSS Visual Flow Diagram -> Interaction: Visual progression -> Justification: More intuitive and easier to follow than a text list.
– Report Info: Wait times/Queues -> Goal: Compare/Persuade -> Viz: Chart.js Bar Chart -> Interaction: Chart updates based on user’s visa type -> Justification: Visually quantifies the main benefit (time saved) of the expedited service.
– Report Info: Checklist/Airport Info -> Goal: Inform -> Viz: Collapsible Accordion Sections -> Interaction: Click to expand/collapse -> Justification: Hides detailed information until needed, keeping the main interface clean.
– Report Info: Trust points -> Goal: Inform/Build Trust -> Viz: Iconography with text -> Interaction: Static display -> Justification: Quickly conveys reliability and professionalism.
– Library/Method: Vanilla JS for interactions, Chart.js for data visualization on Canvas. –>
body {
font-family: ‘Inter’, sans-serif;
background-color: #f8f7f4;
color: #4a4a4a;
}
.section-card {
background-color: #ffffff;
border-radius: 0.75rem;
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
transition: all 0.3s ease-in-out;
}
.btn-primary {
background-color: #3b82f6; /* Blue 500 */
color: white;
transition: background-color 0.3s;
}
.btn-primary:hover {
background-color: #2563eb; /* Blue 600 */
}
.btn-secondary {
background-color: #e5e7eb; /* Gray 200 */
color: #374151; /* Gray 700 */
transition: background-color 0.3s;
}
.btn-secondary:hover {
background-color: #d1d5db; /* Gray 300 */
}
.btn-selected {
background-color: #166534; /* Green 800 */
color: white;
box-shadow: 0 0 0 2px #f8f7f4, 0 0 0 4px #166534;
}
.step-connector {
flex-grow: 1;
height: 2px;
background-color: #d1d5db; /* Gray 300 */
}
.step-icon {
width: 50px;
height: 50px;
border: 2px solid #d1d5db;
}
.accordion-content {
max-height: 0;
overflow: hidden;
transition: max-height 0.5s ease-in-out;
}
.chart-container {
position: relative;
width: 100%;
max-width: 600px;
margin-left: auto;
margin-right: auto;
height: 300px;
max-height: 400px;
}
Arriving at Hai Phong (HPH) Airport
Your interactive guide to a smooth and efficient entry into Vietnam.
Start Here: What is Your Visa Status?
Select your visa type to see your personalized arrival process.
E-Visa or Visa-Free
Visa-on-Arrival (VOA)
Skip the Queues?
Our Expedited Entry Service helps you bypass long lines for a faster, stress-free arrival.
Estimated average wait times during peak hours.
Pre-Arrival Checklist
Passport Validity: Must be valid for at least 6 months after your entry date.
Visa Status: Confirm if you need an E-Visa, Visa-on-Arrival (with pre-approval letter), or qualify for Visa Exemption.
Document Copies: Keep digital and physical copies of your passport, visa, and flight itinerary separate from the originals.
VOA Approval Letter: You MUST have this printed before you board your flight.
NA1 Form: Have it completed with a 4x6cm photo attached.
Stamping Fee: Carry exact cash in USD or VND ($25 for single-entry, $50 for multi-entry). There is NO ATM at the VOA counter.
Currency: Declare cash amounts over $5,000 USD or 15,000,000 VND.
Duty-Free: Be aware of limits for alcohol, tobacco, and other goods.
Medications: Keep prescription medicine in original packaging with a doctor’s note if possible.
Travel Insurance: Ensure you have a comprehensive policy.
About Cat Bi Airport (HPH)
π
Location
8km from Hai Phong city center. A quick and easy transfer.
βοΈ
Facilities
Single terminal for domestic & international flights. Currency exchange, SIM cards, and WiFi are available.
π
Transport
Taxis, ride-hailing (Grab), and local buses are readily available outside the arrivals hall.
Why Trust Our Expedited Service?
We are committed to providing a reliable and secure service.
β³
15+ Years of Experience
Our domain has been active since 2008, a testament to our expertise and reliability.
π‘οΈ
100% Money-Back Guarantee
We stand by our service quality. Refer to our public refund policy for details.
π
Trusted by Travelers
See what our customers are saying on independent review platforms like SiteJabber .
Information provided by VietnamImmigration.org
document.addEventListener(‘DOMContentLoaded’, () => {
const btnEvisa = document.getElementById(‘btn-evisa’);
const btnVoa = document.getElementById(‘btn-voa’);
const contentArea = document.getElementById(‘content-area’);
const evisaFlowContainer = document.getElementById(‘evisa-flow’);
const voaFlowContainer = document.getElementById(‘voa-flow’);
const processTitle = document.getElementById(‘process-title’);
let waitTimeChart = null;
const flowData = {
evisa: [
{ icon: ‘βοΈ’, title: ‘Disembark Aircraft’, description: ‘Follow signs to the Arrivals Hall.’ },
{ icon: ‘π’, title: ‘Immigration Checkpoint’, description: ‘Present your passport and printed E-Visa. Wait in the standard queue.’ },
{ icon: ‘π’, title: ‘Baggage Claim’, description: ‘Collect your luggage from the assigned carousel.’ },
{ icon: ‘β
’, title: ‘Customs Check’, description: ‘Proceed through the Green (nothing to declare) or Red Channel.’ },
{ icon: ‘π’, title: ‘Exit & Enjoy Vietnam’, description: ‘You have officially entered Vietnam.’ }
],
voa: [
{ icon: ‘βοΈ’, title: ‘Disembark Aircraft’, description: ‘Follow signs to the Arrivals Hall.’ },
{ icon: ‘π’, title: ‘Landing Visa Counter’, description: ‘Your FIRST stop. Submit passport, VOA letter, NA1 form, photo & cash fee. Wait for your name to be called.’ },
{ icon: ‘π’, title: ‘Immigration Checkpoint’, description: ‘With your new visa sticker, proceed to the standard immigration queue for the entry stamp.’ },
{ icon: ‘π’, title: ‘Baggage Claim’, description: ‘Collect your luggage from the assigned carousel.’ },
{ icon: ‘β
’, title: ‘Customs Check’, description: ‘Proceed through the Green or Red Channel.’ },
{ icon: ‘π’, title: ‘Exit & Enjoy Vietnam’, description: ‘You have officially entered Vietnam.’ }
]
};
const chartData = {
evisa: {
labels: [‘Immigration Queue’],
datasets: [{
label: ‘Standard Wait’,
data: [45],
backgroundColor: ‘rgba(239, 68, 68, 0.6)’, // Red
borderColor: ‘rgba(239, 68, 68, 1)’,
borderWidth: 1
}, {
label: ‘Expedited Service’,
data: [5],
backgroundColor: ‘rgba(34, 197, 94, 0.6)’, // Green
borderColor: ‘rgba(34, 197, 94, 1)’,
borderWidth: 1
}]
},
voa: {
labels: [‘Visa Counter’, ‘Immigration Queue’],
datasets: [{
label: ‘Standard Wait’,
data: [60, 45],
backgroundColor: ‘rgba(239, 68, 68, 0.6)’,
borderColor: ‘rgba(239, 68, 68, 1)’,
borderWidth: 1
}, {
label: ‘Expedited Service’,
data: [5, 5],
backgroundColor: ‘rgba(34, 197, 94, 0.6)’,
borderColor: ‘rgba(34, 197, 94, 1)’,
borderWidth: 1
}]
}
};
const createFlowDiagram = (steps) => {
let html = ”;
steps.forEach((step, index) => {
html += `
${step.icon}
${index + 1}. ${step.title}
${step.description}
`;
if (index < steps.length – 1) {
html += `
`;
}
});
return html;
};
const updateChart = (type) => {
const ctx = document.getElementById(‘waitTimeChart’).getContext(‘2d’);
const data = chartData[type];
if(waitTimeChart) {
waitTimeChart.destroy();
}
waitTimeChart = new Chart(ctx, {
type: ‘bar’,
data: data,
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: true,
title: {
display: true,
text: ‘Estimated Wait Time (Minutes)’
}
}
},
plugins: {
legend: {
position: ‘top’,
},
title: {
display: true,
text: ‘Standard vs. Expedited Arrival’
},
tooltip: {
callbacks: {
label: function(context) {
let label = context.dataset.label || ”;
if (label) {
label += ‘: ‘;
}
if (context.parsed.y !== null) {
label += context.parsed.y + ‘ minutes’;
}
return label;
}
}
}
}
}
});
};
btnEvisa.addEventListener(‘click’, () => {
btnEvisa.classList.add(‘btn-selected’);
btnEvisa.classList.remove(‘btn-secondary’);
btnVoa.classList.remove(‘btn-selected’);
btnVoa.classList.add(‘btn-secondary’);
contentArea.classList.remove(‘hidden’);
voaFlowContainer.classList.add(‘hidden’);
evisaFlowContainer.classList.remove(‘hidden’);
evisaFlowContainer.innerHTML = createFlowDiagram(flowData.evisa);
processTitle.textContent = ‘Your E-Visa / Visa-Free Arrival Steps’;
updateChart(‘evisa’);
});
btnVoa.addEventListener(‘click’, () => {
btnVoa.classList.add(‘btn-selected’);
btnVoa.classList.remove(‘btn-secondary’);
btnEvisa.classList.remove(‘btn-selected’);
btnEvisa.classList.add(‘btn-secondary’);
contentArea.classList.remove(‘hidden’);
evisaFlowContainer.classList.add(‘hidden’);
voaFlowContainer.classList.remove(‘hidden’);
voaFlowContainer.innerHTML = createFlowDiagram(flowData.voa);
processTitle.textContent = ‘Your Visa-on-Arrival (VOA) Steps’;
updateChart(‘voa’);
});
document.querySelectorAll(‘.accordion-header’).forEach(button => {
button.addEventListener(‘click’, () => {
const accordionContent = button.nextElementSibling;
const accordionIcon = button.querySelector(‘.accordion-icon’);
button.classList.toggle(‘active’);
if (button.classList.contains(‘active’)) {
accordionContent.style.maxHeight = accordionContent.scrollHeight + ‘px’;
accordionIcon.textContent = ‘-‘;
} else {
accordionContent.style.maxHeight = ‘0’;
accordionIcon.textContent = ‘+’;
}
});
});
});