├── src ├── lib │ ├── index.ts │ └── cn.ts ├── utils │ ├── index.ts │ └── metadata.ts ├── components │ ├── ui │ │ ├── aspect-ratio.tsx │ │ ├── skeleton.tsx │ │ ├── collapsible.tsx │ │ ├── textarea.tsx │ │ ├── label.tsx │ │ ├── input.tsx │ │ ├── separator.tsx │ │ ├── progress.tsx │ │ ├── toaster.tsx │ │ ├── sonner.tsx │ │ ├── checkbox.tsx │ │ ├── slider.tsx │ │ ├── switch.tsx │ │ ├── badge.tsx │ │ ├── tooltip.tsx │ │ ├── hover-card.tsx │ │ ├── popover.tsx │ │ ├── avatar.tsx │ │ ├── radio-group.tsx │ │ ├── toggle.tsx │ │ ├── alert.tsx │ │ ├── scroll-area.tsx │ │ ├── resizable.tsx │ │ ├── toggle-group.tsx │ │ ├── tabs.tsx │ │ ├── card.tsx │ │ ├── accordion.tsx │ │ ├── ripple.tsx │ │ ├── input-otp.tsx │ │ ├── button.tsx │ │ ├── orbiting-circles.tsx │ │ ├── calendar.tsx │ │ ├── breadcrumb.tsx │ │ ├── pagination.tsx │ │ ├── table.tsx │ │ ├── drawer.tsx │ │ ├── magic-card.tsx │ │ ├── dialog.tsx │ │ ├── sheet.tsx │ │ ├── form.tsx │ │ ├── alert-dialog.tsx │ │ ├── toast.tsx │ │ ├── command.tsx │ │ ├── navigation-menu.tsx │ │ ├── select.tsx │ │ ├── carousel.tsx │ │ ├── context-menu.tsx │ │ └── dropdown-menu.tsx │ ├── global │ │ ├── wrapper.tsx │ │ └── container.tsx │ └── marketing │ │ ├── companies.tsx │ │ ├── mobile-menu.tsx │ │ ├── navbar.tsx │ │ ├── lang-support.tsx │ │ ├── cta.tsx │ │ ├── features.tsx │ │ ├── integration.tsx │ │ ├── hero.tsx │ │ └── pricing.tsx ├── constants │ ├── links.ts │ ├── index.ts │ ├── fonts.ts │ ├── features.ts │ ├── countries.ts │ └── plans.ts ├── app │ ├── loading.tsx │ ├── (marketing) │ │ ├── layout.tsx │ │ └── page.tsx │ ├── layout.tsx │ └── not-found.tsx ├── hooks │ ├── use-mobile.tsx │ └── use-toast.ts └── styles │ └── globals.css ├── public ├── icons │ ├── icon.png │ └── icon-dark.png ├── images │ ├── dashboard.png │ └── feature-five.svg └── fonts │ ├── Satoshi-Black.woff2 │ ├── Satoshi-Bold.woff2 │ ├── Satoshi-Light.woff2 │ ├── Satoshi-Medium.woff2 │ ├── Satoshi-Regular.woff2 │ └── Satoshi-Variable.woff2 ├── postcss.config.mjs ├── next.config.ts ├── eslint.config.mjs ├── components.json ├── .gitignore ├── tsconfig.json ├── LICENSE ├── package.json ├── README.md └── tailwind.config.ts /src/lib/index.ts: -------------------------------------------------------------------------------- 1 | import { cn } from "./cn"; 2 | 3 | export { 4 | cn, 5 | }; 6 | -------------------------------------------------------------------------------- /public/icons/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shreyas-29/vetra/HEAD/public/icons/icon.png -------------------------------------------------------------------------------- /public/icons/icon-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shreyas-29/vetra/HEAD/public/icons/icon-dark.png -------------------------------------------------------------------------------- /public/images/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shreyas-29/vetra/HEAD/public/images/dashboard.png -------------------------------------------------------------------------------- /public/fonts/Satoshi-Black.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shreyas-29/vetra/HEAD/public/fonts/Satoshi-Black.woff2 -------------------------------------------------------------------------------- /public/fonts/Satoshi-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shreyas-29/vetra/HEAD/public/fonts/Satoshi-Bold.woff2 -------------------------------------------------------------------------------- /public/fonts/Satoshi-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shreyas-29/vetra/HEAD/public/fonts/Satoshi-Light.woff2 -------------------------------------------------------------------------------- /public/fonts/Satoshi-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shreyas-29/vetra/HEAD/public/fonts/Satoshi-Medium.woff2 -------------------------------------------------------------------------------- /src/utils/index.ts: -------------------------------------------------------------------------------- 1 | import { generateMetadata } from "./metadata"; 2 | 3 | export { 4 | generateMetadata, 5 | }; -------------------------------------------------------------------------------- /public/fonts/Satoshi-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shreyas-29/vetra/HEAD/public/fonts/Satoshi-Regular.woff2 -------------------------------------------------------------------------------- /public/fonts/Satoshi-Variable.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shreyas-29/vetra/HEAD/public/fonts/Satoshi-Variable.woff2 -------------------------------------------------------------------------------- /postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /src/lib/cn.ts: -------------------------------------------------------------------------------- 1 | import { clsx, type ClassValue } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from "next"; 2 | 3 | const nextConfig: NextConfig = { 4 | eslint: { 5 | ignoreDuringBuilds: true, 6 | } 7 | }; 8 | 9 | export default nextConfig; 10 | -------------------------------------------------------------------------------- /src/components/ui/aspect-ratio.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio" 4 | 5 | const AspectRatio = AspectRatioPrimitive.Root 6 | 7 | export { AspectRatio } 8 | -------------------------------------------------------------------------------- /src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /src/constants/links.ts: -------------------------------------------------------------------------------- 1 | export const NAV_LINKS = [ 2 | { 3 | name: "Pricing", 4 | href: "#" 5 | }, 6 | { 7 | name: "Features", 8 | href: "#" 9 | }, 10 | { 11 | name: "Blog", 12 | href: "#" 13 | }, 14 | { 15 | name: "Contact", 16 | href: "#" 17 | }, 18 | ]; 19 | -------------------------------------------------------------------------------- /src/constants/index.ts: -------------------------------------------------------------------------------- 1 | import { base, heading } from "./fonts"; 2 | import { PLANS } from "./plans"; 3 | import { NAV_LINKS } from "./links"; 4 | import { SUPPORTED_LANGUAGES } from "./countries"; 5 | import { FEATURES } from "./features"; 6 | 7 | export { 8 | base, 9 | heading, 10 | PLANS, 11 | NAV_LINKS, 12 | SUPPORTED_LANGUAGES, 13 | FEATURES, 14 | }; -------------------------------------------------------------------------------- /src/components/ui/collapsible.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as CollapsiblePrimitive from "@radix-ui/react-collapsible" 4 | 5 | const Collapsible = CollapsiblePrimitive.Root 6 | 7 | const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger 8 | 9 | const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent 10 | 11 | export { Collapsible, CollapsibleTrigger, CollapsibleContent } 12 | -------------------------------------------------------------------------------- /src/app/loading.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const Loader = () => { 4 | return ( 5 |
6 |
7 |
8 | ) 9 | }; 10 | 11 | export default Loader 12 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { FlatCompat } from "@eslint/eslintrc"; 4 | 5 | const __filename = fileURLToPath(import.meta.url); 6 | const __dirname = dirname(__filename); 7 | 8 | const compat = new FlatCompat({ 9 | baseDirectory: __dirname, 10 | }); 11 | 12 | const eslintConfig = [ 13 | ...compat.extends("next/core-web-vitals", "next/typescript"), 14 | ]; 15 | 16 | export default eslintConfig; 17 | -------------------------------------------------------------------------------- /components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "default", 4 | "rsc": true, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "tailwind.config.ts", 8 | "css": "src/app/globals.css", 9 | "baseColor": "neutral", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "utils": "@/lib", 16 | "ui": "@/components/ui", 17 | "lib": "@/lib", 18 | "hooks": "@/hooks" 19 | }, 20 | "iconLibrary": "lucide" 21 | } -------------------------------------------------------------------------------- /src/components/global/wrapper.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { cn } from "@/lib"; 3 | 4 | interface Props { 5 | className?: string; 6 | children: React.ReactNode; 7 | } 8 | 9 | const Wrapper = ({ children, className }: Props) => { 10 | return ( 11 |
17 | {children} 18 |
19 | ) 20 | }; 21 | 22 | export default Wrapper 23 | -------------------------------------------------------------------------------- /src/app/(marketing)/layout.tsx: -------------------------------------------------------------------------------- 1 | import Footer from "@/components/marketing/footer"; 2 | import Navbar from "@/components/marketing/navbar"; 3 | import React from 'react'; 4 | 5 | interface Props { 6 | children: React.ReactNode 7 | } 8 | 9 | const MarketingLayout = ({ children }: Props) => { 10 | return ( 11 | <> 12 | 13 |
14 | {children} 15 |
16 |