├── .gitignore ├── LICENSE ├── README.md ├── components.json ├── eslint.config.mjs ├── next.config.ts ├── package.json ├── pnpm-lock.yaml ├── postcss.config.mjs ├── public ├── fonts │ ├── Satoshi-Black.woff2 │ ├── Satoshi-Bold.woff2 │ ├── Satoshi-Light.woff2 │ ├── Satoshi-Medium.woff2 │ ├── Satoshi-Regular.woff2 │ └── Satoshi-Variable.woff2 ├── icons │ ├── icon-dark.png │ └── icon.png └── images │ ├── dashboard.png │ ├── feature-five.svg │ ├── feature-four.svg │ ├── feature-one.svg │ ├── feature-three.svg │ ├── feature-two.svg │ └── integration.svg ├── src ├── app │ ├── (marketing) │ │ ├── layout.tsx │ │ └── page.tsx │ ├── layout.tsx │ ├── loading.tsx │ └── not-found.tsx ├── components │ ├── global │ │ ├── container.tsx │ │ ├── icons.tsx │ │ ├── images.tsx │ │ └── wrapper.tsx │ ├── marketing │ │ ├── analysis.tsx │ │ ├── companies.tsx │ │ ├── cta.tsx │ │ ├── features.tsx │ │ ├── footer.tsx │ │ ├── hero.tsx │ │ ├── integration.tsx │ │ ├── lang-support.tsx │ │ ├── mobile-menu.tsx │ │ ├── navbar.tsx │ │ └── pricing.tsx │ └── ui │ │ ├── accordion.tsx │ │ ├── alert-dialog.tsx │ │ ├── alert.tsx │ │ ├── aspect-ratio.tsx │ │ ├── avatar.tsx │ │ ├── badge.tsx │ │ ├── breadcrumb.tsx │ │ ├── button.tsx │ │ ├── calendar.tsx │ │ ├── card.tsx │ │ ├── carousel.tsx │ │ ├── chart.tsx │ │ ├── checkbox.tsx │ │ ├── collapsible.tsx │ │ ├── command.tsx │ │ ├── context-menu.tsx │ │ ├── dialog.tsx │ │ ├── drawer.tsx │ │ ├── dropdown-menu.tsx │ │ ├── form.tsx │ │ ├── hover-card.tsx │ │ ├── input-otp.tsx │ │ ├── input.tsx │ │ ├── label.tsx │ │ ├── magic-card.tsx │ │ ├── menubar.tsx │ │ ├── navigation-menu.tsx │ │ ├── orbiting-circles.tsx │ │ ├── pagination.tsx │ │ ├── particles.tsx │ │ ├── popover.tsx │ │ ├── progress.tsx │ │ ├── radio-group.tsx │ │ ├── resizable.tsx │ │ ├── ripple.tsx │ │ ├── scroll-area.tsx │ │ ├── select.tsx │ │ ├── separator.tsx │ │ ├── sheet.tsx │ │ ├── sidebar.tsx │ │ ├── skeleton.tsx │ │ ├── slider.tsx │ │ ├── sonner.tsx │ │ ├── switch.tsx │ │ ├── table.tsx │ │ ├── tabs.tsx │ │ ├── textarea.tsx │ │ ├── toast.tsx │ │ ├── toaster.tsx │ │ ├── toggle-group.tsx │ │ ├── toggle.tsx │ │ └── tooltip.tsx ├── constants │ ├── countries.ts │ ├── features.ts │ ├── fonts.ts │ ├── index.ts │ ├── links.ts │ └── plans.ts ├── hooks │ ├── use-mobile.tsx │ └── use-toast.ts ├── lib │ ├── cn.ts │ └── index.ts ├── styles │ └── globals.css └── utils │ ├── index.ts │ └── metadata.ts ├── tailwind.config.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.* 7 | .yarn/* 8 | !.yarn/patches 9 | !.yarn/plugins 10 | !.yarn/releases 11 | !.yarn/versions 12 | 13 | # testing 14 | /coverage 15 | 16 | # next.js 17 | /.next/ 18 | /out/ 19 | 20 | # production 21 | /build 22 | 23 | # misc 24 | .DS_Store 25 | *.pem 26 | 27 | # debug 28 | npm-debug.log* 29 | yarn-debug.log* 30 | yarn-error.log* 31 | .pnpm-debug.log* 32 | 33 | # env files (can opt-in for committing if needed) 34 | .env* 35 | 36 | # vercel 37 | .vercel 38 | 39 | # typescript 40 | *.tsbuildinfo 41 | next-env.d.ts 42 | 43 | dummy 44 | ignore -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Shreyas Sihasane 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Vetra Logo 2 | 3 | # 🚀 Vetra - AI Marketing Automation Platform 4 | 5 | Vetra Thumbnail 6 | 7 | ## 🌟 Introduction 8 | Vetra is an AI-powered marketing automation platform that transforms your marketing workflow in seconds. Built with modern technologies, it offers a sleek interface for managing marketing campaigns, content generation, and performance analytics. 9 | 10 | ## 🔗 Live Preview 11 | 12 | Check out the live demo of caps.ai here: [Live Preview](https://vetra-app.vercel.app/) 13 | 14 | ## 🎥 Watch the Preview Video on YouTube 15 | 16 | Take a look at YouTube video by watching the demo: [Watch the Video](https://youtu.be/dfQ_WwWV6g8) 17 | 18 | ## 💻 Tech Stack 19 | 20 | - **Next.js 15** – React framework for production 21 | - **TailwindCSS** – Utility-first CSS framework 22 | - **Shadcn UI** – Reusable component system 23 | - **Framer Motion** – Smooth animations 24 | - **TypeScript** – Type-safe code 25 | - **Number Flow** – Smooth number animations 26 | 27 | ## 🛠️ Installation 28 | 29 | 1. Clone the repository: 30 | ```bash 31 | git clone https://github.com/Shreyas-29/vetra.git 32 | ``` 33 | 34 | 2. Install dependencies: 35 | ```bash 36 | pnpm install 37 | # or 38 | yarn install 39 | ``` 40 | 41 | 3. Run the development server: 42 | ```bash 43 | pnpm run dev 44 | # or 45 | yarn dev 46 | ``` 47 | 48 | 4. Open [http://localhost:3000](http://localhost:3000) in your browser 49 | 50 | ## 🔧 Environment Variables 51 | 52 | Create a `.env` file in the root directory: 53 | 54 | ```env 55 | NEXT_PUBLIC_APP_URL=your_app_url 56 | ``` 57 | 58 | ## 🚀 Deploy on Vercel 59 | 60 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new) from the creators of Next.js. 61 | 62 | Check out the [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 63 | 64 | 65 | ## 🤝 Contributing 66 | 67 | Contributions are welcome! Please feel free to submit a Pull Request. 68 | 69 | 1. Fork the project 70 | 2. Create your feature branch (`git checkout -b feature/AmazingFeature`) 71 | 3. Commit your changes (`git commit -m 'Add some AmazingFeature'`) 72 | 4. Push to the branch (`git push origin feature/AmazingFeature`) 73 | 5. Open a Pull Request 74 | 75 | 76 | ## 📜 License 77 | 78 | This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. 79 | 80 | 81 | ## ☕ Buy Me a Coffee 82 | If you enjoy using this project, consider supporting my work! 83 | [Buy Me a Coffee ☕](https://buymeacoffee.com/shreyas29) 84 | 85 | --- 86 | 87 | Built with ❤️ by [Shreyas Sihasane](https://shreyas-sihasane.vercel.app) 88 | -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vetra", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@hookform/resolvers": "^3.10.0", 13 | "@number-flow/react": "^0.5.5", 14 | "@radix-ui/react-accordion": "^1.2.2", 15 | "@radix-ui/react-alert-dialog": "^1.1.4", 16 | "@radix-ui/react-aspect-ratio": "^1.1.1", 17 | "@radix-ui/react-avatar": "^1.1.2", 18 | "@radix-ui/react-checkbox": "^1.1.3", 19 | "@radix-ui/react-collapsible": "^1.1.2", 20 | "@radix-ui/react-context-menu": "^2.2.4", 21 | "@radix-ui/react-dialog": "^1.1.4", 22 | "@radix-ui/react-dropdown-menu": "^2.1.4", 23 | "@radix-ui/react-hover-card": "^1.1.4", 24 | "@radix-ui/react-label": "^2.1.1", 25 | "@radix-ui/react-menubar": "^1.1.4", 26 | "@radix-ui/react-navigation-menu": "^1.2.3", 27 | "@radix-ui/react-popover": "^1.1.4", 28 | "@radix-ui/react-progress": "^1.1.1", 29 | "@radix-ui/react-radio-group": "^1.2.2", 30 | "@radix-ui/react-scroll-area": "^1.2.2", 31 | "@radix-ui/react-select": "^2.1.4", 32 | "@radix-ui/react-separator": "^1.1.1", 33 | "@radix-ui/react-slider": "^1.2.2", 34 | "@radix-ui/react-slot": "^1.1.1", 35 | "@radix-ui/react-switch": "^1.1.2", 36 | "@radix-ui/react-tabs": "^1.1.2", 37 | "@radix-ui/react-toast": "^1.2.4", 38 | "@radix-ui/react-toggle": "^1.1.1", 39 | "@radix-ui/react-toggle-group": "^1.1.1", 40 | "@radix-ui/react-tooltip": "^1.1.6", 41 | "class-variance-authority": "^0.7.1", 42 | "clsx": "^2.1.1", 43 | "cmdk": "1.0.0", 44 | "date-fns": "^4.1.0", 45 | "embla-carousel-react": "^8.5.2", 46 | "framer-motion": "^11.18.0", 47 | "input-otp": "^1.4.2", 48 | "lucide-react": "^0.471.1", 49 | "next": "15.1.4", 50 | "next-themes": "^0.4.4", 51 | "react": "^19.0.0", 52 | "react-day-picker": "8.10.1", 53 | "react-dom": "^19.0.0", 54 | "react-hook-form": "^7.54.2", 55 | "react-resizable-panels": "^2.1.7", 56 | "recharts": "^2.15.0", 57 | "sonner": "^1.7.2", 58 | "tailwind-merge": "^2.6.0", 59 | "tailwindcss-animate": "^1.0.7", 60 | "vaul": "^1.1.2", 61 | "zod": "^3.24.1" 62 | }, 63 | "devDependencies": { 64 | "@eslint/eslintrc": "^3", 65 | "@types/node": "^20", 66 | "@types/react": "^19", 67 | "@types/react-dom": "^19", 68 | "eslint": "^9", 69 | "eslint-config-next": "15.1.4", 70 | "postcss": "^8", 71 | "tailwindcss": "^3.4.1", 72 | "typescript": "^5" 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /public/fonts/Satoshi-Black.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shreyas-29/vetra/1b4d6614d4d7d523ea47ea64ab5ce0bd2b52b692/public/fonts/Satoshi-Black.woff2 -------------------------------------------------------------------------------- /public/fonts/Satoshi-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shreyas-29/vetra/1b4d6614d4d7d523ea47ea64ab5ce0bd2b52b692/public/fonts/Satoshi-Bold.woff2 -------------------------------------------------------------------------------- /public/fonts/Satoshi-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shreyas-29/vetra/1b4d6614d4d7d523ea47ea64ab5ce0bd2b52b692/public/fonts/Satoshi-Light.woff2 -------------------------------------------------------------------------------- /public/fonts/Satoshi-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shreyas-29/vetra/1b4d6614d4d7d523ea47ea64ab5ce0bd2b52b692/public/fonts/Satoshi-Medium.woff2 -------------------------------------------------------------------------------- /public/fonts/Satoshi-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shreyas-29/vetra/1b4d6614d4d7d523ea47ea64ab5ce0bd2b52b692/public/fonts/Satoshi-Regular.woff2 -------------------------------------------------------------------------------- /public/fonts/Satoshi-Variable.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shreyas-29/vetra/1b4d6614d4d7d523ea47ea64ab5ce0bd2b52b692/public/fonts/Satoshi-Variable.woff2 -------------------------------------------------------------------------------- /public/icons/icon-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shreyas-29/vetra/1b4d6614d4d7d523ea47ea64ab5ce0bd2b52b692/public/icons/icon-dark.png -------------------------------------------------------------------------------- /public/icons/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shreyas-29/vetra/1b4d6614d4d7d523ea47ea64ab5ce0bd2b52b692/public/icons/icon.png -------------------------------------------------------------------------------- /public/images/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shreyas-29/vetra/1b4d6614d4d7d523ea47ea64ab5ce0bd2b52b692/public/images/dashboard.png -------------------------------------------------------------------------------- /public/images/feature-five.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /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 |