This project uses Vue 3 single-file components with the Composition API and <script setup>. The page is composed from section components instead of routing between pages, because the product is a single landing page.
src/App.vue is responsible for arranging the page sections:
Header
Hero
Features
Pricing
Faq
Testimonial
Download
FooterThis keeps the top-level structure easy to scan and lets each section own its own layout.
components/layout: persistent layout components such as the header and footer.components/sections: full-page landing sections.components: reusable UI pieces used by multiple sections.constants: structured data used to render repeated UI.assets/styles: Tailwind entry file, design tokens, and custom utilities.
Repeated content lives in src/constants/index.ts. This keeps templates focused on rendering and reduces duplicated markup.
Examples include:
- feature cards
- pricing plans
- FAQ items
- testimonials
- platform links
- partner logos
The arrays use as const so TypeScript preserves literal values and gives better inference when those constants are passed into components.
Reusable components receive explicit TypeScript props. For example, PricingCard.vue receives a single plan, plus state telling it whether the plan is primary and whether monthly pricing is active.
This keeps the pricing logic in one place:
Pricing.vueowns the monthly/yearly toggle.PricingCard.vuerenders the calculated card state.
In Vue and Vite, assets inside src/assets should usually be imported from scripts:
import logo from "@/assets/images/xora.svg";Then the template can bind them:
<img :src="logo" alt="Xora logo" />This avoids broken paths when files are bundled for production.
The header tracks scroll position and the active section. The navigation links are real <a> elements, but their click behavior uses smooth scrolling and updates active state.
The important ideas are:
- use anchor semantics for navigation
- update active state based on visible section
- close the mobile menu after navigation
- keep scroll work lightweight
The project uses semantic structure where it helps accessibility:
<header>for the main navigation<main>for the page content<section>for major page sections<article>for independent cards and testimonials<nav>for navigation groups<ul>and<li>for repeated lists<blockquote>and<cite>for testimonials
Good semantics make the page easier for screen readers, crawlers, and future maintainers to understand.