diff --git a/app/about/about.json b/app/about/about.json index 73963bd..dcdfd59 100644 --- a/app/about/about.json +++ b/app/about/about.json @@ -1,33 +1,97 @@ { - "title": "Về Chúng Tôi", - "subtitle": "Đối tác tin cậy cho dịch vụ visa và du lịch", - "description": "Chúng tôi là công ty hàng đầu trong lĩnh vực tư vấn visa và dịch vụ du lịch, với hơn 10 năm kinh nghiệm phục vụ khách hàng.", - "sections": [ - { - "heading": "Sứ Mệnh", - "content": "Mang đến cho khách hàng những trải nghiệm du lịch tuyệt vời và hỗ trợ thủ tục visa một cách nhanh chóng, chính xác." - }, - { - "heading": "Tầm Nhìn", - "content": "Trở thành công ty dẫn đầu trong lĩnh vực dịch vụ visa và du lịch tại Việt Nam." - }, - { - "heading": "Giá Trị Cốt Lõi", - "content": "Uy tín - Chất lượng - Tận tâm - Chuyên nghiệp" - } - ], + "hero": { + "title": "About Us", + "subtitle": "Global Education Simplified", + "breadcrumb": [ + "Home", + "About Us" + ], + "backgroundImage": "/assets/img/inner-page/breadcrumb.jpg" + }, + "intro": { + "heading": "Building Pathways to Your Immigration Success", + "description": "We provide expert guidance, personalized solutions, and transparent processes to help you achieve your immigration goals. Our dedicated team ensures a smooth journey, building pathways to your international success.", + "highlights": [ + "Expert Visa Consulting", + "Smooth Documentation Process", + "Personalized Student Guidance" + ], + "image": "/assets/img/inner-page/intro.jpg" + }, + "mission": { + "title": "Our Commitment to Your Future", + "items": [ + { + "label": "Mission", + "description": "To guide students with expert visa consulting, ensuring a smooth process from application to approval and turning dreams into reality." + }, + { + "label": "Vision", + "description": "To be the most trusted global education consultancy, expanding opportunities and building paths to international success for every student." + }, + { + "label": "Values", + "description": "Transparency, integrity, and excellence in every visa application, ensuring reliable assistance and professional support." + } + ] + }, "stats": [ { - "number": "10000+", - "label": "Khách hàng hài lòng" + "label": "Years Experience", + "value": 10 }, { - "number": "50+", - "label": "Quốc gia hỗ trợ visa" + "label": "Students Helped", + "value": 1000 }, { - "number": "99%", - "label": "Tỷ lệ thành công" + "label": "Success Rate", + "value": "95%" + }, + { + "label": "Countries Covered", + "value": 50 } - ] + ], + "team": { + "title": "Meet Our Expert Team", + "members": [ + { + "name": "Eleanor Pena", + "role": "Lead Legal Consultant", + "image": "/assets/img/home-1/testimonial/client.png", + "social": { + "facebook": "href", + "linkedin": "href" + } + }, + { + "name": "Jerome Bell", + "role": "Senior Visa Expert", + "image": "/assets/img/home-1/testimonial/client-2.png", + "social": { + "facebook": "href", + "linkedin": "href" + } + }, + { + "name": "Marvin McKinney", + "role": "Immigration Advisor", + "image": "/assets/img/home-1/news/client.png", + "social": { + "facebook": "href", + "linkedin": "href" + } + }, + { + "name": "Kathryn Murphy", + "role": "Education Consultant", + "image": "/assets/img/home-1/testimonial/client.png", + "social": { + "facebook": "href", + "linkedin": "href" + } + } + ] + } } diff --git a/app/about/page.tsx b/app/about/page.tsx index 46f771d..c909cf5 100644 --- a/app/about/page.tsx +++ b/app/about/page.tsx @@ -1,49 +1,24 @@ -import aboutData from "./about.json"; +import { + AboutHero, + AboutIntro, + AboutMission, + AboutStats, + AboutTeam, + AboutFeatures, + AboutNews +} from '../components/about'; +import aboutData from './about.json'; export default function AboutPage() { - return ( -
-
- {/* Header */} -
-

- {aboutData.title} -

-

{aboutData.subtitle}

-

- {aboutData.description} -

-
- - {/* Sections */} -
- {aboutData.sections.map((section, index) => ( -
-

- {section.heading} -

-

{section.content}

-
- ))} -
- - {/* Stats */} -
-

- Thành Tích Của Chúng Tôi -

-
- {aboutData.stats.map((stat, index) => ( -
-
- {stat.number} -
-
{stat.label}
-
- ))} -
-
-
-
- ); + return ( + <> + + + + + + + + + ); } diff --git a/app/about/types.ts b/app/about/types.ts new file mode 100644 index 0000000..f8049fc --- /dev/null +++ b/app/about/types.ts @@ -0,0 +1,37 @@ +export interface AboutData { + hero: { + title: string; + subtitle: string; + breadcrumb: string[]; + backgroundImage: string; + }; + intro: { + heading: string; + description: string; + highlights: string[]; + image: string; + }; + mission: { + title: string; + items: { + label: string; + description: string; + }[]; + }; + stats: { + label: string; + value: number | string; + }[]; + team: { + title: string; + members: { + name: string; + role: string; + image: string; + social: { + facebook: string; + linkedin: string; + }; + }[]; + }; +} diff --git a/app/blog/[slug]/components/NewsDetailsContent.tsx b/app/blog/[slug]/components/NewsDetailsContent.tsx new file mode 100644 index 0000000..569f7c8 --- /dev/null +++ b/app/blog/[slug]/components/NewsDetailsContent.tsx @@ -0,0 +1,226 @@ +import Link from "next/link"; + +export default function NewsDetailsContent() { + return ( +
+
+
+ img +
+
+
    +
  • + + By Admin +
  • +
  • + + 11 March 2025 +
  • +
  • + + 0 Comments +
  • +
+

Work Visa vs. Student Visa Which is Right for You?

+

+ Choosing between a work visa and a student visa depends on your career and academic goals. A + student visa allows you to pursue higher education abroad, gain international exposure, and + sometimes work part-time while studying. On the other hand, a work visa is for professionals + seeking employment opportunities and long-term career growth in another country. +

+

+ Both options have unique benefits, eligibility requirements, and future pathways. Understanding + your personal ambitions, financial plans, and long-term vision will help you decide which visa + option best suits your journey. +

+

Work Visa vs. Student Visa: Which is Right for You?

+

+ Choosing between a student visa and a work visa is a major decision that shapes your future + abroad. Both visa types open unique opportunities, but the right choice depends on your goals, + priorities, and resources. A student visa is designed for individuals who wish to pursue higher + education in a foreign country. +

+
+
+
+ img +
+
+
+
+ img +
+
+
+
+
+ This blog really helped me understand the difference between student and work visas. The + explanations were clear and practical. +
+
+

+ It provides access to world-class universities, cultural exposure, and global networking + opportunities. With a student visa, you may also get part-time work rights, which can help support + your expenses and give you valuable international work experience. However, the primary focus + remains on academics and personal growth. On the other hand, a work visa is perfect for those who + want to establish themselves in a career overseas. +

+

+ It provides immediate access to job markets, stable income, and often a pathway to permanent + residency. Work visas are suitable for skilled professionals who are ready to contribute to the + global workforce and achieve long-term career goals. Ultimately, the choice comes down to your + personal aspirations. If education and exploration are your priorities, a student visa is ideal. If + career advancement and stability are your goals, a work visa is the right fit. +

+
+
+
+ Tags: + WorkVisa + FamilyVisa + StudentVisa +
+
+ +
+
+
+

02 Comments

+
+
+
+ image +
+
+
+
+ February 10, 2024 +

Frank Flores

+
+ + Reply + +
+

+ Neque porro est qui dolorem ipsum quia quaed inventor veritatis et quasi architecto var sed + efficitur turpis gilla sed sit amet finibus eros. Lorem Ipsum is simply dummy +

+
+
+
+
+ image +
+
+
+
+

Charlie Tushar

+ February 10, 2024 +
+ + Reply + +
+

+ Neque porro est qui dolorem ipsum quia quaed inventor veritatis et quasi architecto var sed + efficitur turpis gilla sed sit amet finibus eros. Lorem Ipsum is simply dummy +

+
+
+
+
+ image +
+
+
+
+ February 10, 2024 +

Fatma Sariqul

+
+ + Reply + +
+

+ Neque porro est qui dolorem ipsum quia quaed inventor veritatis et quasi architecto var sed + efficitur turpis gilla sed sit amet finibus eros. Lorem Ipsum is simply dummy +

+
+
+
+

Leave A Comment

+
+
+
+
+ Your Name + +
+
+
+
+ Your Email + +
+
+
+
+ Your Phone + +
+
+
+
+ Your Address + +
+
+
+
+ Your Date + +
+
+
+
+ +
+
+
+ +
+
+
+
+
+
+ ); +} diff --git a/app/blog/[slug]/components/NewsDetailsSection.tsx b/app/blog/[slug]/components/NewsDetailsSection.tsx new file mode 100644 index 0000000..8f088f7 --- /dev/null +++ b/app/blog/[slug]/components/NewsDetailsSection.tsx @@ -0,0 +1,17 @@ +import NewsDetailsContent from "./NewsDetailsContent"; +import Sidebar from "@/app/blog/components/Sidebar"; + +export default function NewsDetailsSection() { + return ( +
+
+
+
+ + +
+
+
+
+ ); +} diff --git a/app/blog/[slug]/page.tsx b/app/blog/[slug]/page.tsx new file mode 100644 index 0000000..eec7592 --- /dev/null +++ b/app/blog/[slug]/page.tsx @@ -0,0 +1,17 @@ +import Breadcrumb from "@/app/components/Breadcrumb"; +import NewsDetailsSection from "./components/NewsDetailsSection"; + +interface BlogDetailsPageProps { + params: { + slug: string; + }; +} + +export default function BlogDetailsPage(_props: BlogDetailsPageProps) { + return ( + <> + + + + ); +} diff --git a/app/blog/components/Breadcrumb.tsx b/app/blog/components/Breadcrumb.tsx deleted file mode 100644 index 2be740c..0000000 --- a/app/blog/components/Breadcrumb.tsx +++ /dev/null @@ -1,23 +0,0 @@ -export default function Breadcrumb() { - return ( -
-
- img -
-
-
-

Blog Stardard

-
    -
  • - Home -
  • -
  • - -
  • -
  • Blog Stardard
  • -
-
-
-
- ); -} \ No newline at end of file diff --git a/app/blog/components/NewsList.tsx b/app/blog/components/NewsList.tsx index fe2c610..cb1736c 100644 --- a/app/blog/components/NewsList.tsx +++ b/app/blog/components/NewsList.tsx @@ -1,3 +1,5 @@ +import Link from "next/link"; + export default function NewsList() { return (
@@ -19,14 +21,14 @@ export default function NewsList() {

- How to Avoid Common Mistakes in Visa Applications + How to Avoid Common Mistakes in Visa Applications

A business consultant provides expert guidance, strategic planning, and problem-solving support—helping startups avoid mistakes, grow faster, and operate more efficiently from day one.

- + VIEW MORE - +
{/* News Post 2 */} @@ -47,14 +49,14 @@ export default function NewsList() {

- The Role of Immigration Consultants in Your Journey + The Role of Immigration Consultants in Your Journey

Immigration consultants play a vital role in guiding applicants, simplifying complex processes, offering expert advice, and ensuring successful outcomes for study, work, or permanent residency abroad.

- + VIEW MORE - + {/* News Post 3 */} @@ -75,14 +77,14 @@ export default function NewsList() {

- Latest Immigration Policy Updates You Should Know + Latest Immigration Policy Updates You Should Know

Stay informed with the latest immigration policy updates, ensuring you understand new rules, visa requirements, and opportunities that impact your study, work, or migration journey abroad.

- + VIEW MORE - + diff --git a/app/blog/components/Sidebar.tsx b/app/blog/components/Sidebar.tsx index 19e2c73..2842f4c 100644 --- a/app/blog/components/Sidebar.tsx +++ b/app/blog/components/Sidebar.tsx @@ -1,3 +1,5 @@ +import Link from "next/link"; + export default function Sidebar() { return (
@@ -16,15 +18,15 @@ export default function Sidebar() { {/* Categories */}
-

Cetegories

+

Categories

@@ -40,7 +42,7 @@ export default function Sidebar() {
- Top Countries for Higher Education in 2025 + Top Countries for Higher Education in 2025
  • March 26, 2025
  • @@ -53,7 +55,7 @@ export default function Sidebar() {
- The Benefits of Hiring a Visa Consultant + The Benefits of Hiring a Visa Consultant
  • March 26, 2025
  • @@ -66,7 +68,7 @@ export default function Sidebar() {
- How to Prepare for Your Immigration Interview + How to Prepare for Your Immigration Interview
  • March 26, 2025
  • @@ -82,12 +84,12 @@ export default function Sidebar() {
- WorkVisa - FamilyVisa - StudentVisa - VisaUpdates - TravelVisa - StudyAbroad + WorkVisa + FamilyVisa + StudentVisa + VisaUpdates + TravelVisa + StudyAbroad
diff --git a/app/blog/page.tsx b/app/blog/page.tsx index 90f5250..50883a4 100644 --- a/app/blog/page.tsx +++ b/app/blog/page.tsx @@ -1,10 +1,10 @@ -import Breadcrumb from "./components/Breadcrumb"; +import Breadcrumb from "@/app/components/Breadcrumb"; import NewsSection from "./components/NewsSection"; export default function NewsPage() { return ( <> - + ); diff --git a/app/components/BackToTop.tsx b/app/components/BackToTop.tsx new file mode 100644 index 0000000..bc2ce0d --- /dev/null +++ b/app/components/BackToTop.tsx @@ -0,0 +1,7 @@ +export default function BackToTop() { + return ( + + ); +} diff --git a/app/components/Breadcrumb.tsx b/app/components/Breadcrumb.tsx index ead1dcf..79c902b 100644 --- a/app/components/Breadcrumb.tsx +++ b/app/components/Breadcrumb.tsx @@ -1,31 +1,31 @@ interface BreadcrumbProps { - title: string; - current: string; + title: string; + current: string; } export default function Breadcrumb({ title, current }: BreadcrumbProps) { - return ( -
-
- img -
-
-
-

{title}

-
    -
  • - Home -
  • -
  • - -
  • -
  • {current}
  • -
-
-
-
- ); + return ( +
+
+ img +
+
+
+

{title}

+
    +
  • + Home +
  • +
  • + +
  • +
  • {current}
  • +
+
+
+
+ ); } diff --git a/app/components/Footer.tsx b/app/components/Footer.tsx deleted file mode 100644 index dc1fb12..0000000 --- a/app/components/Footer.tsx +++ /dev/null @@ -1,191 +0,0 @@ -import Link from "next/link"; - -export default function Footer() { - const currentYear = new Date().getFullYear(); - - const quickLinks = [ - { name: "Về chúng tôi", href: "/about" }, - { name: "Dịch vụ", href: "/services" }, - { name: "Bảng giá", href: "/pricing" }, - { name: "Blog", href: "/blog" }, - { name: "Liên hệ", href: "/contact" }, - ]; - - const visaServices = [ - { name: "Visa Mỹ", href: "/visa" }, - { name: "Visa Schengen", href: "/visa" }, - { name: "Visa Nhật Bản", href: "/visa" }, - { name: "Visa Hàn Quốc", href: "/visa" }, - { name: "Visa Canada", href: "/visa" }, - ]; - - const countries = [ - { name: "Châu Âu", href: "/countries" }, - { name: "Bắc Mỹ", href: "/countries" }, - { name: "Châu Á", href: "/countries" }, - { name: "Châu Đại Dương", href: "/countries" }, - ]; - - return ( -
-
-
- {/* Company Info */} -
-
-
- V -
-
-
VisaService
-
Dịch vụ visa uy tín
-
-
-

- Đối tác tin cậy cho dịch vụ visa và du lịch với hơn 10 năm kinh - nghiệm. Cam kết mang đến dịch vụ chất lượng cao với tỷ lệ thành - công 99%. -

- -
- - {/* Quick Links */} -
-

Liên Kết Nhanh

-
    - {quickLinks.map((link) => ( -
  • - - {link.name} - -
  • - ))} -
-
- - {/* Visa Services */} -
-

Dịch Vụ Visa

-
    - {visaServices.map((service) => ( -
  • - - {service.name} - -
  • - ))} -
-
- - {/* Contact Info */} -
-

Thông Tin Liên Hệ

-
-
- 📍 -
-

- 123 Nguyễn Huệ, Quận 1
- TP. Hồ Chí Minh -

-
-
-
- 📞 -

+84 28 1234 5678

-
-
- ✉️ -

info@visaservice.com

-
-
- 🕒 -
-

- Thứ 2 - Thứ 6: 8:00 - 18:00 -
- Thứ 7: 8:00 - 12:00 -

-
-
-
-
-
- - {/* Bottom Section */} -
-
-
- © {currentYear} VisaService. Tất cả quyền được bảo lưu. -
-
- - Chính sách bảo mật - - - Điều khoản sử dụng - - - Sitemap - -
-
-
-
- - {/* Floating Contact Button */} -
- - 💬 - -
-
- ); -} diff --git a/app/components/Header.tsx b/app/components/Header.tsx deleted file mode 100644 index 3e8f926..0000000 --- a/app/components/Header.tsx +++ /dev/null @@ -1,114 +0,0 @@ -"use client"; - -import { useState } from "react"; -import Link from "next/link"; - -export default function Header() { - const [isMenuOpen, setIsMenuOpen] = useState(false); - - const navigation = [ - { name: "Trang chủ", href: "/" }, - { name: "Về chúng tôi", href: "/about" }, - { name: "Dịch vụ", href: "/services" }, - { name: "Visa", href: "/visa" }, - { name: "Quốc gia", href: "/countries" }, - { name: "Bảng giá", href: "/pricing" }, - { name: "Blog", href: "/blog" }, - { name: "Liên hệ", href: "/contact" }, - ]; - - return ( -
-
-
- {/* Logo */} - -
- V -
-
-
VisaService
-
Dịch vụ visa uy tín
-
- - - {/* Desktop Navigation */} - - - {/* CTA Buttons */} -
- - Đặt lịch tư vấn - -
- 📞 - 1900 1234 -
-
- - {/* Mobile Menu Button */} - -
- - {/* Mobile Menu */} - {isMenuOpen && ( -
-
- {navigation.map((item) => ( - setIsMenuOpen(false)} - > - {item.name} - - ))} -
- setIsMenuOpen(false)} - > - Đặt lịch tư vấn - -
- 📞 - 1900 1234 -
-
-
-
- )} -
-
- ); -} diff --git a/app/components/Loader.tsx b/app/components/Loader.tsx new file mode 100644 index 0000000..bcb074e --- /dev/null +++ b/app/components/Loader.tsx @@ -0,0 +1,49 @@ +"use client"; + +import { useEffect, useState } from "react"; + +export default function Loader() { + const [show, setShow] = useState(true); + + useEffect(() => { + const timer = setTimeout(() => setShow(false), 700); + return () => clearTimeout(timer); + }, []); + + if (!show) return null; + + return ( +
+
+
+
+ V + I + S + A + W + A + Y +
+

Loading

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ); +} + diff --git a/app/components/MouseCursor.tsx b/app/components/MouseCursor.tsx new file mode 100644 index 0000000..d9de8bf --- /dev/null +++ b/app/components/MouseCursor.tsx @@ -0,0 +1,8 @@ +export default function MouseCursor() { + return ( + <> +
+
+ + ); +} diff --git a/app/components/about/AboutFeatures.tsx b/app/components/about/AboutFeatures.tsx new file mode 100644 index 0000000..18992c7 --- /dev/null +++ b/app/components/about/AboutFeatures.tsx @@ -0,0 +1,71 @@ +import Link from 'next/link'; + +const AboutFeatures = () => { + return ( +
+
+
+
+
+
+ img +
+
+
+
+
+ Your Travel Made Easy +

+ Smooth Visa Journey Guaranteed +

+
+

+ We provide expert guidance for every visa application, ensuring smooth processing, personalized support, and reliable assistance +

+
+
+ img +
+
+
Expert Consultants
+

+ Skilled and knowledgeable visa advisors. Skilled and knowled geable visa advisors. +

+
+
+
+
+ img +
+
+
Personalized Support
+

+ Skilled and knowledgeable visa advisors. Skilled and knowled geable visa advisors. +

+
+
+
+
+ img +
+
+
Transparent Process
+

+ Skilled and knowledgeable visa advisors. Skilled and knowled geable visa advisors. +

+
+
+ + Get Started Today + + +
+
+
+
+
+
+ ); +}; + +export default AboutFeatures; diff --git a/app/components/about/AboutHero.tsx b/app/components/about/AboutHero.tsx new file mode 100644 index 0000000..b18f21a --- /dev/null +++ b/app/components/about/AboutHero.tsx @@ -0,0 +1,37 @@ +import Link from 'next/link'; +import { AboutData } from '../../about/types'; + +interface AboutHeroProps { + data: AboutData['hero']; +} + +const AboutHero = ({ data }: AboutHeroProps) => { + return ( +
+
+ img +
+
+
+

{data.title}

+
    + {data.breadcrumb.map((item, index) => ( +
  • + {index === data.breadcrumb.length - 1 ? ( + item + ) : ( + <> + {item} + + + )} +
  • + ))} +
+
+
+
+ ); +}; + +export default AboutHero; diff --git a/app/components/about/AboutIntro.tsx b/app/components/about/AboutIntro.tsx new file mode 100644 index 0000000..337ea63 --- /dev/null +++ b/app/components/about/AboutIntro.tsx @@ -0,0 +1,32 @@ +import { AboutData } from '../../about/types'; + +interface AboutIntroProps { + data: AboutData['intro']; +} + +const AboutIntro = ({ data }: AboutIntroProps) => { + return ( +
+
+
+
+ Company Intro +

+ {data.heading} +

+
+

+ {data.description} +

+
+
+
+ img +
+
+
+
+ ); +}; + +export default AboutIntro; diff --git a/app/components/about/AboutMission.tsx b/app/components/about/AboutMission.tsx new file mode 100644 index 0000000..6b6ac48 --- /dev/null +++ b/app/components/about/AboutMission.tsx @@ -0,0 +1,66 @@ +import Link from 'next/link'; +import { AboutData } from '../../about/types'; + +interface AboutMissionProps { + data: AboutData['mission']; +} + +const AboutMission = ({ data }: AboutMissionProps) => { + return ( +
+
+ img +
+
+
+
+
+
+ img +
+ img +
+
+ img +
+
+ img +
+
+ img +
+
+
+
+
+
+ About Our Consultancy +

+ {data.title} +

+
+
+ {data.items.map((item, index) => ( +
+ + + {item.label} + +

{item.description}

+
+ ))} +
+ + Get Started + + +
+
+
+
+
+
+ ); +}; + +export default AboutMission; diff --git a/app/components/about/AboutNews.tsx b/app/components/about/AboutNews.tsx new file mode 100644 index 0000000..edf3287 --- /dev/null +++ b/app/components/about/AboutNews.tsx @@ -0,0 +1,92 @@ +import Link from 'next/link'; + +const AboutNews = () => { + const newsItems = [ + { + image: '/assets/img/home-1/news/news-1.jpg', + category: 'Student Visa', + comments: '08', + date: '20 August ,2025', + title: 'Step-by-Step Guide to Applying for a Student Visa', + author: 'Sohel', + authorImage: '/assets/img/home-1/news/client.png' + }, + { + image: '/assets/img/home-1/news/news-2.jpg', + category: 'IELTS / TOEFL', + comments: '08', + date: '20 August ,2025', + title: 'Tips to Prepare Financial Documents for Visa Approval', + author: 'Sohel', + authorImage: '/assets/img/home-1/news/client.png' + }, + { + image: '/assets/img/home-1/news/news-3.jpg', + category: 'Study Abroad', + comments: '08', + date: '20 August ,2025', + title: 'Post-Arrival Guide What Every Student Should Know', + author: 'Sohel', + authorImage: '/assets/img/home-1/news/client.png' + } + ]; + + return ( +
+
+
+
+ Visa Tips & Guides +

+ Latest Insights & Updates +

+
+ + view all articies + + +
+
+ {newsItems.map((item, index) => ( +
+
+
+ img + {item.category} +
+
+
+
+
+
+
+
+
+ Comment ({item.comments}) + _ {item.date} +
+

+ + {item.title} + +

+
+
+ img + By {item.author} +
+ + View Articles + +
+
+
+
+ ))} +
+
+
+ ); +}; + +export default AboutNews; diff --git a/app/components/about/AboutStats.tsx b/app/components/about/AboutStats.tsx new file mode 100644 index 0000000..9f08697 --- /dev/null +++ b/app/components/about/AboutStats.tsx @@ -0,0 +1,45 @@ +import { AboutData } from '../../about/types'; + +interface AboutStatsProps { + data: AboutData['stats']; +} + +const AboutStats = ({ data }: AboutStatsProps) => { + return ( +
+
+ img +
+
+
+ Did You Know +

+ Our Achievements in Numbers +

+
+
+
+
+
+ {data.map((stat, index) => { + // Helper to extract number and suffix from value + const valueStr = String(stat.value); + const numericMatch = valueStr.match(/(\d+)/); + const numericValue = numericMatch ? numericMatch[0] : "0"; + const suffix = valueStr.replace(numericValue, ""); + + return ( +
+

00{suffix}

+
{stat.label}
+
+ ); + })} +
+
+
+
+ ); +}; + +export default AboutStats; diff --git a/app/components/about/AboutTeam.tsx b/app/components/about/AboutTeam.tsx new file mode 100644 index 0000000..317d0ad --- /dev/null +++ b/app/components/about/AboutTeam.tsx @@ -0,0 +1,42 @@ +import { AboutData } from '../../about/types'; + +interface AboutTeamProps { + data: AboutData['team']; +} + +const AboutTeam = ({ data }: AboutTeamProps) => { + return ( +
+
+
+ Our Expert Team +

+ {data.title} +

+
+
+ {data.members.map((member, index) => ( +
+
+
+ {member.name} +
+
+

{member.name}

+ {member.role} +
+ {member.social.facebook && } + {member.social.linkedin && } + +
+
+
+
+ ))} +
+
+
+ ); +}; + +export default AboutTeam; diff --git a/app/components/about/index.ts b/app/components/about/index.ts new file mode 100644 index 0000000..288c398 --- /dev/null +++ b/app/components/about/index.ts @@ -0,0 +1,7 @@ +export { default as AboutHero } from './AboutHero'; +export { default as AboutIntro } from './AboutIntro'; +export { default as AboutMission } from './AboutMission'; +export { default as AboutFeatures } from './AboutFeatures'; +export { default as AboutNews } from './AboutNews'; +export { default as AboutStats } from './AboutStats'; +export { default as AboutTeam } from './AboutTeam'; diff --git a/app/components/common/Preloader.tsx b/app/components/common/Preloader.tsx new file mode 100644 index 0000000..f71efda --- /dev/null +++ b/app/components/common/Preloader.tsx @@ -0,0 +1,82 @@ +'use client'; + +import { useEffect, useState } from 'react'; + +const Preloader = () => { + const [isLoading, setIsLoading] = useState(true); + + useEffect(() => { + // Simulate loading time or wait for window load + const handleLoad = () => { + // Add a small delay to ensure assets are loaded or at least a smooth transition + setTimeout(() => { + setIsLoading(false); + }, 500); + }; + + if (document.readyState === 'complete') { + handleLoad(); + } else { + window.addEventListener('load', handleLoad); + // Fallback in case load event already fired or takes too long + const timeoutId = setTimeout(handleLoad, 3000); + return () => { + window.removeEventListener('load', handleLoad); + clearTimeout(timeoutId); + }; + } + }, []); + + if (!isLoading) return null; + + return ( +
+
+
+
+
+ + V + + + I + + + S + + + A + + + W + + + A + + + Y + +
+

Loading

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ); +}; + +export default Preloader; diff --git a/app/components/home/Achievements.tsx b/app/components/home/Achievements.tsx new file mode 100644 index 0000000..689328c --- /dev/null +++ b/app/components/home/Achievements.tsx @@ -0,0 +1,47 @@ +interface AchievementsProps { + data: { + heading: string; + subheading: string; + items: { + value: string; + suffix: string; + label: string; + description: string; + }[]; + }; +} + +const Achievements = ({ data }: AchievementsProps) => { + return ( +
+
+ img +
+
+
+ {data.subheading} +

+ {data.heading} +

+
+
+
+
+
+ {data.items.map((item, index) => ( +
+

00{item.suffix}

+
{item.label}
+

+ {item.description} +

+
+ ))} +
+
+
+
+ ); +}; + +export default Achievements; diff --git a/app/components/home/BlogPreview.tsx b/app/components/home/BlogPreview.tsx new file mode 100644 index 0000000..28ca33a --- /dev/null +++ b/app/components/home/BlogPreview.tsx @@ -0,0 +1,89 @@ +import Link from 'next/link'; + +interface BlogPreviewProps { + data: { + heading: string; + subheading: string; + ctaButton: { + label: string; + href: string; + }; + items: { + title: string; + excerpt: string; + category: string; + date: string; + author: { + name: string; + avatar: string; + }; + comments: number; + link: string; + thumbnail: string; + }[]; + }; +} + +const BlogPreview = ({ data }: BlogPreviewProps) => { + const formatDate = (dateString: string) => { + const date = new Date(dateString); + return date.toLocaleDateString('en-US', { day: 'numeric', month: 'long', year: 'numeric' }); + }; + + return ( +
+
+
+
+ {data.subheading} +

+ {data.heading} +

+
+ + {data.ctaButton.label} + + +
+
+ {data.items.map((item, index) => ( +
+
+
+ img + {item.category} +
+
+
+
+
+
+
+
+
+ Comment ({item.comments.toString().padStart(2, '0')}) + _ {formatDate(item.date)} +
+

+ + {item.title} + +

+
+
+ img + By {item.author.name} +
+ View Articles +
+
+
+
+ ))} +
+
+
+ ); +}; + +export default BlogPreview; diff --git a/app/components/home/FAQSection.tsx b/app/components/home/FAQSection.tsx new file mode 100644 index 0000000..dc28c12 --- /dev/null +++ b/app/components/home/FAQSection.tsx @@ -0,0 +1,83 @@ +import Link from 'next/link'; + +interface FAQSectionProps { + data: { + heading: string; + subheading: string; + description: string; + ctaButton: { + label: string; + href: string; + }; + items: { + question: string; + answer: string; + }[]; + }; +} + +const FAQSection = ({ data }: FAQSectionProps) => { + return ( +
+
+
+
+
+
+
+ {data.subheading} +

+ {data.heading} +

+
+

+ {data.description} +

+ + {data.ctaButton.label} + + +
+
+
+
+
+ {data.items.map((item, index) => ( +
+
+ +
+
+
+

+ {item.answer} +

+
+
+
+ ))} +
+
+
+
+
+
+
+ ); +}; + +export default FAQSection; diff --git a/app/components/home/HeroSection.tsx b/app/components/home/HeroSection.tsx new file mode 100644 index 0000000..07d93e1 --- /dev/null +++ b/app/components/home/HeroSection.tsx @@ -0,0 +1,100 @@ +import Link from 'next/link'; + +interface HeroSectionProps { + data: { + title: string; + subtitle: string; + description: string; + primaryButton: { + label: string; + href: string; + }; + secondaryButton: { + label: string; + href: string; + }; + backgroundImage: string; + videoUrl: string; + }; +} + +const HeroSection = ({ data }: HeroSectionProps) => { + return ( +
+
+ img +
+
+ img +
+
+ img +
+
+ img +
+
+
+ + 03 + + + 05 + +
+
+
+
+
+
+
+
+
+
{data.subtitle}
+

+ {data.title} + + + +

+

+ {data.description} +

+
+ + {data.primaryButton.label} + + + + {data.secondaryButton.label} + + +
+
+
+
+
+
+
+
+
+
+
+ img +
+
+
+
+ img +
+
+
+
+
+
+
+
+ ); +}; + +export default HeroSection; diff --git a/app/components/home/Partners.tsx b/app/components/home/Partners.tsx new file mode 100644 index 0000000..4135917 --- /dev/null +++ b/app/components/home/Partners.tsx @@ -0,0 +1,58 @@ +interface PartnersProps { + data: { + heading: string; + items: { + name: string; + logo: string; + year: string; + }[]; + }; +} + +const Partners = ({ data }: PartnersProps) => { + return ( + <> + {/* Awards Section */} +
+
+
+ {data.items.slice(0, 4).map((partner, index) => ( +
+
+
+ img +
+

{partner.name}

+
{partner.year}
+
+
+ ))} +
+
+
+ + {/* Brand Partners Section */} +
+
+
+
+
+
+ {data.items.slice(4).map((partner, index) => ( +
+
+ {partner.name} +
+
+ ))} +
+
+
+
+
+
+ + ); +}; + +export default Partners; diff --git a/app/components/home/Testimonials.tsx b/app/components/home/Testimonials.tsx new file mode 100644 index 0000000..9e75793 --- /dev/null +++ b/app/components/home/Testimonials.tsx @@ -0,0 +1,74 @@ +interface TestimonialsProps { + data: { + heading: string; + subheading: string; + videoUrl: string; + videoThumbnail: string; + items: { + name: string; + role: string; + country: string; + rating: number; + comment: string; + avatar: string; + }[]; + }; +} + +const Testimonials = ({ data }: TestimonialsProps) => { + return ( +
+
+
+ {data.subheading} +

+ {data.heading} +

+
+
+
+
+
+ img + + +
Real stories
+
+
+
+
+
+ {data.items.map((testimonial, index) => ( +
+
+
+ {Array.from({ length: testimonial.rating }).map((_, i) => ( + + ))} +
+

+ {testimonial.comment} +

+
+
+ img +
+
+
{testimonial.name}
+ {testimonial.country} +
+
+
+
+ ))} +
+
+
+
+
+
+
+ ); +}; + +export default Testimonials; diff --git a/app/components/home/VideoGallery.tsx b/app/components/home/VideoGallery.tsx new file mode 100644 index 0000000..44faf61 --- /dev/null +++ b/app/components/home/VideoGallery.tsx @@ -0,0 +1,35 @@ +interface VideoGalleryProps { + data: { + heading: string; + videoUrl: string; + thumbnail: string; + }; +} + +const VideoGallery = ({ data }: VideoGalleryProps) => { + return ( +
+ +
+ img +
+
+ img +
+
+
+
+ img +
+

{data.heading.split(' ').map((word, index) => ( + {word}{index === 0 ?
: ' '}
+ ))}

+
+
+
+ ); +}; + +export default VideoGallery; diff --git a/app/components/home/VisaCountries.tsx b/app/components/home/VisaCountries.tsx new file mode 100644 index 0000000..1d44bfc --- /dev/null +++ b/app/components/home/VisaCountries.tsx @@ -0,0 +1,82 @@ +import Link from 'next/link'; + +interface VisaCountriesProps { + data: { + heading: string; + subheading: string; + description: string; + countries: { + name: string; + code: string; + flag: string; + link: string; + visaTypes: string[]; + }[]; + ctaButton: { + label: string; + href: string; + }; + }; +} + +const VisaCountries = ({ data }: VisaCountriesProps) => { + // Display the first country as featured + const featuredCountry = data.countries[0]; + const halfLength = Math.ceil(featuredCountry.visaTypes.length / 2); + const firstColumn = featuredCountry.visaTypes.slice(0, halfLength); + const secondColumn = featuredCountry.visaTypes.slice(halfLength); + + return ( +
+
+
+
+
+
+
+ {data.subheading} +

+ {data.heading} +

+
+

+ {data.description} +

+
+
    + {firstColumn.map((visaType, index) => ( +
  • + + {visaType} +
  • + ))} +
+
    + {secondColumn.map((visaType, index) => ( +
  • + + {visaType} +
  • + ))} +
+
+ + {data.ctaButton.label} + + +
+
+
+
+ img +
{featuredCountry.code}.{featuredCountry.name}
+
+
+
+
+
+
+ ); +}; + +export default VisaCountries; diff --git a/app/components/home/VisaSolutions.tsx b/app/components/home/VisaSolutions.tsx new file mode 100644 index 0000000..c11bbcc --- /dev/null +++ b/app/components/home/VisaSolutions.tsx @@ -0,0 +1,52 @@ +import Link from 'next/link'; + +interface VisaSolutionsProps { + data: { + heading: string; + subheading: string; + items: { + number: string; + title: string; + description: string; + link: string; + }[]; + }; +} + +const VisaSolutions = ({ data }: VisaSolutionsProps) => { + return ( +
+
+
+ {data.subheading} +

+ {data.heading} +

+
+
+ {data.items.map((item, index) => ( +
+
+
+
+
+
{item.number}
+

+ {item.title} +

+
+
+

+ {item.description} +

+ Service Details +
+
+
+
+ ))} +
+ ); +}; + +export default VisaSolutions; diff --git a/app/components/home/WhyChooseUs.tsx b/app/components/home/WhyChooseUs.tsx new file mode 100644 index 0000000..e8e7c1e --- /dev/null +++ b/app/components/home/WhyChooseUs.tsx @@ -0,0 +1,87 @@ +import Link from 'next/link'; + +interface WhyChooseUsProps { + data: { + heading: string; + subheading: string; + description: string; + items: { + icon: string; + title: string; + description: string; + }[]; + features: string[]; + ctaButton: { + label: string; + href: string; + }; + }; +} + +const WhyChooseUs = ({ data }: WhyChooseUsProps) => { + return ( +
+
+ img +
+
+
+
+
+
+ img +
+ img +
+
+ img +
+
+ img +
+
+ img +
+
+
+
+
+
+ {data.subheading} +

+ {data.heading.split(' Dreams ')[0]} Dreams {data.heading.split(' Dreams ')[1]} +

+
+

+ {data.description} +

+
+ {data.items.map((item, index) => ( +
+ {item.title}- +

{item.description}

+
+ ))} +
+
    + {data.features.map((feature, index) => ( +
  • + + {feature} +
  • + ))} +
+ + {data.ctaButton.label} + + +
+
+
+
+
+
+ ); +}; + +export default WhyChooseUs; diff --git a/app/components/layout/Container.tsx b/app/components/layout/Container.tsx new file mode 100644 index 0000000..0150d65 --- /dev/null +++ b/app/components/layout/Container.tsx @@ -0,0 +1,17 @@ +import React from 'react'; + +interface ContainerProps { + children: React.ReactNode; + className?: string; + fluid?: boolean; +} + +const Container: React.FC = ({ children, className = '', fluid = false }) => { + return ( +
+ {children} +
+ ); +}; + +export default Container; diff --git a/app/components/layout/Footer/Footer.tsx b/app/components/layout/Footer/Footer.tsx new file mode 100644 index 0000000..e97ee25 --- /dev/null +++ b/app/components/layout/Footer/Footer.tsx @@ -0,0 +1,13 @@ +import FooterTop from './FooterTop'; +import FooterBottom from './FooterBottom'; + +const Footer = () => { + return ( + <> + + + + ); +}; + +export default Footer; diff --git a/app/components/layout/Footer/FooterBottom.tsx b/app/components/layout/Footer/FooterBottom.tsx new file mode 100644 index 0000000..5e32054 --- /dev/null +++ b/app/components/layout/Footer/FooterBottom.tsx @@ -0,0 +1,28 @@ +import Link from 'next/link'; + +const FooterBottom = () => { + return ( +
+
+
+

+ Copyright© GRAMENTHEME All Rights Reserved. +

+
    +
  • + Terms & Conditions +
  • +
  • + Privacy Policy +
  • +
  • + Contact Us +
  • +
+
+
+
+ ); +}; + +export default FooterBottom; diff --git a/app/components/layout/Footer/FooterTop.tsx b/app/components/layout/Footer/FooterTop.tsx new file mode 100644 index 0000000..b954267 --- /dev/null +++ b/app/components/layout/Footer/FooterTop.tsx @@ -0,0 +1,55 @@ +import Link from 'next/link'; + +const FooterTop = () => { + return ( +
+
+
+
+
+
+

+ +84 961 83 4040 +

+

734 Luy Ban Bich St, Tan Thanh Ward, Tan Phu Dist, HCMC

+
+ + img + +
    +
  • + Home +
  • +
  • + About Us +
  • +
  • + Visa +
  • +
  • + Pages +
  • +
  • + Article +
  • +
  • + Contact Us +
  • +
+
+ + + + +
+
+
+
+
+
+
+
+ ); +}; + +export default FooterTop; diff --git a/app/components/layout/Header/Header.tsx b/app/components/layout/Header/Header.tsx new file mode 100644 index 0000000..3484090 --- /dev/null +++ b/app/components/layout/Header/Header.tsx @@ -0,0 +1,25 @@ +import HeaderTop from './HeaderTop'; +import HeaderBottom from './HeaderBottom'; + +const Header = () => { + return ( + <> + + + {/* Search Popup - kept here for now as part of header logic/structure */} +
+
+
+
+ + +
+
+
+ + ); +}; + +export default Header; diff --git a/app/components/layout/Header/HeaderBottom.tsx b/app/components/layout/Header/HeaderBottom.tsx new file mode 100644 index 0000000..4b87d29 --- /dev/null +++ b/app/components/layout/Header/HeaderBottom.tsx @@ -0,0 +1,154 @@ +'use client'; + +import Link from 'next/link'; +import HeaderMenu from './HeaderMenu'; + +const homeMegaMenu = ( + <> +
+
+ img +
+ + Multi Page + +
+
+
+

+ Home 01 +

+
+
+
+
+ img +
+ + Multi Page + +
+
+
+

+ Home 02 +

+
+
+
+
+ img +
+ + Multi Page + +
+
+
+

+ Home 03 +

+
+
+ +); + +const menuItems = [ + { + label: 'Home', + href: '/', + megaMenuContent: homeMegaMenu + }, + { + label: 'About Us', + href: '/about' + }, + { + label: 'Pages', + href: '#', + submenu: [ + { + label: 'Service', + href: '#', + submenu: [ + { label: 'Service', href: '/service' }, + { label: 'Service Details', href: '/service-details' } + ] + }, + { + label: 'Country List', + href: '#', + submenu: [ + { label: 'Country List', href: '/country-list' }, + { label: 'Country Details', href: '/country-details' } + ] + }, + { label: 'Our Pricing', href: '/pricing' }, + { label: 'Appointment', href: '/appointment' }, + { label: '404 Page', href: '/404' }, + { label: 'Coming Soon', href: '/coming-soon' } + ] + }, + { + label: 'VISA', + href: '#', + submenu: [ + { label: 'Visa List', href: '/country-list' }, + { label: 'Visa Details', href: '/country-details' } + ] + }, + { + label: 'Blog', + href: '#', + submenu: [ + { label: 'Blog Grid', href: '/news-grid' }, + { label: 'Blog Standard', href: '/news' }, + { label: 'Blog Details', href: '/news-details' } + ] + }, + { + label: 'Contact Us', + href: '/contact' + } +]; + +const HeaderBottom = () => { + return ( +
+
+
+
+
+
+ + logo-img + +
+
+ +
+
+
+
+ + + + + Apply now + + +
+
+ +
+
+
+
+
+
+
+
+ ); +}; + +export default HeaderBottom; diff --git a/app/components/layout/Header/HeaderMenu.tsx b/app/components/layout/Header/HeaderMenu.tsx new file mode 100644 index 0000000..3a083b5 --- /dev/null +++ b/app/components/layout/Header/HeaderMenu.tsx @@ -0,0 +1,68 @@ +import Link from 'next/link'; + +interface MenuItem { + label: string; + href: string; + submenu?: MenuItem[]; + isMegaMenu?: boolean; // For Home demo images if needed, though simple recursion handles most + megaMenuContent?: React.ReactNode; // Flexible slot for complex mega menus +} + +interface HeaderMenuProps { + menuItems: MenuItem[]; +} + +const HeaderMenu: React.FC = ({ menuItems }) => { + return ( +
+ +
+ ); +}; + +export default HeaderMenu; diff --git a/app/components/layout/Header/HeaderTop.tsx b/app/components/layout/Header/HeaderTop.tsx new file mode 100644 index 0000000..50539b5 --- /dev/null +++ b/app/components/layout/Header/HeaderTop.tsx @@ -0,0 +1,63 @@ +import Link from 'next/link'; + +const HeaderTop = () => { + return ( +
+
+
+
+ +
+ +
+
+
+ +
+
+ + English + +
    +
  • + English +
  • +
  • + Bangla +
  • +
  • + Hindi +
  • +
+
+
+
+ + + + +
+
+
+
+
+ ); +}; + +export default HeaderTop; diff --git a/app/home.json b/app/home.json new file mode 100644 index 0000000..f260aed --- /dev/null +++ b/app/home.json @@ -0,0 +1,457 @@ +{ + "header": { + "top": { + "phone": "+09 378 357 5222", + "email": "info@hailearning.edu.vn", + "location": "69 Street, 5th Avenue LA, United States", + "socialLinks": [ + { + "platform": "linkedin", + "url": "https://linkedin.com", + "icon": "fa-brands fa-linkedin" + }, + { + "platform": "twitter", + "url": "https://twitter.com", + "icon": "fa-brands fa-twitter" + }, + { + "platform": "instagram", + "url": "https://instagram.com", + "icon": "fa-brands fa-instagram" + }, + { + "platform": "youtube", + "url": "https://youtube.com", + "icon": "fa-brands fa-youtube" + } + ] + }, + "menu": [ + { + "label": "Home", + "href": "/", + "children": [] + }, + { + "label": "About Us", + "href": "/about", + "children": [] + }, + { + "label": "Pages", + "href": "#", + "children": [ + { + "label": "Service", + "href": "/service", + "children": [ + { + "label": "Service", + "href": "/service" + }, + { + "label": "Service Details", + "href": "/service-details" + } + ] + }, + { + "label": "Country List", + "href": "/country-list", + "children": [ + { + "label": "Country List", + "href": "/country-list" + }, + { + "label": "Country Details", + "href": "/country-details" + } + ] + }, + { + "label": "Our Pricing", + "href": "/pricing" + }, + { + "label": "Appointment", + "href": "/appointment" + } + ] + }, + { + "label": "VISA", + "href": "#", + "children": [ + { + "label": "Visa List", + "href": "/visa-list" + }, + { + "label": "Visa Details", + "href": "/visa-details" + } + ] + }, + { + "label": "Blog", + "href": "#", + "children": [ + { + "label": "Blog Grid", + "href": "/blog-grid" + }, + { + "label": "Blog Standard", + "href": "/blog" + }, + { + "label": "Blog Details", + "href": "/blog-details" + } + ] + }, + { + "label": "Contact Us", + "href": "/contact" + } + ] + }, + "hero": { + "title": "From Application to Visa – We've Got You Covered", + "subtitle": "Global Education Simplified", + "description": "We guide you through every step of the education visa process, from initial application to final approval, ensuring a smooth, hassle-free journey.", + "primaryButton": { + "label": "Apply now", + "href": "/contact" + }, + "secondaryButton": { + "label": "Book Free Consultation", + "href": "/contact" + }, + "backgroundImage": "/assets/img/home-1/hero/bg.jpg", + "videoUrl": "https://www.youtube.com/watch?v=Cn4G2lZ_g2I" + }, + "whyChooseUs": { + "heading": "Turning Study Abroad Dreams Into Reality", + "subheading": "About Our Consultancy", + "description": "We guide students with expert visa consulting, ensuring a smooth process from application to approval, turning study abroad aspirations into life-changing opportunities for a brighter future.", + "items": [ + { + "icon": "/assets/img/home-1/icon/01.svg", + "title": "Global Reach", + "description": "Expanding Opportunities Worldwide" + }, + { + "icon": "/assets/img/home-1/icon/01.svg", + "title": "Expert Guidance", + "description": "Professional Support Every Step" + } + ], + "features": [ + "Fastest Visa form processing with skilled immigration agents", + "Partnership with International Educational Institutions" + ], + "ctaButton": { + "label": "Get Started", + "href": "/about" + } + }, + "visaSolutions": { + "heading": "Comprehensive Visa Solutions", + "subheading": "Our Expert Services", + "items": [ + { + "number": "01", + "title": "Student Visa Guidance", + "description": "Assistance with admission, documentation, and visa application.Assistance", + "link": "/service-details" + }, + { + "number": "02", + "title": "PTE Exam Preparation", + "description": "We provide expert guidance and personalized support throughout the education visa process,", + "link": "/service-details" + }, + { + "number": "03", + "title": "University Selection Assistance", + "description": "We provide expert guidance and personalized support throughout the education visa process,", + "link": "/service-details" + }, + { + "number": "04", + "title": "IELTS Exam Preparation", + "description": "We provide expert guidance and personalized support throughout the education visa process,", + "link": "/service-details" + } + ] + }, + "visaCountries": { + "heading": "Visa & VISAWAY Services To UK", + "subheading": "UK. United Kingdom", + "description": "The Express Entry program is designed for skilled workers who wish to immigrate to Canada. It includes the Federal Skilled Worker Program, the Federal Skilled…", + "countries": [ + { + "name": "United Kingdom", + "code": "UK", + "flag": "/assets/img/home-1/feature/shape.png", + "link": "/country-details/uk", + "visaTypes": [ + "Visitor Visa", + "Student Visa & Admission", + "Work Visa – H1B", + "Business Visa", + "Work permit for Canada", + "Student Visa for Canada" + ] + }, + { + "name": "United States", + "code": "US", + "flag": "/assets/img/flags/us.png", + "link": "/country-details/us", + "visaTypes": [ + "Student Visa F-1", + "Work Visa H1-B", + "Tourist Visa B-2" + ] + }, + { + "name": "Canada", + "code": "CA", + "flag": "/assets/img/flags/canada.png", + "link": "/country-details/canada", + "visaTypes": [ + "Study Permit", + "Work Permit", + "Express Entry" + ] + }, + { + "name": "Australia", + "code": "AU", + "flag": "/assets/img/flags/australia.png", + "link": "/country-details/australia", + "visaTypes": [ + "Student Visa 500", + "Skilled Migration", + "Working Holiday" + ] + }, + { + "name": "Germany", + "code": "DE", + "flag": "/assets/img/flags/germany.png", + "link": "/country-details/germany", + "visaTypes": [ + "Student Visa", + "Job Seeker Visa", + "EU Blue Card" + ] + } + ], + "ctaButton": { + "label": "Get Started", + "href": "/contact" + } + }, + "testimonials": { + "heading": "Student Reviews & Testimonials", + "subheading": "What Our Students Say", + "videoUrl": "https://www.youtube.com/watch?v=Cn4G2lZ_g2I", + "videoThumbnail": "/assets/img/home-1/testimonial/01.jpg", + "items": [ + { + "name": "Sohel Tanvir", + "role": "Student", + "country": "Canada", + "rating": 5, + "comment": "Professional and reliable service. They explained each step clearly, prepared my documents, and supported me during the interview. My visa approval came faster than expected.", + "avatar": "/assets/img/home-1/testimonial/client.png" + }, + { + "name": "Ayesha Rahman", + "role": "Student", + "country": "UK. United Kingdom", + "rating": 5, + "comment": "The consultancy guided me from start to finish, making my study abroad journey smooth and stress-free. Thanks to their expert support, I secured my visa successfully.", + "avatar": "/assets/img/home-1/testimonial/client-2.png" + }, + { + "name": "Michael Chen", + "role": "Graduate Student", + "country": "Australia", + "rating": 5, + "comment": "Outstanding service from beginning to end. The team was knowledgeable, responsive, and made the entire visa process seamless. Highly recommend to anyone planning to study abroad.", + "avatar": "/assets/img/home-1/testimonial/client.png" + } + ] + }, + "videoGallery": { + "heading": "VIDEO PLAY GALLERY", + "videoUrl": "https://ex-coders.com/vdo/visa.mp4", + "thumbnail": "/assets/img/home-1/feature/text.png" + }, + "faq": { + "heading": "Got Questions? We've Got Answers", + "subheading": "Visa FAQs", + "description": "We understand students often have many questions about studying abroad. Our experts provide clear.", + "ctaButton": { + "label": "contact us", + "href": "/contact" + }, + "items": [ + { + "question": "How long does the student visa process usually take?", + "answer": "The student visa process typically takes 4-8 weeks depending on the country and time of year. We recommend starting the application process at least 3 months before your intended travel date to ensure sufficient time for document preparation and processing." + }, + { + "question": "Do you assist with scholarship applications as well?", + "answer": "Yes, we guide students in identifying suitable scholarships, preparing strong applications, and increasing chances of securing financial aid for their studies abroad." + }, + { + "question": "Will you guide me in preparing for the visa interview?", + "answer": "Absolutely! We provide comprehensive visa interview preparation, including mock interviews, document review, and tips on how to answer common questions confidently and effectively." + }, + { + "question": "Do you offer post-arrival support for students?", + "answer": "Yes, we provide post-arrival support including airport pickup coordination, accommodation assistance, university orientation guidance, and ongoing support throughout your study period." + }, + { + "question": "What documents are required for a student visa application?", + "answer": "Required documents typically include a valid passport, university acceptance letter, proof of financial support, academic transcripts, language proficiency test scores, and health insurance. We provide a complete checklist tailored to your destination country." + } + ] + }, + "achievements": { + "heading": "Our Achievements in Numbers", + "subheading": "Did You Know", + "items": [ + { + "value": "1000", + "suffix": "k+", + "label": "Students Guided", + "description": "Successfully assisted over a thousand students worldwide." + }, + { + "value": "50", + "suffix": "+", + "label": "Countries Covered", + "description": "Helping students apply to universities in more than 50 countries." + }, + { + "value": "95", + "suffix": "%", + "label": "Visa Success Rate", + "description": "Inspired students to reach their goals globally" + }, + { + "value": "10", + "suffix": "+", + "label": "Years of Experience", + "description": "Trusted experts in global education consulting." + } + ] + }, + "partners": { + "heading": "Our Trusted Partners", + "items": [ + { + "name": "Best Visa Consultancy", + "logo": "/assets/img/home-1/feature/icon-1.png", + "year": "2025" + }, + { + "name": "Visa Success Award", + "logo": "/assets/img/home-1/feature/icon-2.png", + "year": "2025" + }, + { + "name": "Innovation Award", + "logo": "/assets/img/home-1/feature/icon-3.png", + "year": "2025" + }, + { + "name": "Global Education Partner", + "logo": "/assets/img/home-1/feature/icon-4.png", + "year": "2025" + }, + { + "name": "University Partner 1", + "logo": "/assets/img/home-1/brand/01.png", + "year": "2025" + }, + { + "name": "University Partner 2", + "logo": "/assets/img/home-1/brand/02.png", + "year": "2025" + }, + { + "name": "University Partner 3", + "logo": "/assets/img/home-1/brand/03.png", + "year": "2025" + }, + { + "name": "University Partner 4", + "logo": "/assets/img/home-1/brand/04.png", + "year": "2025" + }, + { + "name": "University Partner 5", + "logo": "/assets/img/home-1/brand/05.png", + "year": "2025" + } + ] + }, + "blogPreview": { + "heading": "Latest Insights & Updates", + "subheading": "Visa Tips & Guides", + "ctaButton": { + "label": "view all articles", + "href": "/blog" + }, + "items": [ + { + "title": "Step-by-Step Guide to Applying for a Student Visa", + "excerpt": "Learn the complete process of applying for a student visa, from gathering documents to attending your interview. Our comprehensive guide covers everything you need to know.", + "category": "Student Visa", + "date": "2025-08-20", + "author": { + "name": "Sohel", + "avatar": "/assets/img/home-1/news/client.png" + }, + "comments": 8, + "link": "/blog/step-by-step-guide-student-visa", + "thumbnail": "/assets/img/home-1/news/news-1.jpg" + }, + { + "title": "Tips to Prepare Financial Documents for Visa Approval", + "excerpt": "Financial documentation is crucial for visa approval. Discover expert tips on preparing bank statements, sponsorship letters, and proof of funds that meet embassy requirements.", + "category": "IELTS / TOEFL", + "date": "2025-08-20", + "author": { + "name": "Sohel", + "avatar": "/assets/img/home-1/news/client.png" + }, + "comments": 8, + "link": "/blog/financial-documents-visa-approval", + "thumbnail": "/assets/img/home-1/news/news-2.jpg" + }, + { + "title": "Post-Arrival Guide What Every Student Should Know", + "excerpt": "Moving to a new country can be overwhelming. Our post-arrival guide helps international students navigate accommodation, banking, healthcare, and cultural adaptation successfully.", + "category": "Study Abroad", + "date": "2025-08-20", + "author": { + "name": "Sohel", + "avatar": "/assets/img/home-1/news/client.png" + }, + "comments": 8, + "link": "/blog/post-arrival-guide-students", + "thumbnail": "/assets/img/home-1/news/news-3.jpg" + } + ] + } +} diff --git a/app/layout.tsx b/app/layout.tsx index 58b4207..d330d31 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,14 +1,17 @@ import type { Metadata } from "next"; import "./globals.css"; + import Header from "./components/Header"; import Footer from "./components/Footer"; +import Loader from "./components/Loader"; +import BackToTop from "./components/BackToTop"; +import MouseCursor from "./components/MouseCursor"; import Script from "next/script"; export const metadata: Metadata = { - title: "VisaService - Dịch vụ visa uy tín", - description: - "Dịch vụ visa chuyên nghiệp với tỷ lệ thành công 99%. Hỗ trợ visa cho hơn 50 quốc gia.", + title: "Visaway – Immigration & Visa Consulting HTML Template", + description: "Visaway – Immigration & Visa Consulting HTML Template", }; export default function RootLayout({ @@ -17,45 +20,46 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - + - {/* Nhúng các file CSS template như news.html */} + {/* Favicon */} + + {/* Bootstrap min.css */} + {/* All Min Css */} + {/* Animate.css */} + {/* Magnific Popup.css */} + {/* MeanMenu.css */} + {/* Odometer.css */} + {/* Swiper Bundle.css */} + {/* Nice Select.css */} + {/* Main.css */} - + + + +
-
{children}
+ + {children} +