Cat Bi Airport (HPH) Interactive Arrival Guide
https://cdn.tailwindcss.com
https://cdn.jsdelivr.net/npm/chart.js
Goal: Compare, Inform. -> Viz/Presentation: Interactive Flowchart. -> Interaction: User clicks a button for their visa type; JS dynamically renders the corresponding visual steps, highlighting queue-prone steps with a different color. -> Justification: Personalizes information and visually communicates the complexity and “pain points” more effectively than text. -> Library/Method: HTML/CSS/JS with Unicode icons.
– Report Info: Time saved (1-2 hours vs. 10-15 mins). -> Goal: Compare, Persuade. -> Viz/Presentation: Bar Chart. -> Interaction: Static chart for clarity. -> Justification: Quantifies the core benefit in a highly scannable and impactful format. -> Library/Method: Chart.js on Canvas.
– Report Info: Pre-arrival requirements (passport, visa, cash). -> Goal: Organize, Inform. -> Viz/Presentation: Interactive Cards. -> Interaction: Subtle hover effects. -> Justification: Breaks down a list into visually distinct, digestible chunks for better usability. -> Library/Method: HTML/Tailwind CSS.
– Report Info: Trust factors (experience, guarantees, reviews). -> Goal: Build Credibility. -> Viz/Presentation: Icon-based list within a card. -> Interaction: Links to external proof. -> Justification: Presents credentials in a professional, trustworthy, and easily scannable format next to the booking steps, with added transparency via links. -> Library/Method: HTML/Tailwind CSS. –>
body {
font-family: ‘Inter’, sans-serif;
background-color: #F8F7F4;
color: #3D405B;
}
.bg-primary { background-color: #3D405B; }
.text-primary { color: #3D405B; }
.bg-secondary { background-color: #81B29A; }
.text-secondary { color: #81B29A; }
.bg-accent { background-color: #E07A5F; }
.text-accent { color: #E07A5F; }
.bg-light { background-color: #F8F7F4; }
.text-light { color: #F8F7F4; }
.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: transform 0.3s ease, box-shadow 0.3s ease;
}
.card:hover {
transform: translateY(-4px);
box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -2px rgb(0 0 0 / 0.1);
}
.btn-primary {
background-color: #3D405B;
color: #ffffff;
transition: background-color 0.3s ease;
}
.btn-primary:hover { background-color: #2c2f44; }
.btn-secondary {
background-color: #81B29A;
color: #ffffff;
transition: background-color 0.3s ease;
}
.btn-secondary:hover { background-color: #6a947e; }
.step-path::after {
content: ”;
position: absolute;
top: 50%;
right: -2.5rem;
transform: translateY(-50%);
width: 2rem;
height: 2px;
background-color: #D1D5DB;
}
.step-path:last-child::after {
display: none;
}
.step-path.danger-step .step-icon{
background-color: #FCA5A5;
color: #991B1B;
}
.step-path.danger-step::after {
background-color: #FCA5A5;
}
.chart-container {
position: relative;
width: 100%;
max-width: 600px;
margin-left: auto;
margin-right: auto;
height: 300px;
max-height: 400px;
}
@media (min-width: 640px) {
.chart-container {
height: 350px;
}
}
Land in Vietnam, Not in a Queue.
Welcome to Cat Bi Airport (HPH). Your adventure in Hai Phong & Ha Long Bay is moments away. Bypass the long immigration lines and start your trip the moment you land with our VIP Fast Track Service.
Your Pre-Flight Checklist
A smooth arrival starts before you fly. Ensure you have these essentials ready to avoid any stress or delays at Cat Bi Airport.
π
Passport Validity
Must be valid for 6+ months from entry. Check for at least two blank pages.
π
Visa Documents
Have your printed E-Visa or Visa on Arrival (VOA) pre-approval letter ready.
π¨
Accommodation Info
Keep the address and phone number of your first hotel handy for the arrival form.
π΅
Cash for VOA Fee
VOA holders: Bring US$25 (single) or US$50 (multi) in cash. No ATMs in visa area!
π
Customs Awareness
Declare cash over $5,000 USD. Be aware of duty-free limits and prohibited items.
β
Expert Visa Help
Avoid errors and delays. Use a trusted service for a guaranteed, stress-free visa application.
Apply Securely β
Visualize Your Arrival at HPH
The arrival process differs based on your visa type. Select yours below to see your specific journey and identify potential delays.
E-Visa / Visa-Free
Visa on Arrival (VOA)
Indicates a step with high potential for long queues.
The Time You Could Save
This is what the wait looks like for a typical international arrival. See the difference our Fast Track service makes.
Your VIP Welcome: The Fast Track Service
This is how we transform your arrival experience from a stressful ordeal into a seamless, premium welcome to Vietnam.
π
Personal Meet & Greet
Our agent greets you at the arrival gate holding a sign with your name. No confusion, no searching.
π
Priority Lane Escort
We escort you to an exclusive priority lane, letting you bypass the main immigration queue entirely.
β¨
VOA Handled For You
For VOA holders, we handle all paperwork and payments at the counter while you relax.
π§³
Baggage Assistance
After the swift immigration clearance, we guide you to baggage claim and assist as needed.
βοΈ
Problem Solving
Missing a photo or cash for the VOA fee? Our team can help resolve these issues on the spot.
Reduced from a potential 1-2 hour wait.
Ready for a Seamless Arrival?
Booking is simple, and our service is backed by years of experience and guarantees you can trust.
How to Book in 3 Simple Steps
1
Fill Out The Form
Provide your flight details and passport information on our secure online form.
2
Complete Payment
Pay for the service securely via PayPal or other available methods.
3
Receive Confirmation
Get an email with all the details and instructions for meeting our agent.
Why Trust VietnamImmigration.org?
© 2025 HPH Arrival Guide. All rights reserved.
This interactive guide is provided by VietnamImmigration.org to help travelers prepare for their arrival at Cat Bi International Airport.
document.addEventListener(‘DOMContentLoaded’, function () {
const mobileMenuButton = document.getElementById(‘mobile-menu-button’);
const mobileMenu = document.getElementById(‘mobile-menu’);
mobileMenuButton.addEventListener(‘click’, () => {
mobileMenu.classList.toggle(‘hidden’);
});
const flowchartContainer = document.getElementById(‘process-flowchart’).querySelector(‘div’);
const showEvisaBtn = document.getElementById(‘show-evisa’);
const showVoaBtn = document.getElementById(‘show-voa’);
const evisaSteps = [
{ name: ‘Deplane’, icon: ‘βοΈ’, danger: false },
{ name: ‘Immigration Checkpoint’, icon: ‘π’, danger: true },
{ name: ‘Baggage Claim’, icon: ‘π§³’, danger: false },
{ name: ‘Customs’, icon: ‘β
’, danger: false },
{ name: ‘Exit Airport’, icon: ‘π’, danger: false }
];
const voaSteps = [
{ name: ‘Deplane’, icon: ‘βοΈ’, danger: false },
{ name: ‘Landing Visa Counter’, icon: ‘π’, danger: true },
{ name: ‘Immigration Checkpoint’, icon: ‘π’, danger: true },
{ name: ‘Baggage Claim’, icon: ‘π§³’, danger: false },
{ name: ‘Customs’, icon: ‘β
’, danger: false },
{ name: ‘Exit Airport’, icon: ‘π’, danger: false }
];
function createStepHTML(step) {
return `
${step.icon}
${step.name}
`;
}
function renderFlowchart(steps) {
flowchartContainer.innerHTML = steps.map(createStepHTML).join(”);
}
showEvisaBtn.addEventListener(‘click’, () => {
renderFlowchart(evisaSteps);
showEvisaBtn.classList.replace(‘bg-gray-200’, ‘btn-primary’);
showEvisaBtn.classList.replace(‘text-primary’, ‘text-white’);
showVoaBtn.classList.replace(‘btn-primary’, ‘bg-gray-200’);
showVoaBtn.classList.replace(‘text-white’, ‘text-primary’);
});
showVoaBtn.addEventListener(‘click’, () => {
renderFlowchart(voaSteps);
showVoaBtn.classList.replace(‘bg-gray-200’, ‘btn-primary’);
showVoaBtn.classList.replace(‘text-primary’, ‘text-white’);
showEvisaBtn.classList.replace(‘btn-primary’, ‘bg-gray-200’);
showEvisaBtn.classList.replace(‘text-white’, ‘text-primary’);
});
// Initial render
renderFlowchart(evisaSteps);
// Chart.js implementation
const ctx = document.getElementById(‘waitTimeChart’).getContext(‘2d’);
const waitTimeChart = new Chart(ctx, {
type: ‘bar’,
data: {
labels: [‘Visa Counter’, ‘Immigration’, ‘Baggage & Customs’],
datasets: [{
label: ‘Standard Wait Time (minutes)’,
data: [45, 60, 20],
backgroundColor: ‘#FCA5A5’,
borderColor: ‘#991B1B’,
borderWidth: 1
}, {
label: ‘Fast Track Time (minutes)’,
data: [5, 5, 10],
backgroundColor: ‘#A7F3D0’,
borderColor: ‘#065F46’,
borderWidth: 1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: true,
title: {
display: true,
text: ‘Time in Minutes’
}
}
},
plugins: {
tooltip: {
callbacks: {
label: function(context) {
let label = context.dataset.label || ”;
if (label) {
label += ‘: ‘;
}
if (context.parsed.y !== null) {
label += context.parsed.y + ‘ min’;
}
return label;
}
}
},
legend: {
position: ‘top’,
},
title: {
display: true,
text: ‘Estimated Arrival Process Time Comparison’
}
}
}
});
});