first commit
This commit is contained in:
29
src/app/(site)/about/page.tsx
Normal file
29
src/app/(site)/about/page.tsx
Normal file
@@ -0,0 +1,29 @@
|
||||
|
||||
import React from "react";
|
||||
import HeroSub from "@/components/SharedComponent/HeroSub";
|
||||
import { Metadata } from "next";
|
||||
import Counter from "@/components/Home/Counter";
|
||||
import Progresswork from "@/components/Home/WorkProgress";
|
||||
export const metadata: Metadata = {
|
||||
title: "About | Venus",
|
||||
};
|
||||
|
||||
const page = () => {
|
||||
const breadcrumbLinks = [
|
||||
{ href: "/", text: "Home" },
|
||||
{ href: "/about", text: "About" },
|
||||
];
|
||||
return (
|
||||
<>
|
||||
<HeroSub
|
||||
title="About Us"
|
||||
description="Discover a wealth of insightful materials meticulously crafted to provide you with a comprehensive understanding of the latest trends."
|
||||
breadcrumbLinks={breadcrumbLinks}
|
||||
/>
|
||||
<Counter isColorMode={true} />
|
||||
<Progresswork isColorMode={true} />
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default page;
|
||||
22
src/app/(site)/blog/page.tsx
Normal file
22
src/app/(site)/blog/page.tsx
Normal file
@@ -0,0 +1,22 @@
|
||||
import React from 'react'
|
||||
import BlogList from '@/components/Blog/BlogList'
|
||||
import HeroSub from '@/components/SharedComponent/HeroSub'
|
||||
|
||||
const BlogPage = () => {
|
||||
const breadcrumbLinks = [
|
||||
{ href: '/', text: 'Home' },
|
||||
{ href: '/blog', text: 'Blog' },
|
||||
]
|
||||
return (
|
||||
<>
|
||||
<HeroSub
|
||||
title='Blog'
|
||||
description='Discover a wealth of insightful materials meticulously crafted to provide you with a comprehensive understanding of the latest trends.'
|
||||
breadcrumbLinks={breadcrumbLinks}
|
||||
/>
|
||||
<BlogList />
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default BlogPage
|
||||
30
src/app/(site)/contact/page.tsx
Normal file
30
src/app/(site)/contact/page.tsx
Normal file
@@ -0,0 +1,30 @@
|
||||
import ContactForm from "@/components/Contact/Form";
|
||||
import ContactInfo from "@/components/Contact/ContactInfo";
|
||||
import Location from "@/components/Contact/OfficeLocation";
|
||||
import React from "react";
|
||||
import HeroSub from "@/components/SharedComponent/HeroSub";
|
||||
import { Metadata } from "next";
|
||||
export const metadata: Metadata = {
|
||||
title: "Contact | Venus",
|
||||
};
|
||||
|
||||
const page = () => {
|
||||
const breadcrumbLinks = [
|
||||
{ href: "/", text: "Home" },
|
||||
{ href: "/contact", text: "Contact" },
|
||||
];
|
||||
return (
|
||||
<>
|
||||
<HeroSub
|
||||
title="Contact Us"
|
||||
description="Discover a wealth of insightful materials meticulously crafted to provide you with a comprehensive understanding of the latest trends."
|
||||
breadcrumbLinks={breadcrumbLinks}
|
||||
/>
|
||||
<ContactInfo />
|
||||
<ContactForm />
|
||||
<Location />
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default page;
|
||||
14
src/app/(site)/documentation/page.tsx
Normal file
14
src/app/(site)/documentation/page.tsx
Normal file
@@ -0,0 +1,14 @@
|
||||
|
||||
import { Documentation } from "@/components/Documentation/Documentation";
|
||||
import { Metadata } from "next";
|
||||
export const metadata: Metadata = {
|
||||
title: "Documentation | Venus",
|
||||
};
|
||||
|
||||
export default function Page() {
|
||||
return (
|
||||
<>
|
||||
<Documentation/>
|
||||
</>
|
||||
);
|
||||
};
|
||||
26
src/app/(site)/portfolio/page.tsx
Normal file
26
src/app/(site)/portfolio/page.tsx
Normal file
@@ -0,0 +1,26 @@
|
||||
import React from "react";
|
||||
import Portfolio from "@/components/portfolio/PortfolioList";
|
||||
import HeroSub from "@/components/SharedComponent/HeroSub";
|
||||
import { Metadata } from "next";
|
||||
export const metadata: Metadata = {
|
||||
title: "Portfolio | Venus",
|
||||
};
|
||||
|
||||
const PortfolioList = () => {
|
||||
const breadcrumbLinks = [
|
||||
{ href: "/", text: "Home" },
|
||||
{ href: "/portfolio", text: "Portfolio" },
|
||||
];
|
||||
return (
|
||||
<>
|
||||
<HeroSub
|
||||
title="Portfolio"
|
||||
description="Dive into a curated collection of my finest work, showcasing expertise across various industries."
|
||||
breadcrumbLinks={breadcrumbLinks}
|
||||
/>
|
||||
<Portfolio />
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default PortfolioList;
|
||||
29
src/app/(site)/services/page.tsx
Normal file
29
src/app/(site)/services/page.tsx
Normal file
@@ -0,0 +1,29 @@
|
||||
|
||||
import React from "react";
|
||||
import HeroSub from "@/components/SharedComponent/HeroSub";
|
||||
import { Metadata } from "next";
|
||||
import Counter from "@/components/Home/Counter";
|
||||
import Progresswork from "@/components/Home/WorkProgress";
|
||||
import Services from "@/components/Home/Services";
|
||||
export const metadata: Metadata = {
|
||||
title: "Services | Venus",
|
||||
};
|
||||
|
||||
const page = () => {
|
||||
const breadcrumbLinks = [
|
||||
{ href: "/", text: "Home" },
|
||||
{ href: "/services", text: "Services" },
|
||||
];
|
||||
return (
|
||||
<>
|
||||
<HeroSub
|
||||
title="Services"
|
||||
description="Discover a wealth of insightful materials meticulously crafted to provide you with a comprehensive understanding of the latest trends."
|
||||
breadcrumbLinks={breadcrumbLinks}
|
||||
/>
|
||||
<Services/>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default page;
|
||||
24
src/app/api/auth/[...nextauth]/route.ts
Normal file
24
src/app/api/auth/[...nextauth]/route.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
import NextAuth from "next-auth"
|
||||
import type { NextAuthOptions } from "next-auth"
|
||||
|
||||
// 基础配置,如需启用社交登录请配置对应的 providers
|
||||
// 参考: https://next-auth.js.org/providers/
|
||||
export const authOptions: NextAuthOptions = {
|
||||
providers: [
|
||||
// 示例:启用 Google 登录
|
||||
// GoogleProvider({
|
||||
// clientId: process.env.GOOGLE_CLIENT_ID!,
|
||||
// clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
|
||||
// }),
|
||||
// 示例:启用 GitHub 登录
|
||||
// GithubProvider({
|
||||
// clientId: process.env.GITHUB_ID!,
|
||||
// clientSecret: process.env.GITHUB_SECRET!,
|
||||
// }),
|
||||
],
|
||||
secret: process.env.NEXTAUTH_SECRET || "development-secret-change-in-production",
|
||||
}
|
||||
|
||||
const handler = NextAuth(authOptions)
|
||||
|
||||
export { handler as GET, handler as POST }
|
||||
13
src/app/api/contex/ToasetContex.tsx
Normal file
13
src/app/api/contex/ToasetContex.tsx
Normal file
@@ -0,0 +1,13 @@
|
||||
"use client";
|
||||
|
||||
import { Toaster } from "react-hot-toast";
|
||||
|
||||
const ToasterContext = () => {
|
||||
return (
|
||||
<div className="z-99999">
|
||||
<Toaster />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default ToasterContext;
|
||||
136
src/app/api/data.tsx
Normal file
136
src/app/api/data.tsx
Normal file
@@ -0,0 +1,136 @@
|
||||
import { getImgPath } from "@/utils/image";
|
||||
|
||||
export const menuItems = [
|
||||
{ name: "Home", href: "#home" },
|
||||
{ name: "About", href: "#about" },
|
||||
{ name: "Services", href: "#services" },
|
||||
{ name: "Portfolio", href: "#portfolio" },
|
||||
{ name: "Testimonials", href: "#testimonials" },
|
||||
{ name: "Blog", href: "/#blog" },
|
||||
];
|
||||
|
||||
export const count = [
|
||||
{
|
||||
icon: getImgPath("/images/counter/star.svg"),
|
||||
value: "4.86",
|
||||
description: "Out of 5 stars from 3896 reviews on Google platform",
|
||||
},
|
||||
{
|
||||
icon: getImgPath("/images/counter/admin.svg"),
|
||||
value: "364",
|
||||
description: "Client testimonials received in the year 2021",
|
||||
},
|
||||
{
|
||||
icon: getImgPath("/images/counter/bag.svg"),
|
||||
value: "45M+",
|
||||
description: "Revenue generated through new projects & marketing",
|
||||
},
|
||||
];
|
||||
|
||||
export const Progress = [
|
||||
{ title: 'UX Research and Testing', Progress: 95 },
|
||||
{ title: 'Product Management', Progress: 84 },
|
||||
{ title: 'UI & Visual Design', Progress: 90 }
|
||||
];
|
||||
|
||||
export const Servicebox = [
|
||||
{
|
||||
icon: getImgPath('/images/services/ux-design-product_1.svg'),
|
||||
title: 'UX & Product Design',
|
||||
description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
|
||||
},
|
||||
{
|
||||
icon: getImgPath('/images/services/perfomance-optimization.svg'),
|
||||
title: 'Performance Optimization',
|
||||
description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
|
||||
},
|
||||
{
|
||||
icon: getImgPath('/images/services/ux-design-product_2.svg'),
|
||||
title: 'UX & Products Design',
|
||||
description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
|
||||
},
|
||||
]
|
||||
|
||||
export const portfolioinfo = [
|
||||
{
|
||||
image: getImgPath('/images/portfolio/cozycasa.png'),
|
||||
alt: 'Portfolio',
|
||||
title: 'Cozycasa',
|
||||
slug: 'Cozycasa',
|
||||
info: 'Designation',
|
||||
Class: 'md:mt-0'
|
||||
},
|
||||
{
|
||||
image: getImgPath('/images/portfolio/mars.png'),
|
||||
alt: 'Portfolio',
|
||||
title: 'Mars',
|
||||
slug: 'Mars',
|
||||
info: 'Designation',
|
||||
Class: 'md:mt-24'
|
||||
},
|
||||
{
|
||||
image: getImgPath('/images/portfolio/humans.png'),
|
||||
alt: 'Portfolio',
|
||||
title: 'Everyday Humans',
|
||||
slug: 'everyday-humans',
|
||||
info: 'Designation',
|
||||
Class: 'md:mt-0'
|
||||
},
|
||||
{
|
||||
image: getImgPath('/images/portfolio/roket-squred.png'),
|
||||
alt: 'Portfolio',
|
||||
title: 'Rocket Squared',
|
||||
slug: 'rocket-squared',
|
||||
info: 'Designation',
|
||||
Class: 'md:mt-24'
|
||||
},
|
||||
{
|
||||
image: getImgPath('/images/portfolio/panda-logo.png'),
|
||||
alt: 'Portfolio',
|
||||
title: 'Panda Logo',
|
||||
slug: 'panda-logo',
|
||||
info: 'Designation',
|
||||
Class: 'md:mt-0'
|
||||
},
|
||||
{
|
||||
image: getImgPath('/images/portfolio/humans.png'),
|
||||
alt: 'Portfolio',
|
||||
title: 'Fusion Dynamics',
|
||||
slug: 'fusion-dynamics',
|
||||
info: 'Designation',
|
||||
Class: 'md:mt-0'
|
||||
},
|
||||
{
|
||||
image: getImgPath('/images/portfolio/cozycasa.png'),
|
||||
alt: 'Portfolio',
|
||||
title: 'InnovateX Ventures',
|
||||
slug: 'innovate-x-ventures',
|
||||
info: 'Designation',
|
||||
Class: 'md:mt-24'
|
||||
},
|
||||
{
|
||||
image: getImgPath('/images/portfolio/mars.png'),
|
||||
alt: 'Portfolio',
|
||||
title: 'Nebula Holdings',
|
||||
slug: 'nebula-holdings',
|
||||
info: 'Designation',
|
||||
Class: 'md:mt-0'
|
||||
},
|
||||
{
|
||||
image: getImgPath('/images/portfolio/panda-logo.png'),
|
||||
alt: 'Portfolio',
|
||||
title: 'Summit Partners',
|
||||
slug: 'summit-partners',
|
||||
info: 'Designation',
|
||||
Class: 'md:mt-24'
|
||||
},
|
||||
{
|
||||
image: getImgPath('/images/portfolio/roket-squred.png'),
|
||||
alt: 'Portfolio',
|
||||
title: 'Apex Strategies',
|
||||
slug: 'apex-strategies',
|
||||
info: 'Designation',
|
||||
Class: 'md:mt-0'
|
||||
},
|
||||
|
||||
]
|
||||
36
src/app/context/AuthDialogContext.tsx
Normal file
36
src/app/context/AuthDialogContext.tsx
Normal file
@@ -0,0 +1,36 @@
|
||||
"use client"
|
||||
|
||||
import React, { createContext, useState, ReactNode, Dispatch, SetStateAction } from "react";
|
||||
|
||||
// Define types for the context
|
||||
interface AuthDialogContextType {
|
||||
isSuccessDialogOpen: boolean;
|
||||
isFailedDialogOpen: boolean;
|
||||
isUserRegistered: boolean;
|
||||
setIsSuccessDialogOpen: Dispatch<SetStateAction<boolean>>;
|
||||
setIsFailedDialogOpen: Dispatch<SetStateAction<boolean>>;
|
||||
setIsUserRegistered: Dispatch<SetStateAction<boolean>>;
|
||||
}
|
||||
|
||||
// Create context with type or null
|
||||
export const AuthDialogContext = createContext<AuthDialogContextType | null>(null);
|
||||
|
||||
// Define the provider props type
|
||||
interface AuthDialogProviderProps {
|
||||
children: ReactNode;
|
||||
}
|
||||
|
||||
// Create a provider component
|
||||
export const AuthDialogProvider: React.FC<AuthDialogProviderProps> = ({ children }) => {
|
||||
const [isSuccessDialogOpen , setIsSuccessDialogOpen] = useState<boolean>(false);
|
||||
const [isFailedDialogOpen , setIsFailedDialogOpen] = useState<boolean>(false);
|
||||
const [isUserRegistered , setIsUserRegistered] = useState<boolean>(false);
|
||||
|
||||
return (
|
||||
<AuthDialogContext.Provider value={{ isSuccessDialogOpen ,isFailedDialogOpen, setIsSuccessDialogOpen, setIsFailedDialogOpen,isUserRegistered,setIsUserRegistered }}>
|
||||
{children}
|
||||
</AuthDialogContext.Provider>
|
||||
);
|
||||
};
|
||||
|
||||
export default AuthDialogContext;
|
||||
BIN
src/app/favicon.ico
Normal file
BIN
src/app/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
141
src/app/globals.css
Normal file
141
src/app/globals.css
Normal file
@@ -0,0 +1,141 @@
|
||||
@import 'tailwindcss';
|
||||
|
||||
@custom-variant dark (&:is(.dark *));
|
||||
|
||||
@theme {
|
||||
--spacing-6xl: 75rem;
|
||||
--container-screen-2xl: 83.75rem;
|
||||
|
||||
--shadow-service: 0px 3px 20px 0px #8e9ca90d;
|
||||
--shadow-deatail_shadow: 0px 20px 80px 0px #68758d26;
|
||||
--shadow-dark-md: rgba(145, 158, 171, 0.2) 0px 0px 2px 0px,
|
||||
rgba(145, 158, 171, 0.12) 0px 12px 24px -4px;
|
||||
|
||||
--transition-duration-150: 150ms;
|
||||
|
||||
--spacing-25: 25rem;
|
||||
--spacing-29: 28rem;
|
||||
--spacing-45: 45rem;
|
||||
--spacing-50: 50rem;
|
||||
--spacing-94: 22.5rem;
|
||||
--spacing-120: 120rem;
|
||||
--spacing-6_25: 6.25rem;
|
||||
--spacing-70\%: 70%;
|
||||
--spacing-40\%: 40%;
|
||||
--spacing-30\%: 30%;
|
||||
--spacing-60\%: 60%;
|
||||
--spacing-8_5: 8.5rem;
|
||||
--spacing-3_75: 3.75rem;
|
||||
|
||||
--height-150: 750px;
|
||||
--height-6_25: 6.25rem;
|
||||
|
||||
--leading-extra-loose: 2.5;
|
||||
--leading-2_5: 2.5rem;
|
||||
|
||||
--inset-5\%: 5%;
|
||||
--inset-35\%: 35%;
|
||||
|
||||
--z-index-1: 1;
|
||||
--z-index-2: 2;
|
||||
--z-index-999: 999;
|
||||
|
||||
--color-primary: #2f73f2;
|
||||
--color-secondary: #547593;
|
||||
--color-midnight_text: #102d47;
|
||||
--color-grey: #668199;
|
||||
--color-border: #ccd7e1;
|
||||
--color-success: #3cd278;
|
||||
--color-section: #f8fafc;
|
||||
--color-darkmode: #081738;
|
||||
--color-darklight: #000f30;
|
||||
--color-dark_border: #224767;
|
||||
--color-Sky-blue-mist: #c0d5fb;
|
||||
|
||||
--background-image-gradient-radial: radial-gradient(var(--tw-gradient-stops));
|
||||
--background-image-gradient-conic: conic-gradient(
|
||||
from 180deg at 50% 50%,
|
||||
var(--tw-gradient-stops)
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
The default border color has changed to `currentColor` in Tailwind CSS v4,
|
||||
so we've added these compatibility styles to make sure everything still
|
||||
looks the same as it did with Tailwind CSS v3.
|
||||
|
||||
If we ever want to remove these styles, we need to add an explicit border
|
||||
color utility to any element that depends on these defaults.
|
||||
*/
|
||||
@layer base {
|
||||
*,
|
||||
::after,
|
||||
::before,
|
||||
::backdrop,
|
||||
::file-selector-button {
|
||||
border-color: var(--color-gray-200, currentColor);
|
||||
}
|
||||
}
|
||||
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
body {
|
||||
@apply overflow-x-hidden;
|
||||
}
|
||||
|
||||
@layer base {
|
||||
section {
|
||||
@apply py-16;
|
||||
}
|
||||
}
|
||||
|
||||
.margin_top {
|
||||
@apply md:mt-[6.25rem] mt-0;
|
||||
}
|
||||
/* Slick Slider */
|
||||
.slick-slide,
|
||||
.portfolio_slide {
|
||||
@apply focus-visible:outline-0!;
|
||||
}
|
||||
.slick-dots li.slick-active button:before {
|
||||
@apply opacity-100! text-primary! w-4! h-4!;
|
||||
}
|
||||
.slick-dots li button:before {
|
||||
@apply text-base! text-[#BBC8D5]! opacity-100!;
|
||||
}
|
||||
|
||||
.blog-details p,
|
||||
.blog-details hr {
|
||||
@apply mb-8;
|
||||
}
|
||||
|
||||
.blog-details hr {
|
||||
@apply border-border dark:border-dark_border;
|
||||
}
|
||||
|
||||
.blog-details strong {
|
||||
@apply font-bold dark:text-white;
|
||||
}
|
||||
|
||||
.blog-details ul {
|
||||
@apply mb-8 list-inside list-disc space-y-3;
|
||||
}
|
||||
|
||||
.blog-details ol {
|
||||
@apply mb-8 list-inside list-decimal space-y-3;
|
||||
}
|
||||
|
||||
.blog-details h1 {
|
||||
@apply mb-8 text-3xl font-bold text-midnight_text dark:text-white sm:text-4xl md:text-[40px] md:leading-[1.28];
|
||||
}
|
||||
|
||||
.blog-details h2 {
|
||||
@apply mb-8 text-2xl font-bold text-midnight_text dark:text-white sm:text-3xl md:text-[35px] md:leading-[1.28];
|
||||
}
|
||||
|
||||
.blog-details h3 {
|
||||
@apply mb-6 text-2xl font-bold dark:text-white sm:text-[28px] sm:leading-[40px];
|
||||
}
|
||||
44
src/app/layout.tsx
Normal file
44
src/app/layout.tsx
Normal file
@@ -0,0 +1,44 @@
|
||||
import { Inter } from "next/font/google";
|
||||
import "./globals.css";
|
||||
import Header from "@/components/Layout/Header";
|
||||
import Footer from "@/components/Layout/Footer";
|
||||
import { ThemeProvider } from "next-themes";
|
||||
import ScrollToTop from '@/components/ScrollToTop';
|
||||
import Aoscompo from "@/utils/aos";
|
||||
import NextTopLoader from 'nextjs-toploader';
|
||||
import SessionProviderComp from "@/components/nextauth/SessionProvider";
|
||||
import { AuthDialogProvider } from "./context/AuthDialogContext";
|
||||
const inter = Inter({ subsets: ["latin"] });
|
||||
|
||||
|
||||
export default function RootLayout({
|
||||
children,
|
||||
session,
|
||||
}: Readonly<{
|
||||
children: React.ReactNode;
|
||||
session:any
|
||||
}>) {
|
||||
return (
|
||||
<html lang="en" suppressHydrationWarning>
|
||||
<body className={inter.className}>
|
||||
<NextTopLoader />
|
||||
<AuthDialogProvider>
|
||||
<SessionProviderComp session={session}>
|
||||
<ThemeProvider
|
||||
attribute="class"
|
||||
enableSystem={true}
|
||||
defaultTheme="system"
|
||||
>
|
||||
<Aoscompo>
|
||||
<Header />
|
||||
{children}
|
||||
<Footer />
|
||||
</Aoscompo>
|
||||
<ScrollToTop />
|
||||
</ThemeProvider>
|
||||
</SessionProviderComp>
|
||||
</AuthDialogProvider>
|
||||
</body>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
26
src/app/not-found.tsx
Normal file
26
src/app/not-found.tsx
Normal file
@@ -0,0 +1,26 @@
|
||||
import HeroSub from "@/components/SharedComponent/HeroSub";
|
||||
import NotFound from "@/components/NotFound";
|
||||
import { Metadata } from "next";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "404 Page | Venus ",
|
||||
};
|
||||
|
||||
const ErrorPage = () => {
|
||||
const breadcrumbLinks = [
|
||||
{ href: "/", text: "Home" },
|
||||
{ href: "/contact", text: "404" },
|
||||
];
|
||||
return (
|
||||
<>
|
||||
<HeroSub
|
||||
title="404"
|
||||
description="We Can't Seem to Find The Page You're Looking For."
|
||||
breadcrumbLinks={breadcrumbLinks}
|
||||
/>
|
||||
<NotFound />
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default ErrorPage;
|
||||
28
src/app/page.tsx
Normal file
28
src/app/page.tsx
Normal file
@@ -0,0 +1,28 @@
|
||||
import React from 'react'
|
||||
import { Metadata } from "next";
|
||||
import Hero from '@/components/Home/Hero';
|
||||
import Counter from '@/components/Home/Counter'
|
||||
import Progresswork from '@/components/Home/WorkProgress';
|
||||
import Services from '@/components/Home/Services';
|
||||
import Portfolio from '@/components/SharedComponent/portfollio'
|
||||
import Testimonial from '@/components/SharedComponent/Testimonial'
|
||||
import Blog from '@/components/SharedComponent/Blog'
|
||||
import Contactform from '@/components/Home/Contact';
|
||||
export const metadata: Metadata = {
|
||||
title: "Venus",
|
||||
};
|
||||
|
||||
export default function Home() {
|
||||
return (
|
||||
<main>
|
||||
<Hero />
|
||||
<Counter isColorMode={false} />
|
||||
<Progresswork isColorMode={false} />
|
||||
<Services />
|
||||
<Portfolio />
|
||||
<Testimonial />
|
||||
<Blog />
|
||||
<Contactform />
|
||||
</main>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user