├── .gitignore
├── README.md
├── app
├── contact
│ └── page.jsx
├── favicon.ico
├── globals.css
├── layout.jsx
├── page.jsx
├── projectdetails
│ └── page.jsx
├── projects
│ └── page.jsx
└── template.jsx
├── assets
├── arrow.svg
├── discord.svg
├── github.svg
├── icons
│ ├── appwrite.svg
│ ├── arrow.svg
│ ├── backend.png
│ ├── car.svg
│ ├── contact.svg
│ ├── cpp.png
│ ├── creator.png
│ ├── css.svg
│ ├── docker.svg
│ ├── estate.svg
│ ├── express.svg
│ ├── figma.svg
│ ├── git.svg
│ ├── github.png
│ ├── github.svg
│ ├── gql.png
│ ├── graphQL.svg
│ ├── html.svg
│ ├── index.js
│ ├── javascript.svg
│ ├── linkedin.svg
│ ├── mobile.png
│ ├── mongodb.svg
│ ├── motion.svg
│ ├── mui.svg
│ ├── nextjs.svg
│ ├── nodejs.svg
│ ├── pricewise.svg
│ ├── react.svg
│ ├── redis.png
│ ├── redis.svg
│ ├── redux.svg
│ ├── sass.png
│ ├── sass.svg
│ ├── shadcnui.svg
│ ├── snapgram.svg
│ ├── soundoff.png
│ ├── soundon.png
│ ├── summiz.svg
│ ├── tailwindcss.svg
│ ├── threads.svg
│ ├── threejs.svg
│ ├── twitter.svg
│ ├── typescript.svg
│ └── web.png
├── index.js
├── linkedin.svg
└── twitter.svg
├── components.json
├── components
├── About.jsx
├── Badge.jsx
├── Cta.jsx
├── DevImg.jsx
├── Footer.jsx
├── Form.jsx
├── Header.jsx
├── Hero.jsx
├── Logo.jsx
├── MobileNav.jsx
├── Nav.jsx
├── Poster.jsx
├── ProjectCard.jsx
├── Reviews.jsx
├── Socials.jsx
├── ThemeProvider.jsx
├── ThemeToggler.jsx
├── Work.jsx
└── ui
│ ├── Services.jsx
│ ├── badge.jsx
│ ├── button.jsx
│ ├── card.jsx
│ ├── form.jsx
│ ├── input.jsx
│ ├── label.jsx
│ ├── sheet.jsx
│ ├── tabs.jsx
│ └── textarea.jsx
├── constants
└── index.js
├── hooks
└── useScrollProgress.jsx
├── jsconfig.json
├── lib
└── utils.js
├── next-sanity-studio
├── .eslintrc
├── .gitignore
├── README.md
├── package-lock.json
├── package.json
├── sanity.cli.js
├── sanity.config.js
├── schemaTypes
│ └── index.js
└── static
│ └── .gitkeep
├── next.config.js
├── package-lock.json
├── package.json
├── postcss.config.js
├── public
├── about
│ ├── dev.png
│ ├── developer.png
│ ├── docker.svg
│ ├── figma.svg
│ ├── firebase.svg
│ ├── github.svg
│ ├── kubernetes.svg
│ ├── notion.svg
│ ├── redux.svg
│ ├── shape-dark.svg
│ ├── shape-light.svg
│ ├── terminal.svg
│ ├── vscode.svg
│ └── wordpress.svg
├── contact
│ ├── illustration-dark.svg
│ └── illustration-light.svg
├── cta
│ ├── wave.png
│ └── wave.svg
├── cv.pdf
├── dots-dark.svg
├── dots-light.svg
├── hero
│ ├── dev.png
│ ├── dev1.png
│ ├── developer.png
│ ├── hero-bg.png
│ ├── shape-1.svg
│ ├── shape-2-dark.svg
│ └── shape-2-light.svg
├── logo.svg
├── next.svg
├── reviews
│ ├── avatar-1.png
│ ├── avatar-2.png
│ ├── avatar-3.png
│ ├── avatar-4.png
│ ├── avatar-5.png
│ └── avatar-6.png
├── vercel.svg
└── work
│ ├── 1.png
│ ├── 2.png
│ ├── 3.png
│ ├── 4.png
│ ├── 5.png
│ ├── 6.png
│ ├── project-bg-dark.png
│ └── project-bg-light.png
└── tailwind.config.js
/.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.js
7 | .yarn/install-state.gz
8 |
9 | # testing
10 | /coverage
11 |
12 | # next.js
13 | /.next/
14 | /out/
15 |
16 | # production
17 | /build
18 |
19 | # misc
20 | .DS_Store
21 | *.pem
22 |
23 | # debug
24 | npm-debug.log*
25 | yarn-debug.log*
26 | yarn-error.log*
27 |
28 | # local env files
29 | .env*.local
30 |
31 | # vercel
32 | .vercel
33 |
34 | # typescript
35 | *.tsbuildinfo
36 | next-env.d.ts
37 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
2 |
3 | ## Screenshots
4 |
5 | 
6 | 
7 | 
8 |
9 | ## Getting Started
10 |
11 | First, run the development server:
12 |
13 |
14 | npm run dev
15 | # or
16 | yarn dev
17 | # or
18 | pnpm dev
19 | # or
20 | bun dev
21 | ```
22 |
23 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
24 |
25 | You can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.
26 |
27 | This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
28 |
29 | ## Learn More
30 |
31 | To learn more about Next.js, take a look at the following resources:
32 |
33 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
34 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
35 |
36 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
37 |
38 | ## Deploy on Vercel
39 |
40 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
41 |
42 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
43 |
--------------------------------------------------------------------------------
/app/contact/page.jsx:
--------------------------------------------------------------------------------
1 | import { MailIcon, HomeIcon, PhoneCall } from "lucide-react";
2 | import Form from "@/components/Form";
3 |
4 | const Contact = () => {
5 | return (
6 |
7 |
8 |
9 | {/* Text & Illustration */}
10 |
11 | {/* text */}
12 |
13 |
14 |
15 | Say Hello 👋
16 |
17 |
Lets's Work Together.
18 |
19 | I’m always open to new opportunities and collaborations. Contact me via email, phone, or social media. I look forward to hearing from you soon. 😊
20 |
21 |
22 | {/* illustration */}
23 |
24 |
25 | {/* info text & form */}
26 |
27 | {/* info text */}
28 |
29 | {/* mail */}
30 |
31 |
32 |
vakilverma1982@gmail.com
33 |
34 | {/* address */}
35 |
36 |
37 |
38 | Warur Road, Near Talathi office , Tehsil rajura , Dist
39 | chandrapur
40 |
41 |
42 | {/* phone */}
43 |
44 |
45 |
+91 951 187 2298
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 | );
54 | };
55 |
56 | export default Contact;
57 |
--------------------------------------------------------------------------------
/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/app/favicon.ico
--------------------------------------------------------------------------------
/app/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 |
6 | /* to remove scrollbar */
7 | body::-webkit-scrollbar {
8 | display: none;
9 | }
10 |
11 | @layer base {
12 |
13 | @layer base {
14 | :root {
15 | --background: 0 0% 100%;
16 | --foreground: 240 19% 16%;
17 | --card: 0 0% 100%;
18 | --card-foreground: 240 19% 16%;
19 | --popover: 0 0% 100%;
20 | --popover-foreground: 240 10% 3.9%;
21 | --primary: 8 99% 67%;
22 | --primary-foreground: 300 0% 100%;
23 | --secondary: 240 19% 16%;
24 | --secondary-foreground: 300 0% 100%;
25 | --tertiary: 27 82% 98%;
26 | --muted: 240 4.8% 95.9%;
27 | --muted-foreground: 237 13% 40%;
28 | --accent: 237 9% 96%;
29 | --accent-foreground: 240 5.9% 10%;
30 | --destructive: 0 84.2% 60.2%;
31 | --destructive-foreground: 0 0% 98%;
32 | --border: 8 82% 92%;
33 | --input: 8 82% 92%;
34 | --ring: 9 99% 67%;
35 | --radius: 0.5rem;
36 | }
37 |
38 | .dark {
39 | --background: 237 22% 28%;
40 | --foreground: 60 9.1% 97.8%;
41 | --card: 240 19% 16%;
42 | --card-foreground:300 0% 100%;
43 | --popover: 20 14.3% 4.1%;
44 | --popover-foreground: 60 9.1% 97.8%;
45 | --primary: 8 99% 67%;
46 | --primary-foreground: 300 0% 100%;
47 | --secondary: 240 19% 16%;
48 | --secondary-foreground: 300 0% 100%;
49 | --tertiary: 237 22% 20%;
50 | --muted: 12 6.5% 15.1%;
51 | --muted-foreground: 237 13% 63%;
52 | --accent: 240 19% 16%;
53 | --accent-foreground:300 0% 100%;
54 | --destructive: 0 72.2% 50.6%;
55 | --destructive-foreground: 60 9.1% 97.8%;
56 | --border: 237 22% 20%;
57 | --input: 237 22% 20%;
58 | --ring: 8 99% 67%;
59 | }
60 | }
61 |
62 | }
63 | @layer base {
64 | * {
65 | @apply border-border;
66 | }
67 | body {
68 | @apply bg-background text-foreground;
69 | }
70 | }
71 |
72 | .h1{
73 | @apply text-6xl xl:text-[72px] xl:leading-[80px] tracking-[-2px] font-bold;
74 | }
75 |
76 | .h2 {
77 | @apply text-2xl font-bold;
78 | }
79 | .h3 {
80 | @apply text-3xl font-bold;
81 | }
82 |
83 | .h4 {
84 | @apply text-4xl font-semibold;
85 | }
86 |
87 | .subtitle {
88 | @apply text-muted-foreground text-lg mb-8 font-light text-center xl:text-left;
89 | }
90 |
91 | .section-title {
92 | @apply text-4xl font-bold relative w-max flex items-center justify-between gap-x-3 before:bg-dots_light before:dark:bg-dots_dark before:bg-no-repeat before:bg-center before:w-[24px] before:h-[24px];
93 | }
94 |
95 | .badge {
96 | @apply z-10 w-[200px] h-[68px] bg-white dark:backdrop-blur-[44px] shadow-2xl p-4 rounded-[10px] flex items-center gap-x-4 ;
97 | }
98 |
99 | /* swiper bullets styles */
100 | .swiper-horizontal > .section-pagination-bullets .swiper-pagination-bullet,
101 | .swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet {
102 | @apply bg-primary;
103 | }
--------------------------------------------------------------------------------
/app/layout.jsx:
--------------------------------------------------------------------------------
1 | import { Outfit } from "next/font/google";
2 | import "./globals.css";
3 |
4 | // components
5 | import Header from "@/components/Header";
6 | import Footer from "@/components/Footer";
7 | // ThemeProvider
8 | import { ThemeProvider } from "@/components/ThemeProvider";
9 |
10 | const outfit = Outfit({ subsets: ["latin"] });
11 |
12 | export const metadata = {
13 | title: "Portfolio",
14 | description: "Generated by create next app",
15 | };
16 |
17 | export default function RootLayout({ children }) {
18 | return (
19 |
20 |
21 |
22 |
23 | {children}
24 |
25 |
26 |
27 |
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/app/page.jsx:
--------------------------------------------------------------------------------
1 | //Components
2 | import Hero from "@/components/Hero";
3 | import About from "@/components/About";
4 | import Services from "@/components/ui/Services";
5 | import Work from "@/components/Work";
6 | import Reviews from "@/components/Reviews";
7 | import Cta from "@/components/Cta";
8 |
9 | export default function Home() {
10 | return (
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | );
21 | }
22 |
--------------------------------------------------------------------------------
/app/projectdetails/page.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | const projectDetailsPage = () => {
4 | return (
5 | DetailsPage
6 | )
7 | }
8 |
9 | export default projectDetailsPage;
--------------------------------------------------------------------------------
/app/projects/page.jsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import React, { useState } from "react";
3 | import { Tabs, TabsList, TabsContent, TabsTrigger } from "@/components/ui/tabs";
4 | import ProjectCard from "@/components/ProjectCard";
5 |
6 | const projectData = [
7 | {
8 | image: "/work/3.png",
9 | category: "react js",
10 | name: "Amazon clone",
11 | description:
12 | "Amazon Clone made with react , tailwind, javascript and redux",
13 | link: "https://amazon-clone-ten-lemon.vercel.app/",
14 | github: "https://github.com/premvarma2002/amazon-clone",
15 | },
16 | {
17 | image: "/work/1.png",
18 | category: "react js",
19 | name: "Homeland ",
20 | description:
21 | "A real estate rental website made with react, tailwind & javascript.",
22 | link: "https://beautiful-homeland.netlify.app/",
23 | github: "https://github.com/premvarma2002/Real-Estate",
24 | },
25 | {
26 | image: "/work/2.png",
27 | category: "Html CSS",
28 | name: "Lumina Website",
29 | description:
30 | "Lorem ipsum, dolor sit amet consectetur a necessitatibus eveniet est tenetur quisquam dolore",
31 | link: "/",
32 | github: "/",
33 | },
34 | {
35 | image: "/work/2.png",
36 | category: "Html CSS",
37 | name: "Evolve Website",
38 | description:
39 | "Lorem ipsum, dolor sit amet consectetur a necessitatibus eveniet est tenetur quisquam dolore",
40 | link: "/",
41 | github: "/",
42 | },
43 | {
44 | image: "/work/4.png",
45 | category: "react js",
46 | name: "Ignite Website",
47 | description:
48 | "Lorem ipsum, dolor sit amet consectetur a necessitatibus eveniet est tenetur quisquam dolore",
49 | link: "/",
50 | github: "/",
51 | },
52 | {
53 | image: "/work/4.png",
54 | category: "next js",
55 | name: "Envision Website",
56 | description:
57 | "Lorem ipsum, dolor sit amet consectetur a necessitatibus eveniet est tenetur quisquam dolore",
58 | link: "/",
59 | github: "/",
60 | },
61 | {
62 | image: "/work/4.png",
63 | category: "next js",
64 | name: "Envision Website",
65 | description:
66 | "Lorem ipsum, dolor sit amet consectetur a necessitatibus eveniet est tenetur quisquam dolore",
67 | link: "/",
68 | github: "/",
69 | },
70 | ];
71 |
72 | // remove category duplicates
73 | const uniqueCategories = [
74 | "all projects",
75 | ...new Set(projectData.map((item) => item.category)),
76 | ];
77 |
78 | const Projects = () => {
79 | const [categories, setCategories] = useState(uniqueCategories);
80 | const [category, setCategory] = useState("all projects");
81 |
82 | const filteredProjects = projectData.filter((project) => {
83 | // if category is all projects then return all projects , else filter by category.
84 | return category === "all projects"
85 | ? project
86 | : project.category === category;
87 | });
88 |
89 | return (
90 |
91 |
92 |
93 | My Projects
94 |
95 | {/* tabs */}
96 |
97 |
98 | {categories.map((category, index) => {
99 | return (
100 | setCategory(category)}
102 | value={category}
103 | key={index}
104 | className="capitalize w-[162px] md:w-auto"
105 | >
106 | {category}
107 |
108 | );
109 | })}
110 |
111 | {/* tabs content */}
112 |
113 | {filteredProjects.map((project, index) => {
114 | return (
115 |
116 |
117 |
118 | );
119 | })}
120 |
121 |
122 |
123 |
124 | );
125 | };
126 |
127 | export default Projects;
128 |
--------------------------------------------------------------------------------
/app/template.jsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import { motion } from 'framer-motion'
4 | // hooks
5 | import useScrollProgress from '@/hooks/useScrollProgress'
6 | // variants
7 | const variants = {
8 | hidden: { opacity: 0 },
9 | enter: { opacity: 1 }
10 | }
11 |
12 | const Template = ({ children }) => {
13 | const completion = useScrollProgress();
14 | return (
15 | <>
16 |
22 | {children}
23 |
24 | {/* {completion bar} */}
25 |
26 | {/*
*/}
27 | >
28 | )
29 | }
30 |
31 | export default Template
--------------------------------------------------------------------------------
/assets/arrow.svg:
--------------------------------------------------------------------------------
1 |
3 |
4 |
--------------------------------------------------------------------------------
/assets/discord.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/assets/github.svg:
--------------------------------------------------------------------------------
1 | github [#142] Created with Sketch.
--------------------------------------------------------------------------------
/assets/icons/appwrite.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
8 |
9 |
10 |
17 |
18 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/assets/icons/arrow.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/assets/icons/backend.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/assets/icons/backend.png
--------------------------------------------------------------------------------
/assets/icons/car.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/assets/icons/contact.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/assets/icons/cpp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/assets/icons/cpp.png
--------------------------------------------------------------------------------
/assets/icons/creator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/assets/icons/creator.png
--------------------------------------------------------------------------------
/assets/icons/css.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/assets/icons/docker.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/estate.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/assets/icons/express.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/assets/icons/figma.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/git.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/assets/icons/github.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/assets/icons/github.png
--------------------------------------------------------------------------------
/assets/icons/github.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/assets/icons/gql.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/assets/icons/gql.png
--------------------------------------------------------------------------------
/assets/icons/graphQL.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/html.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/assets/icons/index.js:
--------------------------------------------------------------------------------
1 | import css from './css.svg'
2 | import appwrite from './appwrite.svg'
3 | import git from './git.svg'
4 | import html from './html.svg'
5 | import javascript from './javascript.svg'
6 | import cpp from './cpp.png'
7 | import motion from './motion.svg'
8 | import mui from './mui.svg'
9 | import nextjs from './nextjs.svg'
10 | import nodejs from './nodejs.svg'
11 | import react from './react.svg'
12 | import redux from './redux.svg'
13 | import sass from './sass.svg'
14 | import tailwindcss from './tailwindcss.svg'
15 | import typescript from './typescript.svg'
16 | import car from './car.svg'
17 | import estate from './estate.svg'
18 | import pricewise from './pricewise.svg'
19 | import snapgram from './snapgram.svg'
20 | import summiz from './summiz.svg'
21 | import threads from './threads.svg'
22 | import arrow from './arrow.svg'
23 | import contact from './contact.svg'
24 | import soundon from './soundon.png'
25 | import soundoff from './soundoff.png'
26 | import figma from './figma.svg'
27 | import shadcn from './shadcnui.svg'
28 | import graphQL from './graphQL.svg'
29 | import threejs from './threejs.svg'
30 | import docker from './docker.svg'
31 | import redis from './redis.svg'
32 |
33 | export {
34 | css,
35 | appwrite,
36 | git,
37 | html,
38 | javascript,
39 | cpp,
40 | motion,
41 | mui,
42 | nextjs,
43 | nodejs,
44 | react,
45 | redux,
46 | sass,
47 | tailwindcss,
48 | typescript,
49 | figma,
50 | shadcn,
51 | graphQL,
52 | threejs,
53 | car,
54 | estate,
55 | pricewise,
56 | snapgram,
57 | summiz,
58 | threads,
59 | arrow,
60 | contact,
61 | soundon,
62 | soundoff,
63 | docker,
64 | redis
65 |
66 |
67 | }
--------------------------------------------------------------------------------
/assets/icons/javascript.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/assets/icons/linkedin.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/assets/icons/mobile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/assets/icons/mobile.png
--------------------------------------------------------------------------------
/assets/icons/mongodb.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/assets/icons/motion.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/assets/icons/mui.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/assets/icons/nextjs.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/assets/icons/nodejs.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/assets/icons/pricewise.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/assets/icons/react.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/redis.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/assets/icons/redis.png
--------------------------------------------------------------------------------
/assets/icons/redis.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/redux.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/assets/icons/sass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/assets/icons/sass.png
--------------------------------------------------------------------------------
/assets/icons/sass.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/assets/icons/shadcnui.svg:
--------------------------------------------------------------------------------
1 | shadcn/ui
--------------------------------------------------------------------------------
/assets/icons/snapgram.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/assets/icons/soundoff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/assets/icons/soundoff.png
--------------------------------------------------------------------------------
/assets/icons/soundon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/assets/icons/soundon.png
--------------------------------------------------------------------------------
/assets/icons/summiz.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/assets/icons/tailwindcss.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/assets/icons/threads.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/assets/icons/threejs.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/assets/icons/twitter.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/typescript.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/assets/icons/web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/assets/icons/web.png
--------------------------------------------------------------------------------
/assets/index.js:
--------------------------------------------------------------------------------
1 | import github from './github.svg';
2 | import twitter from './twitter.svg';
3 | import linkedin from './linkedin.svg';
4 | import discord from './discord.svg';
5 | import arrowicon from './arrow.svg'
6 |
7 |
8 | export { github,twitter,linkedin,discord,arrowicon };
--------------------------------------------------------------------------------
/assets/linkedin.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/assets/twitter.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/components.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://ui.shadcn.com/schema.json",
3 | "style": "default",
4 | "rsc": true,
5 | "tsx": false,
6 | "tailwind": {
7 | "config": "tailwind.config.js",
8 | "css": "app/globals.css",
9 | "baseColor": "slate",
10 | "cssVariables": true
11 | },
12 | "aliases": {
13 | "components": "@/components",
14 | "utils": "@/lib/utils"
15 | }
16 | }
--------------------------------------------------------------------------------
/components/About.jsx:
--------------------------------------------------------------------------------
1 | import DevImg from "./DevImg";
2 | import Image from "next/image";
3 | import { skills } from "@/constants";
4 | import { Tabs, TabsContent, TabsList, TabsTrigger } from "./ui/tabs";
5 | import {Button, Tooltip } from '@nextui-org/react';
6 |
7 | import {
8 | User2,
9 | MailIcon,
10 | HomeIcon,
11 | PhoneCall,
12 | GraduationCap,
13 | Calendar,
14 | Briefcase,
15 | } from "lucide-react";
16 |
17 | const infoData = [
18 | {
19 | icon: ,
20 | text: "Prem Varma",
21 | },
22 | {
23 | icon: ,
24 | text: "+91 9511 872 298",
25 | },
26 | {
27 | icon: ,
28 | text: "vakilverma1982@gmail.com",
29 | },
30 | {
31 | icon: ,
32 | text: "Born on 18th Sep , 2002",
33 | },
34 | {
35 | icon: ,
36 | text: "Master on Computer Applications",
37 | },
38 | {
39 | icon: ,
40 | text: " Rajura ,Maharashtra , India ",
41 | },
42 | ];
43 |
44 | const qualificationData = [
45 | {
46 | title: "education",
47 | data: [
48 | {
49 | university: "The New Era English High School ,Rajura",
50 | qualification: "S.S.C",
51 | years: "2008 - 2018",
52 | },
53 | {
54 | university: "Guru nanak college of science , Ballarpur",
55 | qualification: "H.S.C",
56 | years: "2018 - 2020",
57 | },
58 | {
59 | university: "Guru nanak College of Science",
60 | qualification: "B.SC Computer Science",
61 | years: "2020 - 2023",
62 | },
63 | // {
64 | // university: "LPU University",
65 | // qualification: "Master of Computer Applications",
66 | // years: "2024 - Present",
67 | // },
68 | // {
69 | // university: 'IIT Patna',
70 | // qualification: 'M.Tech in Cloud Computing',
71 | // years:'2026- 2028',
72 | // },
73 | ],
74 | },
75 |
76 | {
77 | title: "experience",
78 | data: [
79 | {
80 | company: "Upwork",
81 | role: "Freelance Web developer",
82 | years: "2022 - Present",
83 | },
84 |
85 | {
86 | company: "Codewoofer.in",
87 | role: "Blogger",
88 | years: "Jul 2023 - Sep 2023 ",
89 | },
90 | {
91 | company: "InternPe",
92 | role: "Web Development intern",
93 | years: "Apr 2023 - Jun 2023",
94 | },
95 | ],
96 | },
97 | ];
98 |
99 | const skillData = [
100 | {
101 | title: "skills",
102 | data: [
103 | {
104 | name: "HTML , CSS, JavaScript ",
105 | },
106 | {
107 | name: "React , Next , Bootstrap",
108 | },
109 | {
110 | name: "Typescript ,Tailwind , Sass CSS ",
111 | },
112 | {
113 | name: "Redux, MUI , shadcn-UI, Prisma ",
114 | },
115 | ],
116 | },
117 | {
118 | title: "tools",
119 | data: [
120 | {
121 | imgPath: "/about/vscode.svg",
122 | },
123 | {
124 | imgPath: "/about/docker.svg",
125 | },
126 | {
127 | imgPath: "/about/firebase.svg",
128 | },
129 | ],
130 | },
131 | ];
132 |
133 | const About = () => {
134 | const getData = (arr, title) => {
135 | return arr.find((item) => item.title === title);
136 | };
137 | // console.log(getData(qualificationData , 'experience'))
138 | return (
139 |
140 |
141 |
142 | About me
143 |
144 |
145 | {/* image */}
146 |
147 |
151 |
152 | {/* tabs */}
153 |
154 |
155 |
156 |
157 | Personal Info
158 |
159 |
163 | Qualifications
164 |
165 |
166 | Skills
167 |
168 |
169 | {/* tabs content */}
170 |
171 | {/* personal */}
172 |
173 |
174 |
175 | Unmatched Service Quality for Over 2 years
176 |
177 |
178 | I specialize in crafting intuitive websites with
179 | cutting-edge technology, delivering dynamic and engaging
180 | user experiences
181 |
182 | {/* icons */}
183 |
184 | {infoData.map((item, index) => {
185 | return (
186 |
190 |
{item.icon}
191 |
{item.text}
192 |
193 | );
194 | })}
195 |
196 | {/* languages */}
197 |
198 |
Languages Skill
199 |
200 | English , German , Hindi , Marathi
201 |
202 |
203 |
204 |
205 | {/* qualifications */}
206 |
207 |
208 |
209 | My Awesome Journey
210 |
211 | {/* experience and education wrapper */}
212 |
213 | {/* experience */}
214 |
215 |
216 |
217 |
218 | {getData(qualificationData, "experience").title}
219 |
220 |
221 | {/* list */}
222 |
223 | {getData(qualificationData, "experience").data.map(
224 | (item, index) => {
225 | const { company, role, years } = item;
226 | return (
227 |
228 |
231 |
232 |
233 | {company}
234 |
235 |
236 | {role}
237 |
238 |
239 | {years}
240 |
241 |
242 |
243 | );
244 | }
245 | )}
246 |
247 |
248 | {/* education */}
249 |
250 |
251 |
252 |
253 | {getData(qualificationData, "education").title}
254 |
255 |
256 | {/* list */}
257 |
258 | {getData(qualificationData, "education").data.map(
259 | (item, index) => {
260 | const { university, qualification, years } = item;
261 | return (
262 |
263 |
266 |
267 |
268 | {university}
269 |
270 |
271 | {qualification}
272 |
273 |
274 | {years}
275 |
276 |
277 |
278 | );
279 | }
280 | )}
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
What I Use Everyday
289 | {/* skills */}
290 |
291 |
292 | {/* Skill List */}
293 |
294 |
295 | {skills.map((skills) => (
296 |
297 |
298 |
299 |
300 |
306 |
307 |
308 |
309 |
310 |
311 | ))}
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 | );
324 | };
325 |
326 | export default About;
327 |
--------------------------------------------------------------------------------
/components/Badge.jsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import CountUp from "react-countup";
3 |
4 | const Badge = ({
5 | containerStyles,
6 | icon,
7 | endCountNum,
8 | endCountText,
9 | badgeText,
10 | }) => {
11 | return (
12 |
13 |
{icon}
14 |
15 |
16 |
17 | {endCountText}
18 |
19 |
20 | {badgeText}
21 |
22 |
23 |
24 | );
25 | };
26 |
27 | export default Badge;
28 |
--------------------------------------------------------------------------------
/components/Cta.jsx:
--------------------------------------------------------------------------------
1 | import { Button } from "./ui/button";
2 | import Link from "next/link";
3 |
4 | const Cta = () => {
5 | return (
6 |
7 |
8 |
9 |
10 | Prepared to turn your ideas into reality? I'm here to help
11 |
12 |
13 | Contact me
14 |
15 |
16 |
17 |
18 | );
19 | };
20 |
21 | export default Cta;
22 |
--------------------------------------------------------------------------------
/components/DevImg.jsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 |
3 | const DevImg = ({ containerStyles, imgSrc }) => {
4 | return (
5 |
6 |
7 |
8 | );
9 | };
10 |
11 | export default DevImg;
12 |
--------------------------------------------------------------------------------
/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import Socials from "./Socials";
2 |
3 | const footer = () => {
4 | return (
5 |
6 |
7 |
8 | {/* socials */}
9 |
13 | {/* Copyright */}
14 |
15 | Copyright © Prem Varma. All rights reserved.
16 |
17 |
18 |
19 |
20 | );
21 | };
22 | export default footer;
23 |
--------------------------------------------------------------------------------
/components/Form.jsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { Button } from "./ui/button";
4 | import { Input } from "./ui/input";
5 | import { Textarea } from "./ui/textarea";
6 | import { User, MailIcon, ArrowRightIcon, MessageSquare } from "lucide-react";
7 | const Form = () => {
8 | return (
9 | // Now using formspree here .. before i used getform.io ( please dont copy my form action link.. it wont work for you)
10 |
38 | );
39 | };
40 |
41 | export default Form;
42 |
--------------------------------------------------------------------------------
/components/Header.jsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { useState, useEffect } from "react";
4 | // components
5 | import ThemeToggler from "./ThemeToggler";
6 | import Logo from "./Logo";
7 | import Nav from "./Nav";
8 | import MobileNav from "./MobileNav";
9 | import { usePathname } from "next/navigation";
10 |
11 | const header = () => {
12 | const [header, setHeader] = useState(false);
13 | const pathname = usePathname();
14 |
15 | useEffect(() => {
16 | const scrollYPos = window.addEventListener("scroll", () => {
17 | window.scrollY > 50 ? setHeader(true) : setHeader(false);
18 | });
19 |
20 | // remove event
21 | return () => window.removeEventListener("scroll", scrollYPos);
22 | });
23 |
24 | return (
25 |
32 |
33 |
34 |
35 |
36 | {/* {nav} */}
37 |
42 |
43 | {/* {mobile nav} */}
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | );
52 | };
53 |
54 | export default header;
55 |
--------------------------------------------------------------------------------
/components/Hero.jsx:
--------------------------------------------------------------------------------
1 | import Link from "next/link";
2 | import { Button } from "./ui/button";
3 | import { Download, Send } from "lucide-react";
4 |
5 | import {
6 | RiBriefcase4Fill,
7 | RiTeamFill,
8 | RiTodoFill,
9 | RiArrowDownSLine,
10 | } from "react-icons/ri";
11 |
12 | // Components
13 | import DevImg from "./DevImg";
14 | import Badge from "./Badge";
15 | import Socials from "./Socials";
16 |
17 | const Hero = () => {
18 | return (
19 |
20 |
21 |
22 | {/* text */}
23 |
24 |
25 | Frontend Developer
26 |
27 |
Hello , my name is Prem Varma
28 |
29 | Brief description with insights into myself, my vocational
30 | journey, and what I engage in professionally.
31 |
32 | {/* buttons */}
33 |
46 | {/* socials */}
47 |
51 |
52 | {/* image */}
53 |
54 | {/* badge */}
55 |
}
58 | endCountNum={2}
59 | badgeText="Years Of Experience"
60 | />
61 | {/* badge 2 */}
62 |
}
65 | endCountNum={18}
66 | // endCountText={'k'}
67 | badgeText="Finished Projects"
68 | />
69 | {/* badge 3 */}
70 |
}
73 | endCountNum={23}
74 | // endCountText={'k'}
75 | badgeText="Happy Clients"
76 | />
77 |
78 |
82 |
83 |
84 | {/* icon */}
85 |
86 |
87 |
88 |
89 |
90 | );
91 | };
92 |
93 | export default Hero;
94 |
--------------------------------------------------------------------------------
/components/Logo.jsx:
--------------------------------------------------------------------------------
1 | import Link from "next/link";
2 | import Image from "next/image";
3 |
4 | const logo = () => {
5 | return (
6 |
7 | {/* */}
8 |
9 | Prem.
10 |
11 |
12 | );
13 | };
14 |
15 | export default logo;
16 |
--------------------------------------------------------------------------------
/components/MobileNav.jsx:
--------------------------------------------------------------------------------
1 | import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet";
2 | import { AlignJustify } from "lucide-react";
3 |
4 | import Nav from "./Nav";
5 | import Logo from "./Logo";
6 | import Socials from "./Socials";
7 |
8 | const MobileNav = () => {
9 |
10 | return (
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | );
30 | };
31 |
32 | export default MobileNav;
33 |
--------------------------------------------------------------------------------
/components/Nav.jsx:
--------------------------------------------------------------------------------
1 | // link (nextjs)
2 | import Link from "next/link";
3 |
4 | // next hooks
5 | import { usePathname } from "next/navigation";
6 |
7 | // framer motion
8 | import { motion } from "framer-motion";
9 | const links = [
10 | { path: "/", name: "home" },
11 | { path: "/projects", name: "my projects" },
12 | { path: "/contact", name: "contact" },
13 | ];
14 |
15 | const Nav = ({ containerStyles, linkStyles, underlineStyles ,closeSheet}) => {
16 | const handleClick = () => {
17 | closeSheet(); // Close the sheet when a link is clicked
18 | };
19 |
20 | const path = usePathname();
21 | return (
22 |
23 | {links.map((link, index) => {
24 | return (
25 |
30 | {link.path === path && (
31 |
38 | )}
39 | {link.name}
40 |
41 | );
42 | })}
43 |
44 | );
45 | };
46 |
47 | export default Nav;
48 |
--------------------------------------------------------------------------------
/components/Poster.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | const Poster = () => {
4 | return (
5 | Poster
6 | )
7 | }
8 |
9 | export default Poster
--------------------------------------------------------------------------------
/components/ProjectCard.jsx:
--------------------------------------------------------------------------------
1 | import Link from "next/link";
2 | import Image from "next/image";
3 | import { Card, CardHeader } from "./ui/card";
4 | import { useRouter } from 'next/navigation';
5 | import { Github, Link2Icon } from "lucide-react";
6 | import { Badge } from "./ui/badge";
7 |
8 | const ProjectCard = ({ project }) => {
9 | const router = useRouter();
10 |
11 | // Create onClick handler for whole card
12 | // const handleCardClick = () => {
13 | // router.push(`/projectdetails/${project.id}`); // Use ID for unique routing
14 | // };
15 |
16 | return (
17 |
18 |
19 | {/* image */}
20 |
21 |
29 | {/* btn links */}
30 |
31 |
36 |
37 |
38 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 | {project.category}
51 |
52 |
{project.name}
53 |
{project.description}
54 |
55 |
56 | );
57 | };
58 |
59 | export default ProjectCard;
60 |
--------------------------------------------------------------------------------
/components/Reviews.jsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import Image from "next/image";
4 |
5 | import { Card, CardDescription, CardHeader, CardTitle } from "./ui/card";
6 |
7 | // import swiper react components
8 | import { Swiper, SwiperSlide } from "swiper/react";
9 |
10 | // import swiper styles
11 | import "swiper/css";
12 | import "swiper/css/pagination";
13 |
14 | // import required modules
15 | import { Pagination } from "swiper/modules";
16 |
17 | const reviewsData = [
18 | {
19 | avatar: "/reviews/avatar-2.png",
20 | name: " Gaurav Nagoge",
21 | job: "Python Developer",
22 | review:
23 | "He elevated our project with stellar React development. Their attention to detail and commitment to quality set them apart.",
24 | },
25 | // {
26 | // avatar: "/reviews/avatar-1.png",
27 | // name: " Utkarsh Gayakwad",
28 | // job: "Entrepreneur",
29 | // review:
30 | // "Prem brings a wealth of knowledge to projects. their versatility ensures a holistic approach, his frontend design is outstanding.",
31 | // },
32 | {
33 | avatar: "/reviews/avatar-5.png",
34 | name: "Labhansh Satpute",
35 | job: "Backend Engineer",
36 | review:
37 | "His frontend skill is impressive! Their React skills shine in creating seamless and responsive design, make him standout in web development.",
38 | },
39 | {
40 | avatar: "/reviews/avatar-4.png",
41 | name: " Emily Smith",
42 | job: "Therapist",
43 | review:
44 | "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto, molestiae! Expedita, numquam quos!",
45 | },
46 | {
47 | avatar: "/reviews/avatar-3.png",
48 | name: " John Doe ",
49 | job: " Game Developer",
50 | review:
51 | "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto, molestiae! Expedita, numquam quos!",
52 | },
53 | {
54 | avatar: "/reviews/avatar-6.png",
55 | name: " Evelyn Anderson",
56 | job: "interior designer",
57 | review:
58 | "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto, molestiae! Expedita, numquam quos!",
59 | },
60 | ];
61 |
62 | const Reviews = () => {
63 | return (
64 |
65 |
66 |
Reviews
67 | {/* slider */}
68 |
81 | {reviewsData.map((person, index) => {
82 | return (
83 |
84 |
85 |
86 |
87 | {/* image */}
88 |
95 | {/* name */}
96 |
97 |
{person.name}
98 |
{person.job}
99 |
100 |
101 |
102 |
103 | {person.review}
104 |
105 |
106 |
107 | );
108 | })}
109 |
110 |
111 |
112 | );
113 | };
114 |
115 | export default Reviews;
116 |
--------------------------------------------------------------------------------
/components/Socials.jsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import {
4 | RiInstagramFill,
5 | RiLinkedinFill,
6 | RiGithubFill,
7 | RiTwitterXFill,
8 | RiYoutubeFill,
9 | } from "react-icons/ri";
10 |
11 | import Link from "next/link";
12 |
13 | // icons for the current user and the current user's profile
14 |
15 | const icons = [
16 | {
17 | path: "https://www.instagram.com/premvarma.dev",
18 | name: ,
19 | },
20 | {
21 | path: "https://github.com/premvarma2002",
22 | name: ,
23 | },
24 | {
25 | path: "https://twitter.com/realpremvarma",
26 | name: ,
27 | },
28 | {
29 | path: "https://www.youtube.com/channel/UCRRKb78GweCVgbb-7aqM7Zg",
30 | name: ,
31 | },
32 | {
33 | path: "https://www.linkedin.com/in/premvarma2002",
34 | name: ,
35 | },
36 | ];
37 |
38 | const Socials = ({ containerStyles, iconsStyles }) => {
39 | return (
40 |
41 | {icons.map((icon, index) => {
42 | return (
43 |
44 |
{icon.name}
45 |
46 | );
47 | })}
48 |
49 | );
50 | };
51 |
52 | export default Socials;
53 |
--------------------------------------------------------------------------------
/components/ThemeProvider.jsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { ThemeProvider as NextThemesProvider } from "next-themes";
4 |
5 | export function ThemeProvider({ children, ...props }) {
6 | return {children} ;
7 | }
8 |
--------------------------------------------------------------------------------
/components/ThemeToggler.jsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { Button } from "./ui/button";
4 | import { MoonIcon, SunIcon } from "@radix-ui/react-icons";
5 | import { useTheme } from "next-themes";
6 |
7 | const ThemeToggler = () => {
8 | const { theme, setTheme } = useTheme();
9 | return (
10 |
11 | setTheme(theme === "dark" ? "light" : "dark")}
15 | >
16 |
17 |
18 |
19 |
20 | );
21 | };
22 |
23 | export default ThemeToggler;
24 |
--------------------------------------------------------------------------------
/components/Work.jsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import Link from "next/link";
3 | import { Button } from "./ui/button";
4 |
5 | // import swiper react components
6 | import { Swiper, SwiperSlide } from "swiper/react";
7 |
8 | // import swiper styles
9 | import "swiper/css";
10 | import "swiper/css/pagination";
11 |
12 | // import required modules
13 | import { Pagination } from "swiper/modules";
14 |
15 | // components
16 | import ProjectCard from "./ProjectCard";
17 |
18 | const projectData = [
19 | {
20 | image: "/work/1.png",
21 | category: "react js",
22 | name: "Homeland ",
23 | description:
24 | "A real estate rental website made with react, tailwind & javascript.",
25 | link: "https://beautiful-homeland.netlify.app/",
26 | github: "https://github.com/premvarma2002/Real-Estate",
27 | },
28 | {
29 | image: "/work/3.png",
30 | category: "react js",
31 | name: "Amazon clone",
32 | description:
33 | "Amazon Clone made with react , tailwind, javascript and redux",
34 | link: "https://amazon-clone-ten-lemon.vercel.app/",
35 | github: "https://github.com/premvarma2002/amazon-clone",
36 | },
37 | {
38 | image: "/work/5.png",
39 | category: "NextJs",
40 | name: "LMS-Platform",
41 | description:
42 | "A Course Selling and LMS Platform built with Nextjs, Tailwind CSS, TypeScript, Prisma and PostgreSQL.",
43 | link: "/https://lms-platform-liard.vercel.app/",
44 | github: "/https://github.com/premvarma2002/lms-platform",
45 | },
46 | {
47 | image: "/work/6.png",
48 | category: "NextJS",
49 | name: "Notion Clone",
50 | description:
51 | "Notion clone powered by TypeScript, Tailwind CSS, and Next.js on the frontend.",
52 | link: "/https://note-taking-app-nu-coral.vercel.app/",
53 | github: "/https://github.com/premvarma2002/notion-clone",
54 | },
55 | {
56 | image: "/work/4.png",
57 | category: "react js",
58 | name: "Ignite Website",
59 | description:
60 | "Lorem ipsum, dolor sit amet consectetur a necessitatibus eveniet est tenetur quisquam dolore",
61 | link: "/",
62 | github: "/",
63 | },
64 | {
65 | image: "/work/4.png",
66 | category: "react js",
67 | name: "Envision Website",
68 | description:
69 | "Lorem ipsum, dolor sit amet consectetur a necessitatibus eveniet est tenetur quisquam dolore",
70 | link: "/",
71 | github: "/",
72 | },
73 | {
74 | image: "/work/4.png",
75 | category: "react js",
76 | name: "Envision Website",
77 | description:
78 | "Lorem ipsum, dolor sit amet consectetur a necessitatibus eveniet est tenetur quisquam dolore",
79 | link: "/",
80 | github: "/",
81 | },
82 | ];
83 |
84 | const Work = () => {
85 | return (
86 |
87 |
88 | {/* text */}
89 |
90 |
My Latest Projects
91 |
92 | Step into the code I've built and brought to life.
93 |
94 |
95 |
All Projects
96 |
97 |
98 | {/* slider */}
99 |
100 |
112 | {/* show only the first 4 projects for the slides */}
113 | {projectData.slice(0, 4).map((project, index) => {
114 | return (
115 |
116 |
117 |
118 | );
119 | })}
120 |
121 |
122 |
123 |
124 | );
125 | };
126 |
127 | export default Work;
128 |
--------------------------------------------------------------------------------
/components/ui/Services.jsx:
--------------------------------------------------------------------------------
1 | import { Wand2, MonitorSmartphone, Smartphone } from "lucide-react";
2 | import {
3 | Card,
4 | CardContent,
5 | CardDescription,
6 | CardHeader,
7 | CardTitle,
8 | } from "./card";
9 |
10 | const servicesData = [
11 | {
12 | icon: ,
13 | title: "Web Design",
14 | description:
15 | "I create beautiful and functional web designs for your brand and vision ",
16 | },
17 | {
18 | icon: ,
19 | title: "Web Development",
20 | description:
21 | "I build fast and secure web applications, using the latest tools and technologies. ",
22 | },
23 | {
24 | icon: ,
25 | title: "App Development",
26 | description:
27 | "I develop high-quality native and cross-platform apps for iOS and Android, using the best practices and frameworks.",
28 | },
29 | ];
30 |
31 | const Services = () => {
32 | return (
33 |
34 |
35 |
36 | My Services
37 |
38 | {/* grid items */}
39 |
40 | {servicesData.map((item, index) => {
41 | return (
42 |
46 |
47 |
48 | {item.icon}
49 |
50 |
51 |
52 | {item.title}
53 |
54 | {item.description}
55 |
56 |
57 |
58 | );
59 | })}
60 |
61 |
62 |
63 | );
64 | };
65 |
66 | export default Services;
67 |
--------------------------------------------------------------------------------
/components/ui/badge.jsx:
--------------------------------------------------------------------------------
1 | import * as React from "react";
2 | import { cva } from "class-variance-authority";
3 |
4 | import { cn } from "@/lib/utils";
5 |
6 | const badgeVariants = cva(
7 | "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
8 | {
9 | variants: {
10 | variant: {
11 | default:
12 | "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
13 | secondary:
14 | "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
15 | destructive:
16 | "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
17 | outline: "text-foreground",
18 | },
19 | },
20 | defaultVariants: {
21 | variant: "default",
22 | },
23 | }
24 | );
25 |
26 | function Badge({ className, variant, ...props }) {
27 | return (
28 |
29 | );
30 | }
31 |
32 | export { Badge, badgeVariants };
33 |
--------------------------------------------------------------------------------
/components/ui/button.jsx:
--------------------------------------------------------------------------------
1 | import * as React from "react";
2 | import { Slot } from "@radix-ui/react-slot";
3 | import { cva } from "class-variance-authority";
4 |
5 | import { cn } from "@/lib/utils";
6 |
7 | const buttonVariants = cva(
8 | "inline-flex items-center justify-center whitespace-nowrap rounded-full text-base font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
9 | {
10 | variants: {
11 | variant: {
12 | default: "bg-primary text-primary-foreground hover:bg-primary/90",
13 | destructive:
14 | "bg-destructive text-destructive-foreground hover:bg-destructive/90",
15 | outline:
16 | "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
17 | secondary:
18 | "bg-secondary text-secondary-foreground hover:bg-secondary/80",
19 | ghost: "hover:bg-accent hover:text-accent-foreground",
20 | link: "text-primary underline-offset-4 hover:underline",
21 | },
22 | size: {
23 | default: "h-[54px] px-4 py-2 min-w-[166px]",
24 | sm: "h-9 rounded-md px-3",
25 | lg: "h-11 rounded-md px-8",
26 | icon: "h-10 w-10",
27 | },
28 | },
29 | defaultVariants: {
30 | variant: "default",
31 | size: "default",
32 | },
33 | }
34 | );
35 |
36 | const Button = React.forwardRef(
37 | ({ className, variant, size, asChild = false, ...props }, ref) => {
38 | const Comp = asChild ? Slot : "button";
39 | return (
40 |
45 | );
46 | }
47 | );
48 | Button.displayName = "Button";
49 |
50 | export { Button, buttonVariants };
51 |
--------------------------------------------------------------------------------
/components/ui/card.jsx:
--------------------------------------------------------------------------------
1 | import * as React from "react";
2 |
3 | import { cn } from "@/lib/utils";
4 |
5 | const Card = React.forwardRef(({ className, ...props }, ref) => (
6 |
14 | ));
15 | Card.displayName = "Card";
16 |
17 | const CardHeader = React.forwardRef(({ className, ...props }, ref) => (
18 |
23 | ));
24 | CardHeader.displayName = "CardHeader";
25 |
26 | const CardTitle = React.forwardRef(({ className, ...props }, ref) => (
27 |
35 | ));
36 | CardTitle.displayName = "CardTitle";
37 |
38 | const CardDescription = React.forwardRef(({ className, ...props }, ref) => (
39 |
44 | ));
45 | CardDescription.displayName = "CardDescription";
46 |
47 | const CardContent = React.forwardRef(({ className, ...props }, ref) => (
48 |
49 | ));
50 | CardContent.displayName = "CardContent";
51 |
52 | const CardFooter = React.forwardRef(({ className, ...props }, ref) => (
53 |
58 | ));
59 | CardFooter.displayName = "CardFooter";
60 |
61 | export {
62 | Card,
63 | CardHeader,
64 | CardFooter,
65 | CardTitle,
66 | CardDescription,
67 | CardContent,
68 | };
69 |
--------------------------------------------------------------------------------
/components/ui/form.jsx:
--------------------------------------------------------------------------------
1 | import * as React from "react";
2 | import { Slot } from "@radix-ui/react-slot";
3 | import { Controller, FormProvider, useFormContext } from "react-hook-form";
4 |
5 | import { cn } from "@/lib/utils";
6 | import { Label } from "@/components/ui/label";
7 |
8 | const Form = FormProvider;
9 |
10 | const FormFieldContext = React.createContext({});
11 |
12 | const FormField = ({ ...props }) => {
13 | return (
14 |
15 |
16 |
17 | );
18 | };
19 |
20 | const useFormField = () => {
21 | const fieldContext = React.useContext(FormFieldContext);
22 | const itemContext = React.useContext(FormItemContext);
23 | const { getFieldState, formState } = useFormContext();
24 |
25 | const fieldState = getFieldState(fieldContext.name, formState);
26 |
27 | if (!fieldContext) {
28 | throw new Error("useFormField should be used within ");
29 | }
30 |
31 | const { id } = itemContext;
32 |
33 | return {
34 | id,
35 | name: fieldContext.name,
36 | formItemId: `${id}-form-item`,
37 | formDescriptionId: `${id}-form-item-description`,
38 | formMessageId: `${id}-form-item-message`,
39 | ...fieldState,
40 | };
41 | };
42 |
43 | const FormItemContext = React.createContext({});
44 |
45 | const FormItem = React.forwardRef(({ className, ...props }, ref) => {
46 | const id = React.useId();
47 |
48 | return (
49 |
50 |
51 |
52 | );
53 | });
54 | FormItem.displayName = "FormItem";
55 |
56 | const FormLabel = React.forwardRef(({ className, ...props }, ref) => {
57 | const { error, formItemId } = useFormField();
58 |
59 | return (
60 |
66 | );
67 | });
68 | FormLabel.displayName = "FormLabel";
69 |
70 | const FormControl = React.forwardRef(({ ...props }, ref) => {
71 | const { error, formItemId, formDescriptionId, formMessageId } =
72 | useFormField();
73 |
74 | return (
75 |
86 | );
87 | });
88 | FormControl.displayName = "FormControl";
89 |
90 | const FormDescription = React.forwardRef(({ className, ...props }, ref) => {
91 | const { formDescriptionId } = useFormField();
92 |
93 | return (
94 |
100 | );
101 | });
102 | FormDescription.displayName = "FormDescription";
103 |
104 | const FormMessage = React.forwardRef(
105 | ({ className, children, ...props }, ref) => {
106 | const { error, formMessageId } = useFormField();
107 | const body = error ? String(error?.message) : children;
108 |
109 | if (!body) {
110 | return null;
111 | }
112 |
113 | return (
114 |
120 | {body}
121 |
122 | );
123 | }
124 | );
125 | FormMessage.displayName = "FormMessage";
126 |
127 | export {
128 | useFormField,
129 | Form,
130 | FormItem,
131 | FormLabel,
132 | FormControl,
133 | FormDescription,
134 | FormMessage,
135 | FormField,
136 | };
137 |
--------------------------------------------------------------------------------
/components/ui/input.jsx:
--------------------------------------------------------------------------------
1 | import * as React from "react";
2 |
3 | import { cn } from "@/lib/utils";
4 |
5 | const Input = React.forwardRef(({ className, type, ...props }, ref) => {
6 | return (
7 |
16 | );
17 | });
18 | Input.displayName = "Input";
19 |
20 | export { Input };
21 |
--------------------------------------------------------------------------------
/components/ui/label.jsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import * as React from "react";
4 | import * as LabelPrimitive from "@radix-ui/react-label";
5 | import { cva } from "class-variance-authority";
6 |
7 | import { cn } from "@/lib/utils";
8 |
9 | const labelVariants = cva(
10 | "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
11 | );
12 |
13 | const Label = React.forwardRef(({ className, ...props }, ref) => (
14 |
19 | ));
20 | Label.displayName = LabelPrimitive.Root.displayName;
21 |
22 | export { Label };
23 |
--------------------------------------------------------------------------------
/components/ui/sheet.jsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import * as React from "react";
3 | import * as SheetPrimitive from "@radix-ui/react-dialog";
4 | import { cva } from "class-variance-authority";
5 | import { X } from "lucide-react";
6 |
7 | import { cn } from "@/lib/utils";
8 |
9 | const Sheet = SheetPrimitive.Root;
10 |
11 | const SheetTrigger = SheetPrimitive.Trigger;
12 |
13 | const SheetClose = SheetPrimitive.Close;
14 |
15 | const SheetPortal = SheetPrimitive.Portal;
16 |
17 | const SheetOverlay = React.forwardRef(({ className, ...props }, ref) => (
18 |
26 | ));
27 | SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
28 |
29 | const sheetVariants = cva(
30 | "fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
31 | {
32 | variants: {
33 | side: {
34 | top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
35 | bottom:
36 | "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
37 | left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
38 | right:
39 | "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm",
40 | },
41 | },
42 | defaultVariants: {
43 | side: "right",
44 | },
45 | }
46 | );
47 |
48 | const SheetContent = React.forwardRef(
49 | ({ side = "right", className, children, ...props }, ref) => (
50 |
51 |
52 |
57 | {children}
58 |
59 |
60 | Close
61 |
62 |
63 |
64 | )
65 | );
66 | SheetContent.displayName = SheetPrimitive.Content.displayName;
67 |
68 | const SheetHeader = ({ className, ...props }) => (
69 |
76 | );
77 | SheetHeader.displayName = "SheetHeader";
78 |
79 | const SheetFooter = ({ className, ...props }) => (
80 |
87 | );
88 | SheetFooter.displayName = "SheetFooter";
89 |
90 | const SheetTitle = React.forwardRef(({ className, ...props }, ref) => (
91 |
96 | ));
97 | SheetTitle.displayName = SheetPrimitive.Title.displayName;
98 |
99 | const SheetDescription = React.forwardRef(({ className, ...props }, ref) => (
100 |
105 | ));
106 | SheetDescription.displayName = SheetPrimitive.Description.displayName;
107 |
108 | export {
109 | Sheet,
110 | SheetPortal,
111 | SheetOverlay,
112 | SheetTrigger,
113 | SheetClose,
114 | SheetContent,
115 | SheetHeader,
116 | SheetFooter,
117 | SheetTitle,
118 | SheetDescription,
119 | };
120 |
--------------------------------------------------------------------------------
/components/ui/tabs.jsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import * as React from "react";
4 | import * as TabsPrimitive from "@radix-ui/react-tabs";
5 |
6 | import { cn } from "@/lib/utils";
7 |
8 | const Tabs = TabsPrimitive.Root;
9 |
10 | const TabsList = React.forwardRef(({ className, ...props }, ref) => (
11 |
19 | ));
20 | TabsList.displayName = TabsPrimitive.List.displayName;
21 |
22 | const TabsTrigger = React.forwardRef(({ className, ...props }, ref) => (
23 |
31 | ));
32 | TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
33 |
34 | const TabsContent = React.forwardRef(({ className, ...props }, ref) => (
35 |
43 | ));
44 | TabsContent.displayName = TabsPrimitive.Content.displayName;
45 |
46 | export { Tabs, TabsList, TabsTrigger, TabsContent };
47 |
--------------------------------------------------------------------------------
/components/ui/textarea.jsx:
--------------------------------------------------------------------------------
1 | import * as React from "react";
2 |
3 | import { cn } from "@/lib/utils";
4 |
5 | const Textarea = React.forwardRef(({ className, ...props }, ref) => {
6 | return (
7 |
15 | );
16 | });
17 | Textarea.displayName = "Textarea";
18 |
19 | export { Textarea };
20 |
--------------------------------------------------------------------------------
/constants/index.js:
--------------------------------------------------------------------------------
1 | import {github, linkedin, twitter, arrowicon } from "@/assets/index";
2 | import {
3 | css,
4 | git,
5 | html,
6 | javascript,
7 | motion,
8 | nextjs,
9 | nodejs,
10 | react,
11 | redux,
12 | tailwindcss,
13 | typescript,
14 | docker,
15 | redis,
16 | graphQL,
17 | } from "@/assets/icons/index";
18 |
19 |
20 | export const skills = [
21 | {
22 | imageUrl: html,
23 | name: "HTML",
24 | type: "Frontend",
25 | },
26 | {
27 | imageUrl: css,
28 | name: "CSS",
29 | type: "Frontend",
30 | },
31 | {
32 | imageUrl: javascript,
33 | name: "JavaScript",
34 | type: "Frontend",
35 | },
36 | {
37 | imageUrl: typescript,
38 | name: "TypeScript",
39 | type: "Frontend",
40 | },
41 | {
42 | imageUrl: react,
43 | name: "React",
44 | type: "Frontend",
45 | },
46 | {
47 | imageUrl: nextjs,
48 | name: "Next.js",
49 | type: "Frontend",
50 | },
51 | {
52 | imageUrl: tailwindcss,
53 | name: "Tailwind CSS",
54 | type: "Frontend",
55 | },
56 | {
57 | imageUrl: git,
58 | name: "Git",
59 | type: "Version Control",
60 | },
61 | {
62 | imageUrl: github,
63 | name: "GitHub",
64 | type: "Version Control",
65 | },
66 |
67 | {
68 | imageUrl: motion,
69 | name: "Motion",
70 | type: "Animation",
71 | },
72 |
73 | {
74 | imageUrl: nodejs,
75 | name: "Node.js",
76 | type: "Backend",
77 | },
78 | {
79 | imageUrl: redux,
80 | name: "Redux",
81 | type: "State Management",
82 | },
83 | {
84 | imageUrl: docker,
85 | name: "Docker",
86 | type: "Backend",
87 | },
88 | {
89 | imageUrl: redis,
90 | name: "Redis",
91 | type: "Backend",
92 | },
93 | {
94 | imageUrl: graphQL,
95 | name: "graphQL",
96 | type: "Bundler",
97 | },
98 | ];
99 |
100 | export const socials = [
101 |
102 | {
103 | icon_url: twitter,
104 | link_name: "Twitter",
105 | link:"https://twitter.com/realpremvarma",
106 | arrow: arrowicon
107 | },
108 | {
109 | icon_url: github,
110 | link_name: "Github",
111 | link:"https://github.com/premvarma2002",
112 | arrow: arrowicon
113 | },
114 | {
115 | icon_url: linkedin,
116 | link_name: "LinkedIn",
117 | link:"https://www.linkedin.com/in/premvarma2002",
118 | arrow: arrowicon
119 | }
120 | ]
--------------------------------------------------------------------------------
/hooks/useScrollProgress.jsx:
--------------------------------------------------------------------------------
1 | import React , {useState, useEffect} from 'react'
2 |
3 | const useScrollProgress = () => {
4 | const [completion ,setCompletion] = useState (1);
5 |
6 | useEffect(()=> {
7 | const updateScrollCompletion = () => {
8 | const currentProgress = window.scrollY;
9 | const scrollHeight = document.body.scrollHeight - window.innerHeight;
10 |
11 | if (scrollHeight) {
12 | setCompletion(Number(currentProgress/scrollHeight).toFixed(2) * 100);
13 | }
14 |
15 | };
16 |
17 | // Event
18 | window.addEventListener('scroll', updateScrollCompletion);
19 | // Clear Event
20 | return () => window.removeEventListener('scroll', updateScrollCompletion);
21 | },[])
22 | return completion;
23 | };
24 | export default useScrollProgress
--------------------------------------------------------------------------------
/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "paths": {
4 | "@/*": ["./*"]
5 | }
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/lib/utils.js:
--------------------------------------------------------------------------------
1 | import { clsx } from "clsx"
2 | import { twMerge } from "tailwind-merge"
3 |
4 | export function cn(...inputs) {
5 | return twMerge(clsx(inputs))
6 | }
7 |
--------------------------------------------------------------------------------
/next-sanity-studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@sanity/eslint-config-studio"
3 | }
4 |
--------------------------------------------------------------------------------
/next-sanity-studio/.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.js
7 |
8 | # Compiled Sanity Studio
9 | /dist
10 |
11 | # Temporary Sanity runtime, generated by the CLI on every dev server start
12 | /.sanity
13 |
14 | # Logs
15 | /logs
16 | *.log
17 |
18 | # Coverage directory used by testing tools
19 | /coverage
20 |
21 | # Misc
22 | .DS_Store
23 | *.pem
24 |
25 | # Typescript
26 | *.tsbuildinfo
27 |
28 | # Dotenv and similar local-only files
29 | *.local
30 |
--------------------------------------------------------------------------------
/next-sanity-studio/README.md:
--------------------------------------------------------------------------------
1 | # Sanity Clean Content Studio
2 |
3 | Congratulations, you have now installed the Sanity Content Studio, an open source real-time content editing environment connected to the Sanity backend.
4 |
5 | Now you can do the following things:
6 |
7 | - [Read “getting started” in the docs](https://www.sanity.io/docs/introduction/getting-started?utm_source=readme)
8 | - [Join the community Slack](https://slack.sanity.io/?utm_source=readme)
9 | - [Extend and build plugins](https://www.sanity.io/docs/content-studio/extending?utm_source=readme)
10 |
--------------------------------------------------------------------------------
/next-sanity-studio/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "next-sanity-studio",
3 | "private": true,
4 | "version": "1.0.0",
5 | "main": "package.json",
6 | "license": "UNLICENSED",
7 | "scripts": {
8 | "dev": "sanity dev",
9 | "start": "sanity start",
10 | "build": "sanity build",
11 | "deploy": "sanity deploy",
12 | "deploy-graphql": "sanity graphql deploy"
13 | },
14 | "keywords": [
15 | "sanity"
16 | ],
17 | "dependencies": {
18 | "@sanity/vision": "^3.30.1",
19 | "react": "^18.2.0",
20 | "react-dom": "^18.2.0",
21 | "react-is": "^18.2.0",
22 | "sanity": "^3.30.1",
23 | "styled-components": "^6.0.7"
24 | },
25 | "devDependencies": {
26 | "@sanity/eslint-config-studio": "^3.0.1",
27 | "@types/react": "^18.0.25",
28 | "eslint": "^8.6.0",
29 | "prettier": "^3.0.2",
30 | "typescript": "^5.1.6"
31 | },
32 | "prettier": {
33 | "semi": false,
34 | "printWidth": 100,
35 | "bracketSpacing": false,
36 | "singleQuote": true
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/next-sanity-studio/sanity.cli.js:
--------------------------------------------------------------------------------
1 | import {defineCliConfig} from 'sanity/cli'
2 |
3 | export default defineCliConfig({
4 | api: {
5 | projectId: 'eidwzj0k',
6 | dataset: 'production'
7 | }
8 | })
9 |
--------------------------------------------------------------------------------
/next-sanity-studio/sanity.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'sanity'
2 | import {structureTool} from 'sanity/structure'
3 | import {visionTool} from '@sanity/vision'
4 | import {schemaTypes} from './schemaTypes'
5 |
6 | export default defineConfig({
7 | name: 'default',
8 | title: 'Next Sanity Studio',
9 |
10 | projectId: 'eidwzj0k',
11 | dataset: 'production',
12 |
13 | plugins: [structureTool(), visionTool()],
14 |
15 | schema: {
16 | types: schemaTypes,
17 | },
18 | })
19 |
--------------------------------------------------------------------------------
/next-sanity-studio/schemaTypes/index.js:
--------------------------------------------------------------------------------
1 | export const schemaTypes = []
2 |
--------------------------------------------------------------------------------
/next-sanity-studio/static/.gitkeep:
--------------------------------------------------------------------------------
1 | Files placed here will be served by the Sanity server under the `/static`-prefix
2 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {}
3 |
4 | module.exports = nextConfig
5 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "shadcn-next-portfolio",
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.3.2",
13 | "@nextui-org/react": "^2.2.9",
14 | "@radix-ui/react-dialog": "^1.0.5",
15 | "@radix-ui/react-icons": "^1.3.0",
16 | "@radix-ui/react-label": "^2.0.2",
17 | "@radix-ui/react-slot": "^1.0.2",
18 | "@radix-ui/react-tabs": "^1.0.4",
19 | "axios": "^1.6.3",
20 | "class-variance-authority": "^0.7.0",
21 | "clsx": "^2.0.0",
22 | "dotenv": "^16.3.1",
23 | "framer-motion": "^10.18.0",
24 | "lucide-react": "^0.294.0",
25 | "nanoid": "^5.0.6",
26 | "next": "14.0.3",
27 | "next-themes": "^0.2.1",
28 | "react": "^18",
29 | "react-countup": "^6.5.0",
30 | "react-dom": "^18",
31 | "react-google-recaptcha": "^3.1.0",
32 | "react-google-recaptcha-v3": "^1.10.1",
33 | "react-hook-form": "^7.48.2",
34 | "react-icons": "^4.12.0",
35 | "react-spinners": "^0.13.8",
36 | "swiper": "^11.0.5",
37 | "tailwind-merge": "^2.1.0",
38 | "tailwindcss-animate": "^1.0.7",
39 | "zod": "^3.22.4"
40 | },
41 | "devDependencies": {
42 | "autoprefixer": "^10.0.1",
43 | "postcss": "^8",
44 | "tailwindcss": "^3.3.0"
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/public/about/dev.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/about/dev.png
--------------------------------------------------------------------------------
/public/about/developer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/about/developer.png
--------------------------------------------------------------------------------
/public/about/docker.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/public/about/figma.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/about/firebase.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/public/about/github.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | github [#142]
6 | Created with Sketch.
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/public/about/kubernetes.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/public/about/notion.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/public/about/redux.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/about/shape-dark.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/public/about/shape-light.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/about/terminal.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | /svg/ic-terminal
6 | Created with Sketch.
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/public/about/vscode.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/public/about/wordpress.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/public/cta/wave.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/cta/wave.png
--------------------------------------------------------------------------------
/public/cta/wave.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/cv.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/cv.pdf
--------------------------------------------------------------------------------
/public/dots-dark.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/public/dots-light.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/public/hero/dev.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/hero/dev.png
--------------------------------------------------------------------------------
/public/hero/dev1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/hero/dev1.png
--------------------------------------------------------------------------------
/public/hero/developer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/hero/developer.png
--------------------------------------------------------------------------------
/public/hero/hero-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/hero/hero-bg.png
--------------------------------------------------------------------------------
/public/hero/shape-1.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/hero/shape-2-dark.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/hero/shape-2-light.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/public/next.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/reviews/avatar-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/reviews/avatar-1.png
--------------------------------------------------------------------------------
/public/reviews/avatar-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/reviews/avatar-2.png
--------------------------------------------------------------------------------
/public/reviews/avatar-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/reviews/avatar-3.png
--------------------------------------------------------------------------------
/public/reviews/avatar-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/reviews/avatar-4.png
--------------------------------------------------------------------------------
/public/reviews/avatar-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/reviews/avatar-5.png
--------------------------------------------------------------------------------
/public/reviews/avatar-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/reviews/avatar-6.png
--------------------------------------------------------------------------------
/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/work/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/work/1.png
--------------------------------------------------------------------------------
/public/work/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/work/2.png
--------------------------------------------------------------------------------
/public/work/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/work/3.png
--------------------------------------------------------------------------------
/public/work/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/work/4.png
--------------------------------------------------------------------------------
/public/work/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/work/5.png
--------------------------------------------------------------------------------
/public/work/6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/work/6.png
--------------------------------------------------------------------------------
/public/work/project-bg-dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/work/project-bg-dark.png
--------------------------------------------------------------------------------
/public/work/project-bg-light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/premvarma2002/nextjs-shadcn.ui-portfolio/49f3357d3e094d839bd38659d62276ca64b66588/public/work/project-bg-light.png
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | darkMode: ["class"],
4 | content: [
5 | './pages/**/*.{js,jsx}',
6 | './components/**/*.{js,jsx}',
7 | './app/**/*.{js,jsx}',
8 | './src/**/*.{js,jsx}',
9 | ],
10 | theme: {
11 | container: {
12 | center: true,
13 | padding: "2rem",
14 | },
15 | screens: {
16 | sm: '640px',
17 | md: '768px',
18 | lg: '1024px',
19 | xl: '1400px',
20 | },
21 | extend: {
22 | colors: {
23 | border: "hsl(var(--border))",
24 | input: "hsl(var(--input))",
25 | ring: "hsl(var(--ring))",
26 | background: "hsl(var(--background))",
27 | foreground: "hsl(var(--foreground))",
28 | primary: {
29 | DEFAULT: "hsl(var(--primary))",
30 | foreground: "hsl(var(--primary-foreground))",
31 | },
32 | secondary: {
33 | DEFAULT: "hsl(var(--secondary))",
34 | foreground: "hsl(var(--secondary-foreground))",
35 | },
36 | tertiary: {
37 | DEFAULT: "hsl(var(--tertiary))",
38 | foreground: "hsl(var(--secondary-foreground))",
39 | },
40 | destructive: {
41 | DEFAULT: "hsl(var(--destructive))",
42 | foreground: "hsl(var(--destructive-foreground))",
43 | },
44 | muted: {
45 | DEFAULT: "hsl(var(--muted))",
46 | foreground: "hsl(var(--muted-foreground))",
47 | },
48 | accent: {
49 | DEFAULT: "hsl(var(--accent))",
50 | foreground: "hsl(var(--accent-foreground))",
51 | },
52 | popover: {
53 | DEFAULT: "hsl(var(--popover))",
54 | foreground: "hsl(var(--popover-foreground))",
55 | },
56 | card: {
57 | DEFAULT: "hsl(var(--card))",
58 | foreground: "hsl(var(--card-foreground))",
59 | },
60 | },
61 | borderRadius: {
62 | lg: "var(--radius)",
63 | md: "calc(var(--radius) - 2px)",
64 | sm: "calc(var(--radius) - 4px)",
65 | },
66 | keyframes: {
67 | "accordion-down": {
68 | from: { height: 0 },
69 | to: { height: "var(--radix-accordion-content-height)" },
70 | },
71 | "accordion-up": {
72 | from: { height: "var(--radix-accordion-content-height)" },
73 | to: { height: 0 },
74 | },
75 | },
76 | animation: {
77 | "accordion-down": "accordion-down 0.2s ease-out",
78 | "accordion-up": "accordion-up 0.2s ease-out",
79 | },
80 | backgroundImage :{
81 | hero: 'url(/hero/hero-bg.png)',
82 | hero_shape: 'url(/hero/shape-1.svg)',
83 | hero_shape2_light: 'url(/hero/shape-2-light.svg)',
84 | hero_shape2_dark: 'url(/hero/shape-2-dark.svg)',
85 | about_shape_light: 'url(/about/shape-light.svg)',
86 | about_shape_dark: 'url(/about/shape-dark.svg)',
87 | dots_light: 'url(/dots-light.svg)',
88 | dots_dark: 'url(/dots-dark.svg)',
89 | work_project_bg_light: 'url(/work/project-bg-light.png)',
90 | work_project_bg_dark: 'url(/work/project-bg-dark.png)',
91 | contact_illustration_light: 'url(/contact/illustration-light.svg)',
92 | contact_illustration_dark: 'url(/contact/illustration-dark.svg)',
93 | }
94 | },
95 | },
96 | plugins: [require("tailwindcss-animate")],
97 | }
--------------------------------------------------------------------------------