From 77ed66c8a2c5876869a20464a0ae598c555f744d Mon Sep 17 00:00:00 2001 From: Nikhil Rajput Date: Sat, 24 May 2025 23:38:27 +0530 Subject: [PATCH 01/16] chore: restructure project as monorepo with v1 and v2 versions - Set up monorepo structure with v1 (original) and v2 (new) portfolio versions - Create root package.json with workspace configuration - Update documentation for dual-version management - Configure Vercel deployment for multiple projects in single repo --- .github/FUNDING.yml | 4 + .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/ISSUE_TEMPLATE/feature_request.yml | 2 +- .github/pull_request_template.md | 87 +++ .gitignore | 5 +- .vscode/settings.json | 5 - README.md | 124 ++- bun.lockb | Bin 300868 -> 0 bytes package.json | 63 +- .eslintrc.json => v1/.eslintrc.json | 0 v1/.gitignore | 40 + instrumentation.ts => v1/instrumentation.ts | 0 jsconfig.json => v1/jsconfig.json | 0 next.config.js => v1/next.config.js | 0 v1/package.json | 50 ++ postcss.config.js => v1/postcss.config.js | 0 {public => v1/public}/favicon-16x16.ico | Bin {public => v1/public}/favicon-32x32.ico | Bin {public => v1/public}/favicon-48x48.ico | Bin {public => v1/public}/favicon-64x64.ico | Bin .../public}/images/analytical-skills.png | Bin .../public}/images/buy-me-a-coffee.png | Bin .../public}/images/collaboration.png | Bin {public => v1/public}/images/ko-fi.png | Bin .../public}/images/logical-thinking.png | Bin {public => v1/public}/images/placeholder.png | Bin {public => v1/public}/images/profile.webp | Bin .../public}/images/razorpay-logo.png | Bin {public => v1/public}/skills/aws.svg | 0 {public => v1/public}/skills/cpp.png | Bin {public => v1/public}/skills/css.svg | 0 {public => v1/public}/skills/dart.svg | 0 {public => v1/public}/skills/docker.png | Bin {public => v1/public}/skills/docker.svg | 0 {public => v1/public}/skills/express.svg | 0 {public => v1/public}/skills/firebase.svg | 0 {public => v1/public}/skills/flutter.svg | 0 {public => v1/public}/skills/getx.png | Bin {public => v1/public}/skills/git.svg | 0 {public => v1/public}/skills/github.svg | 0 {public => v1/public}/skills/html.svg | 0 {public => v1/public}/skills/javascript.svg | 0 {public => v1/public}/skills/jenkins.svg | 0 {public => v1/public}/skills/kubernetes.svg | 0 {public => v1/public}/skills/mongodb.svg | 0 {public => v1/public}/skills/mysql.svg | 0 {public => v1/public}/skills/nestjs.svg | 0 {public => v1/public}/skills/nextjs.png | Bin {public => v1/public}/skills/nodejs.svg | 0 {public => v1/public}/skills/postgresql.svg | 0 {public => v1/public}/skills/react.svg | 0 {public => v1/public}/skills/redis.svg | 0 {public => v1/public}/skills/redux.svg | 0 {public => v1/public}/skills/sass.svg | 0 {public => v1/public}/skills/socket-io.png | Bin {public => v1/public}/skills/sqlite.svg | 0 {public => v1/public}/skills/terraform.svg | 0 {public => v1/public}/skills/typescript.svg | 0 {public => v1/public}/skills/ubuntu.png | Bin .../screenshot-desktop.png | Bin .../sentry.client.config.js | 0 .../sentry.edge.config.js | 0 .../sentry.server.config.js | 0 {src => v1/src}/app/apple-icon.png | Bin {src => v1/src}/app/error.tsx | 0 {src => v1/src}/app/favicon.ico | Bin {src => v1/src}/app/global-error.tsx | 0 {src => v1/src}/app/globals.scss | 0 {src => v1/src}/app/layout.tsx | 0 {src => v1/src}/app/loading.tsx | 0 {src => v1/src}/app/page.tsx | 0 {src => v1/src}/app/payment/page.tsx | 0 {src => v1/src}/app/robots.txt | 0 {src => v1/src}/app/scroll.module.scss | 0 {src => v1/src}/app/sitemap.xml | 6 - {src => v1/src}/components/common/AppBar.tsx | 0 .../src}/components/common/FilledButton.tsx | 0 .../src}/components/common/FlipWords.tsx | 0 .../components/common/GalleryImageView.tsx | 0 .../components/common/GoogleAnalytics.tsx | 0 .../components/common/HoverLayoutGrid.tsx | 0 .../src}/components/common/OutlinedButton.tsx | 0 .../src}/components/common/ScrollToTop.tsx | 0 .../src}/components/common/SectionTitle.tsx | 0 .../components/common/TypewriterEffect.tsx | 0 .../src}/components/common/WebVitals.tsx | 0 .../src}/components/common/bulleted-text.tsx | 0 .../components/common/razor-pay-button.tsx | 0 .../src}/components/common/timeline.tsx | 0 {src => v1/src}/components/core/CardBox.tsx | 0 {src => v1/src}/components/core/Column.tsx | 0 {src => v1/src}/components/core/GridBox.tsx | 0 {src => v1/src}/components/core/Modal.tsx | 0 {src => v1/src}/components/core/PageBox.tsx | 0 .../src}/components/core/ResponsiveBox.tsx | 0 {src => v1/src}/components/core/Row.tsx | 0 .../src}/components/core/constrained-box.tsx | 0 {src => v1/src}/components/home/Section1.tsx | 0 {src => v1/src}/components/home/Section2.tsx | 0 {src => v1/src}/components/home/Section3.tsx | 0 {src => v1/src}/components/home/Section4.tsx | 0 {src => v1/src}/components/home/Section5.tsx | 0 {src => v1/src}/components/home/Section6.tsx | 0 .../home/ui/AnimatedServiceCard.tsx | 0 .../components/home/ui/ExperienceItem.tsx | 0 .../src}/components/home/ui/ProjectItem.tsx | 0 .../src}/components/home/ui/ProjectList.tsx | 0 .../src}/components/home/ui/ResumeButton.tsx | 0 .../src}/components/home/ui/SkillItem.tsx | 0 .../src}/components/home/ui/SocialButton.tsx | 0 .../src}/components/home/ui/TalkButton.tsx | 0 .../src}/components/navbar/FloatingNavbar.tsx | 0 .../src}/components/payment/MainSection.tsx | 0 {src => v1/src}/constants/config.ts | 0 {src => v1/src}/constants/strings.ts | 0 {src => v1/src}/data/experiences.ts | 0 {src => v1/src}/data/navMenus.ts | 0 {src => v1/src}/data/projects.ts | 0 {src => v1/src}/data/services.ts | 0 {src => v1/src}/data/skills.ts | 0 {src => v1/src}/data/socialLinks.ts | 0 {src => v1/src}/hooks/useIsInViewport.ts | 0 {src => v1/src}/hooks/useMobileNav.ts | 0 {src => v1/src}/hooks/useOnClickOutside.ts | 0 {src => v1/src}/hooks/useScrolled.ts | 0 {src => v1/src}/hooks/useVisibleSection.ts | 0 {src => v1/src}/hooks/useWindowDimensions.ts | 0 {src => v1/src}/types/index.ts | 0 {src => v1/src}/utils/cn.ts | 0 tailwind.config.ts => v1/tailwind.config.ts | 0 tsconfig.json => v1/tsconfig.json | 0 v2/.gitignore | 48 ++ v2/README.md | 43 ++ v2/components.json | 21 + v2/eslint.config.mjs | 16 + v2/next.config.ts | 7 + v2/package.json | 72 ++ v2/postcss.config.mjs | 8 + v2/public/file.svg | 1 + v2/public/globe.svg | 1 + v2/public/next.svg | 1 + v2/public/vercel.svg | 1 + v2/public/window.svg | 1 + v2/src/app/favicon.ico | Bin 0 -> 25931 bytes v2/src/app/globals.css | 216 ++++++ v2/src/app/layout.tsx | 34 + v2/src/app/page.tsx | 101 +++ v2/src/components/ui/accordion.tsx | 66 ++ v2/src/components/ui/alert-dialog.tsx | 157 ++++ v2/src/components/ui/alert.tsx | 66 ++ v2/src/components/ui/aspect-ratio.tsx | 11 + v2/src/components/ui/avatar.tsx | 53 ++ v2/src/components/ui/badge.tsx | 46 ++ v2/src/components/ui/breadcrumb.tsx | 109 +++ v2/src/components/ui/button.tsx | 59 ++ v2/src/components/ui/calendar.tsx | 75 ++ v2/src/components/ui/card.tsx | 92 +++ v2/src/components/ui/carousel.tsx | 241 ++++++ v2/src/components/ui/chart.tsx | 353 +++++++++ v2/src/components/ui/checkbox.tsx | 32 + v2/src/components/ui/collapsible.tsx | 33 + v2/src/components/ui/command.tsx | 177 +++++ v2/src/components/ui/context-menu.tsx | 252 ++++++ v2/src/components/ui/dialog.tsx | 135 ++++ v2/src/components/ui/drawer.tsx | 132 ++++ v2/src/components/ui/dropdown-menu.tsx | 257 +++++++ v2/src/components/ui/form.tsx | 167 ++++ v2/src/components/ui/hover-card.tsx | 44 ++ v2/src/components/ui/input-otp.tsx | 77 ++ v2/src/components/ui/input.tsx | 21 + v2/src/components/ui/label.tsx | 24 + v2/src/components/ui/menubar.tsx | 276 +++++++ v2/src/components/ui/navigation-menu.tsx | 168 ++++ v2/src/components/ui/pagination.tsx | 127 +++ v2/src/components/ui/popover.tsx | 48 ++ v2/src/components/ui/progress.tsx | 31 + v2/src/components/ui/radio-group.tsx | 45 ++ v2/src/components/ui/resizable.tsx | 56 ++ v2/src/components/ui/scroll-area.tsx | 58 ++ v2/src/components/ui/select.tsx | 185 +++++ v2/src/components/ui/separator.tsx | 28 + v2/src/components/ui/sheet.tsx | 139 ++++ v2/src/components/ui/sidebar.tsx | 726 ++++++++++++++++++ v2/src/components/ui/skeleton.tsx | 13 + v2/src/components/ui/slider.tsx | 63 ++ v2/src/components/ui/sonner.tsx | 25 + v2/src/components/ui/switch.tsx | 31 + v2/src/components/ui/table.tsx | 116 +++ v2/src/components/ui/tabs.tsx | 66 ++ v2/src/components/ui/textarea.tsx | 18 + v2/src/components/ui/toggle-group.tsx | 73 ++ v2/src/components/ui/toggle.tsx | 47 ++ v2/src/components/ui/tooltip.tsx | 61 ++ v2/src/hooks/use-mobile.ts | 19 + v2/src/lib/utils.ts | 6 + v2/tailwind.config.ts | 18 + v2/tsconfig.json | 27 + vercel.json | 6 + 198 files changed, 6033 insertions(+), 81 deletions(-) create mode 100644 .github/pull_request_template.md delete mode 100644 .vscode/settings.json delete mode 100755 bun.lockb rename .eslintrc.json => v1/.eslintrc.json (100%) create mode 100644 v1/.gitignore rename instrumentation.ts => v1/instrumentation.ts (100%) rename jsconfig.json => v1/jsconfig.json (100%) rename next.config.js => v1/next.config.js (100%) create mode 100644 v1/package.json rename postcss.config.js => v1/postcss.config.js (100%) rename {public => v1/public}/favicon-16x16.ico (100%) rename {public => v1/public}/favicon-32x32.ico (100%) rename {public => v1/public}/favicon-48x48.ico (100%) rename {public => v1/public}/favicon-64x64.ico (100%) rename {public => v1/public}/images/analytical-skills.png (100%) rename {public => v1/public}/images/buy-me-a-coffee.png (100%) rename {public => v1/public}/images/collaboration.png (100%) rename {public => v1/public}/images/ko-fi.png (100%) rename {public => v1/public}/images/logical-thinking.png (100%) rename {public => v1/public}/images/placeholder.png (100%) rename {public => v1/public}/images/profile.webp (100%) rename {public => v1/public}/images/razorpay-logo.png (100%) rename {public => v1/public}/skills/aws.svg (100%) rename {public => v1/public}/skills/cpp.png (100%) rename {public => v1/public}/skills/css.svg (100%) rename {public => v1/public}/skills/dart.svg (100%) rename {public => v1/public}/skills/docker.png (100%) rename {public => v1/public}/skills/docker.svg (100%) rename {public => v1/public}/skills/express.svg (100%) rename {public => v1/public}/skills/firebase.svg (100%) rename {public => v1/public}/skills/flutter.svg (100%) rename {public => v1/public}/skills/getx.png (100%) rename {public => v1/public}/skills/git.svg (100%) rename {public => v1/public}/skills/github.svg (100%) rename {public => v1/public}/skills/html.svg (100%) rename {public => v1/public}/skills/javascript.svg (100%) rename {public => v1/public}/skills/jenkins.svg (100%) rename {public => v1/public}/skills/kubernetes.svg (100%) rename {public => v1/public}/skills/mongodb.svg (100%) rename {public => v1/public}/skills/mysql.svg (100%) rename {public => v1/public}/skills/nestjs.svg (100%) rename {public => v1/public}/skills/nextjs.png (100%) rename {public => v1/public}/skills/nodejs.svg (100%) rename {public => v1/public}/skills/postgresql.svg (100%) rename {public => v1/public}/skills/react.svg (100%) rename {public => v1/public}/skills/redis.svg (100%) rename {public => v1/public}/skills/redux.svg (100%) rename {public => v1/public}/skills/sass.svg (100%) rename {public => v1/public}/skills/socket-io.png (100%) rename {public => v1/public}/skills/sqlite.svg (100%) rename {public => v1/public}/skills/terraform.svg (100%) rename {public => v1/public}/skills/typescript.svg (100%) rename {public => v1/public}/skills/ubuntu.png (100%) rename screenshot-desktop.png => v1/screenshot-desktop.png (100%) rename sentry.client.config.js => v1/sentry.client.config.js (100%) rename sentry.edge.config.js => v1/sentry.edge.config.js (100%) rename sentry.server.config.js => v1/sentry.server.config.js (100%) rename {src => v1/src}/app/apple-icon.png (100%) rename {src => v1/src}/app/error.tsx (100%) rename {src => v1/src}/app/favicon.ico (100%) rename {src => v1/src}/app/global-error.tsx (100%) rename {src => v1/src}/app/globals.scss (100%) rename {src => v1/src}/app/layout.tsx (100%) rename {src => v1/src}/app/loading.tsx (100%) rename {src => v1/src}/app/page.tsx (100%) rename {src => v1/src}/app/payment/page.tsx (100%) rename {src => v1/src}/app/robots.txt (100%) rename {src => v1/src}/app/scroll.module.scss (100%) rename {src => v1/src}/app/sitemap.xml (70%) rename {src => v1/src}/components/common/AppBar.tsx (100%) rename {src => v1/src}/components/common/FilledButton.tsx (100%) rename {src => v1/src}/components/common/FlipWords.tsx (100%) rename {src => v1/src}/components/common/GalleryImageView.tsx (100%) rename {src => v1/src}/components/common/GoogleAnalytics.tsx (100%) rename {src => v1/src}/components/common/HoverLayoutGrid.tsx (100%) rename {src => v1/src}/components/common/OutlinedButton.tsx (100%) rename {src => v1/src}/components/common/ScrollToTop.tsx (100%) rename {src => v1/src}/components/common/SectionTitle.tsx (100%) rename {src => v1/src}/components/common/TypewriterEffect.tsx (100%) rename {src => v1/src}/components/common/WebVitals.tsx (100%) rename {src => v1/src}/components/common/bulleted-text.tsx (100%) rename {src => v1/src}/components/common/razor-pay-button.tsx (100%) rename {src => v1/src}/components/common/timeline.tsx (100%) rename {src => v1/src}/components/core/CardBox.tsx (100%) rename {src => v1/src}/components/core/Column.tsx (100%) rename {src => v1/src}/components/core/GridBox.tsx (100%) rename {src => v1/src}/components/core/Modal.tsx (100%) rename {src => v1/src}/components/core/PageBox.tsx (100%) rename {src => v1/src}/components/core/ResponsiveBox.tsx (100%) rename {src => v1/src}/components/core/Row.tsx (100%) rename {src => v1/src}/components/core/constrained-box.tsx (100%) rename {src => v1/src}/components/home/Section1.tsx (100%) rename {src => v1/src}/components/home/Section2.tsx (100%) rename {src => v1/src}/components/home/Section3.tsx (100%) rename {src => v1/src}/components/home/Section4.tsx (100%) rename {src => v1/src}/components/home/Section5.tsx (100%) rename {src => v1/src}/components/home/Section6.tsx (100%) rename {src => v1/src}/components/home/ui/AnimatedServiceCard.tsx (100%) rename {src => v1/src}/components/home/ui/ExperienceItem.tsx (100%) rename {src => v1/src}/components/home/ui/ProjectItem.tsx (100%) rename {src => v1/src}/components/home/ui/ProjectList.tsx (100%) rename {src => v1/src}/components/home/ui/ResumeButton.tsx (100%) rename {src => v1/src}/components/home/ui/SkillItem.tsx (100%) rename {src => v1/src}/components/home/ui/SocialButton.tsx (100%) rename {src => v1/src}/components/home/ui/TalkButton.tsx (100%) rename {src => v1/src}/components/navbar/FloatingNavbar.tsx (100%) rename {src => v1/src}/components/payment/MainSection.tsx (100%) rename {src => v1/src}/constants/config.ts (100%) rename {src => v1/src}/constants/strings.ts (100%) rename {src => v1/src}/data/experiences.ts (100%) rename {src => v1/src}/data/navMenus.ts (100%) rename {src => v1/src}/data/projects.ts (100%) rename {src => v1/src}/data/services.ts (100%) rename {src => v1/src}/data/skills.ts (100%) rename {src => v1/src}/data/socialLinks.ts (100%) rename {src => v1/src}/hooks/useIsInViewport.ts (100%) rename {src => v1/src}/hooks/useMobileNav.ts (100%) rename {src => v1/src}/hooks/useOnClickOutside.ts (100%) rename {src => v1/src}/hooks/useScrolled.ts (100%) rename {src => v1/src}/hooks/useVisibleSection.ts (100%) rename {src => v1/src}/hooks/useWindowDimensions.ts (100%) rename {src => v1/src}/types/index.ts (100%) rename {src => v1/src}/utils/cn.ts (100%) rename tailwind.config.ts => v1/tailwind.config.ts (100%) rename tsconfig.json => v1/tsconfig.json (100%) create mode 100644 v2/.gitignore create mode 100644 v2/README.md create mode 100644 v2/components.json create mode 100644 v2/eslint.config.mjs create mode 100644 v2/next.config.ts create mode 100644 v2/package.json create mode 100644 v2/postcss.config.mjs create mode 100644 v2/public/file.svg create mode 100644 v2/public/globe.svg create mode 100644 v2/public/next.svg create mode 100644 v2/public/vercel.svg create mode 100644 v2/public/window.svg create mode 100644 v2/src/app/favicon.ico create mode 100644 v2/src/app/globals.css create mode 100644 v2/src/app/layout.tsx create mode 100644 v2/src/app/page.tsx create mode 100644 v2/src/components/ui/accordion.tsx create mode 100644 v2/src/components/ui/alert-dialog.tsx create mode 100644 v2/src/components/ui/alert.tsx create mode 100644 v2/src/components/ui/aspect-ratio.tsx create mode 100644 v2/src/components/ui/avatar.tsx create mode 100644 v2/src/components/ui/badge.tsx create mode 100644 v2/src/components/ui/breadcrumb.tsx create mode 100644 v2/src/components/ui/button.tsx create mode 100644 v2/src/components/ui/calendar.tsx create mode 100644 v2/src/components/ui/card.tsx create mode 100644 v2/src/components/ui/carousel.tsx create mode 100644 v2/src/components/ui/chart.tsx create mode 100644 v2/src/components/ui/checkbox.tsx create mode 100644 v2/src/components/ui/collapsible.tsx create mode 100644 v2/src/components/ui/command.tsx create mode 100644 v2/src/components/ui/context-menu.tsx create mode 100644 v2/src/components/ui/dialog.tsx create mode 100644 v2/src/components/ui/drawer.tsx create mode 100644 v2/src/components/ui/dropdown-menu.tsx create mode 100644 v2/src/components/ui/form.tsx create mode 100644 v2/src/components/ui/hover-card.tsx create mode 100644 v2/src/components/ui/input-otp.tsx create mode 100644 v2/src/components/ui/input.tsx create mode 100644 v2/src/components/ui/label.tsx create mode 100644 v2/src/components/ui/menubar.tsx create mode 100644 v2/src/components/ui/navigation-menu.tsx create mode 100644 v2/src/components/ui/pagination.tsx create mode 100644 v2/src/components/ui/popover.tsx create mode 100644 v2/src/components/ui/progress.tsx create mode 100644 v2/src/components/ui/radio-group.tsx create mode 100644 v2/src/components/ui/resizable.tsx create mode 100644 v2/src/components/ui/scroll-area.tsx create mode 100644 v2/src/components/ui/select.tsx create mode 100644 v2/src/components/ui/separator.tsx create mode 100644 v2/src/components/ui/sheet.tsx create mode 100644 v2/src/components/ui/sidebar.tsx create mode 100644 v2/src/components/ui/skeleton.tsx create mode 100644 v2/src/components/ui/slider.tsx create mode 100644 v2/src/components/ui/sonner.tsx create mode 100644 v2/src/components/ui/switch.tsx create mode 100644 v2/src/components/ui/table.tsx create mode 100644 v2/src/components/ui/tabs.tsx create mode 100644 v2/src/components/ui/textarea.tsx create mode 100644 v2/src/components/ui/toggle-group.tsx create mode 100644 v2/src/components/ui/toggle.tsx create mode 100644 v2/src/components/ui/tooltip.tsx create mode 100644 v2/src/hooks/use-mobile.ts create mode 100644 v2/src/lib/utils.ts create mode 100644 v2/tailwind.config.ts create mode 100644 v2/tsconfig.json create mode 100644 vercel.json diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index e06dc57..355e4f6 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1 +1,5 @@ github: nixrajput +ko_fi: nixrajput +buy_me_a_coffee: nixrajput +thanks_dev: u/gh/nixrajput +open_collective: nixrajput diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index a7023ac..ba96bc6 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -51,7 +51,7 @@ body: id: terms attributes: label: Code of Conduct - description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/nixrajput/flutter_carousel_widget/CODE_OF_CONDUCT.md). + description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/nixrajput/portfolio-nextjs/blob/master/CODE_OF_CONDUCT.md). options: - label: I agree to follow this project's Code of Conduct required: true diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 661894a..15403ad 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -47,7 +47,7 @@ body: id: terms attributes: label: Code of Conduct - description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/nixrajput/flutter_carousel_widget/CODE_OF_CONDUCT.md). + description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/nixrajput/portfolio-nextjs/blob/master/CODE_OF_CONDUCT.md). options: - label: I agree to follow this project's Code of Conduct required: true diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..0bb37df --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,87 @@ +# Pull Request Checklist + +## What does this PR do? + + + + + +## **Checklist** + +### Code Changes + +- [ ] I have added new features to the package (e.g., autoplay, indicator customization, etc.) +- [ ] I have fixed existing issues (e.g., performance, edge cases) +- [ ] I have improved the overall structure or optimized the codebase + +### Documentation + +- [ ] I have updated the README file or relevant documentation with the changes +- [ ] I have added code usage examples or updated existing examples to reflect changes +- [ ] I have updated the package version in the `pubspec.yaml` file + +### Testing + +**General Tests** + +- [ ] The carousel widget works correctly with default settings +- [ ] The carousel can handle a dynamic number of children (images, texts, etc.) +- [ ] The carousel supports custom widgets for carousel items + +**Autoplay Feature** + +- [ ] Autoplay starts when enabled and stops when disabled +- [ ] Autoplay pauses when the user interacts (swipes/taps) with the carousel +- [ ] Autoplay resumes after interaction + +**Indicators and Customization** + +- [ ] The carousel displays indicators correctly and updates when navigating through slides +- [ ] Custom indicators (colors, shapes, positions) are rendered correctly +- [ ] Custom animations or transitions between slides work as expected + +**Looping and Scrolling** + +- [ ] Infinite loop mode works smoothly without any jumps or glitches +- [ ] The carousel scrolls smoothly horizontally and/or vertically +- [ ] Pagination and snapping behavior works as expected + +**Accessibility** + +- [ ] The carousel widget supports screen readers (e.g., `Semantics` labels added) +- [ ] Users can navigate between items using a keyboard (if necessary) + +**Responsiveness** + +- [ ] The carousel adapts to different screen sizes (mobile, tablet, desktop) +- [ ] The carousel responds correctly to device orientation changes + +**Error Handling** + +- [ ] The carousel handles empty/null items gracefully +- [ ] The carousel handles large data sets without crashes or performance drops + +### Performance + +- [ ] I ran performance tests to ensure no regressions +- [ ] The carousel renders efficiently, even with a large number of items + +### How did you verify your code works? + + + + diff --git a/.gitignore b/.gitignore index cd468a2..7f19c2e 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ # misc .DS_Store +**/.DS_Store *.pem # debug @@ -37,4 +38,6 @@ next-env.d.ts # lock package-lock.json pnpm-lock.yaml -yarn.lock \ No newline at end of file +yarn.lock +bun.lock +bun.lockb \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index ba0a441..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "cSpell.words": [ - "TECHOX" - ] -} \ No newline at end of file diff --git a/README.md b/README.md index 3bd7044..42fc2dc 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ -# Portfolio Website with Next.js and Sass +# Portfolio Website Monorepo -This repository contains the source code for a portfolio website built using Next.js and Sass. This README.md file provides an overview of the project and instructions on how to set it up and customize it for your own use. +This repository contains the source code for two versions of my portfolio website. The repository is structured as a monorepo with both versions maintained in a single codebase but deployed to different domains. + +- **v1**: Original portfolio website built with Next.js 14 and Sass +- **v2**: New redesigned portfolio website built with Next.js 15 and Tailwind CSS v4 [![Stars](https://img.shields.io/github/stars/nixrajput/portfolio-nextjs?label=Stars&style=flat)][repo] [![Forks](https://img.shields.io/github/forks/nixrajput/portfolio-nextjs?label=Forks&style=flat)][repo] @@ -14,29 +17,62 @@ This repository contains the source code for a portfolio website built using Nex ## Table of Contents -- [Portfolio Website with Next.js and Sass](#portfolio-website-with-nextjs-and-sass) +- [Portfolio Website Monorepo](#portfolio-website-monorepo) - [Table of Contents](#table-of-contents) + - [Repository Structure](#repository-structure) - [Features](#features) + - [v1 (Original Portfolio)](#v1-original-portfolio) + - [v2 (New Portfolio)](#v2-new-portfolio) - [Screenshots](#screenshots) - [Getting Started](#getting-started) - [Prerequisites](#prerequisites) - [Installation](#installation) - [Usage](#usage) + - [Running v1](#running-v1) + - [Running v2](#running-v2) - [Customization](#customization) - [Changing Content](#changing-content) + - [For v1:](#for-v1) + - [For v2:](#for-v2) - [Deployment](#deployment) + - [Deploying v1](#deploying-v1) + - [Deploying v2](#deploying-v2) - [Contributing](#contributing) - [License](#license) - [Sponsor Me](#sponsor-me) - [Connect With Me](#connect-with-me) - [Activities](#activities) +## Repository Structure + +This repository is organized as a monorepo with the following structure: + +``` +/ +├── v1/ # Original portfolio website (Next.js 14) +├── v2/ # New portfolio website (Next.js 15) +├── package.json # Root package.json with workspace configuration +├── README.md # This file +└── LICENSE # MIT License +``` + ## Features -- Responsive design for various screen sizes. -- A customizable portfolio section to showcase your projects. -- An about section to introduce yourself. -- Easily customizable with Sass for styling. +### v1 (Original Portfolio) + +- Responsive design for various screen sizes +- Portfolio section to showcase projects +- About section with personal information +- Customizable with Sass for styling +- Built with Next.js 14 and React 18 + +### v2 (New Portfolio) + +- Modern design with enhanced UI/UX +- Built with Next.js 15 and React 19 +- Styled with Tailwind CSS v4 +- Improved performance and accessibility +- Dark mode support ## Screenshots @@ -91,39 +127,81 @@ You need to have the following software installed on your computer: ## Usage -To start the development server and view the website locally, run the following command: +The monorepo is set up to allow you to work with either version independently. + +### Running v1 + +To start the development server for v1: ```bash -npm run dev -#or -pnpm run dev +npm run dev:v1 +# or +pnpm run dev:v1 # or -yarn dev +yarn dev:v1 ``` -This will start the Next.js development server, and you can access the website in your web browser at `http://localhost:3000`. +This will start the Next.js development server for v1, and you can access it at `http://localhost:4000`. + +### Running v2 + +To start the development server for v2: + +```bash +npm run dev:v2 +# or +pnpm run dev:v2 +# or +yarn dev:v2 +``` + +This will start the Next.js development server for v2, and you can access it at `http://localhost:3000`. ## Customization -You can customize various aspects of the portfolio website to make it your own. +Both versions can be customized independently. ### Changing Content -1. Update the content in the `data` directory: +#### For v1: + +1. Update the content in the `v1/src/data` directory: + - Edit the data files to modify project details, services, experiences, skills, and social links + - Replace or add images in the `v1/public/images` directory - - Edit the `projects.ts` file to add or modify project details. - - Edit the `services.ts` file to add or modify services you provide. - - Edit the `experiences.ts` file to add or modify experiences you have. - - Edit the `skills.ts` file to add or modify skills you know. - - Edit the `socialLinks.ts` file to add or modify social media links. +#### For v2: -2. Replace or add images in the `public/images` directory to match your projects and profile picture. +1. Update the content in the `v2/src/data` directory (if applicable) + - The v2 version uses a different structure, so refer to the specific files in the v2 directory + - Replace or add images in the `v2/public` directory ## Deployment -To deploy the portfolio website to a hosting service of your choice, follow the deployment instructions for Next.js applications. Some popular hosting options include Vercel, Netlify, and GitHub Pages. +Both versions can be deployed to separate domains on Vercel. + +### Deploying v1 + +1. Create a new project on Vercel and connect it to your GitHub repository +2. Configure the following settings: + - Framework Preset: Next.js + - Root Directory: `v1` + - Build Command: `npm run build` or leave as default + - Output Directory: `.next` +3. Set any required environment variables +4. Deploy the project + +### Deploying v2 + +1. Create another new project on Vercel and connect it to the same GitHub repository +2. Configure the following settings: + - Framework Preset: Next.js + - Root Directory: `v2` + - Build Command: `npm run build` or leave as default + - Output Directory: `.next` +3. Set any required environment variables +4. Deploy the project -Remember to configure environment variables for sensitive information like email credentials if needed. +With this setup, both versions will be deployed to different domains but maintained in the same repository. ## Contributing diff --git a/bun.lockb b/bun.lockb deleted file mode 100755 index 83b7c67a9665300199a1e3cc9cb0bfc976cb0881..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 300868 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

(|Hb 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 diff --git a/package.json b/package.json index 7ae6943..fbc3788 100644 --- a/package.json +++ b/package.json @@ -1,50 +1,25 @@ { - "name": "portfolio-nextjs", - "version": "1.1.0", + "name": "portfolio-nextjs-monorepo", + "version": "1.0.0", "private": true, + "workspaces": [ + "v1", + "v2" + ], "scripts": { - "dev": "next dev -p 4000", - "build": "next build", - "start": "next start", - "lint": "next lint", - "push": "git add -A && git commit -m \"Update Changes & Bug Fixes\" && git push origin master" + "dev:v1": "cd v1 && npm run dev", + "dev:v2": "cd v2 && npm run dev", + "build:v1": "cd v1 && npm run build", + "build:v2": "cd v2 && npm run build", + "start:v1": "cd v1 && npm run start", + "start:v2": "cd v2 && npm run start", + "lint:v1": "cd v1 && npm run lint", + "lint:v2": "cd v2 && npm run lint" }, - "dependencies": { - "@fortawesome/fontawesome-svg-core": "^6.6.0", - "@fortawesome/free-brands-svg-icons": "^6.6.0", - "@fortawesome/free-regular-svg-icons": "^6.6.0", - "@fortawesome/free-solid-svg-icons": "^6.6.0", - "@fortawesome/react-fontawesome": "^0.2.2", - "@sentry/nextjs": "^8.35.0", - "@tsparticles/engine": "^3.5.0", - "@tsparticles/react": "^3.0.0", - "@tsparticles/slim": "^3.5.0", - "animejs": "^3.2.2", - "clsx": "^2.1.1", - "framer-motion": "^11.11.10", - "lodash": "^4.17.21", - "mini-svg-data-uri": "^1.4.4", - "next": "^14.2.16", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-wrap-balancer": "^1.1.1", - "tailwind-merge": "^2.5.4" + "repository": { + "type": "git", + "url": "git+https://github.com/nixrajput/portfolio-nextjs.git" }, - "devDependencies": { - "@babel/core": "^7.26.0", - "@tailwindcss/typography": "^0.5.15", - "@types/animejs": "^3.1.12", - "@types/lodash": "^4.17.12", - "@types/node": "^20.17.1", - "@types/react": "^18.3.12", - "autoprefixer": "^10.4.20", - "eslint": "^9.13.0", - "eslint-config-next": "^14.2.16", - "postcss": "^8.4.47", - "postcss-nesting": "^12.1.5", - "sass": "^1.80.4", - "tailwindcss": "^3.4.14", - "tailwindcss-debug-screens": "^2.2.1", - "typescript": "^5.6.3" - } + "author": "Nikhil Rajput", + "license": "MIT" } diff --git a/.eslintrc.json b/v1/.eslintrc.json similarity index 100% rename from .eslintrc.json rename to v1/.eslintrc.json diff --git a/v1/.gitignore b/v1/.gitignore new file mode 100644 index 0000000..cd468a2 --- /dev/null +++ b/v1/.gitignore @@ -0,0 +1,40 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +# lock +package-lock.json +pnpm-lock.yaml +yarn.lock \ No newline at end of file diff --git a/instrumentation.ts b/v1/instrumentation.ts similarity index 100% rename from instrumentation.ts rename to v1/instrumentation.ts diff --git a/jsconfig.json b/v1/jsconfig.json similarity index 100% rename from jsconfig.json rename to v1/jsconfig.json diff --git a/next.config.js b/v1/next.config.js similarity index 100% rename from next.config.js rename to v1/next.config.js diff --git a/v1/package.json b/v1/package.json new file mode 100644 index 0000000..7ae6943 --- /dev/null +++ b/v1/package.json @@ -0,0 +1,50 @@ +{ + "name": "portfolio-nextjs", + "version": "1.1.0", + "private": true, + "scripts": { + "dev": "next dev -p 4000", + "build": "next build", + "start": "next start", + "lint": "next lint", + "push": "git add -A && git commit -m \"Update Changes & Bug Fixes\" && git push origin master" + }, + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.6.0", + "@fortawesome/free-brands-svg-icons": "^6.6.0", + "@fortawesome/free-regular-svg-icons": "^6.6.0", + "@fortawesome/free-solid-svg-icons": "^6.6.0", + "@fortawesome/react-fontawesome": "^0.2.2", + "@sentry/nextjs": "^8.35.0", + "@tsparticles/engine": "^3.5.0", + "@tsparticles/react": "^3.0.0", + "@tsparticles/slim": "^3.5.0", + "animejs": "^3.2.2", + "clsx": "^2.1.1", + "framer-motion": "^11.11.10", + "lodash": "^4.17.21", + "mini-svg-data-uri": "^1.4.4", + "next": "^14.2.16", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-wrap-balancer": "^1.1.1", + "tailwind-merge": "^2.5.4" + }, + "devDependencies": { + "@babel/core": "^7.26.0", + "@tailwindcss/typography": "^0.5.15", + "@types/animejs": "^3.1.12", + "@types/lodash": "^4.17.12", + "@types/node": "^20.17.1", + "@types/react": "^18.3.12", + "autoprefixer": "^10.4.20", + "eslint": "^9.13.0", + "eslint-config-next": "^14.2.16", + "postcss": "^8.4.47", + "postcss-nesting": "^12.1.5", + "sass": "^1.80.4", + "tailwindcss": "^3.4.14", + "tailwindcss-debug-screens": "^2.2.1", + "typescript": "^5.6.3" + } +} diff --git a/postcss.config.js b/v1/postcss.config.js similarity index 100% rename from postcss.config.js rename to v1/postcss.config.js diff --git a/public/favicon-16x16.ico b/v1/public/favicon-16x16.ico similarity index 100% rename from public/favicon-16x16.ico rename to v1/public/favicon-16x16.ico diff --git a/public/favicon-32x32.ico b/v1/public/favicon-32x32.ico similarity index 100% rename from public/favicon-32x32.ico rename to v1/public/favicon-32x32.ico diff --git a/public/favicon-48x48.ico b/v1/public/favicon-48x48.ico similarity index 100% rename from public/favicon-48x48.ico rename to v1/public/favicon-48x48.ico diff --git a/public/favicon-64x64.ico b/v1/public/favicon-64x64.ico similarity index 100% rename from public/favicon-64x64.ico rename to v1/public/favicon-64x64.ico diff --git a/public/images/analytical-skills.png b/v1/public/images/analytical-skills.png similarity index 100% rename from public/images/analytical-skills.png rename to v1/public/images/analytical-skills.png diff --git a/public/images/buy-me-a-coffee.png b/v1/public/images/buy-me-a-coffee.png similarity index 100% rename from public/images/buy-me-a-coffee.png rename to v1/public/images/buy-me-a-coffee.png diff --git a/public/images/collaboration.png b/v1/public/images/collaboration.png similarity index 100% rename from public/images/collaboration.png rename to v1/public/images/collaboration.png diff --git a/public/images/ko-fi.png b/v1/public/images/ko-fi.png similarity index 100% rename from public/images/ko-fi.png rename to v1/public/images/ko-fi.png diff --git a/public/images/logical-thinking.png b/v1/public/images/logical-thinking.png similarity index 100% rename from public/images/logical-thinking.png rename to v1/public/images/logical-thinking.png diff --git a/public/images/placeholder.png b/v1/public/images/placeholder.png similarity index 100% rename from public/images/placeholder.png rename to v1/public/images/placeholder.png diff --git a/public/images/profile.webp b/v1/public/images/profile.webp similarity index 100% rename from public/images/profile.webp rename to v1/public/images/profile.webp diff --git a/public/images/razorpay-logo.png b/v1/public/images/razorpay-logo.png similarity index 100% rename from public/images/razorpay-logo.png rename to v1/public/images/razorpay-logo.png diff --git a/public/skills/aws.svg b/v1/public/skills/aws.svg similarity index 100% rename from public/skills/aws.svg rename to v1/public/skills/aws.svg diff --git a/public/skills/cpp.png b/v1/public/skills/cpp.png similarity index 100% rename from public/skills/cpp.png rename to v1/public/skills/cpp.png diff --git a/public/skills/css.svg b/v1/public/skills/css.svg similarity index 100% rename from public/skills/css.svg rename to v1/public/skills/css.svg diff --git a/public/skills/dart.svg b/v1/public/skills/dart.svg similarity index 100% rename from public/skills/dart.svg rename to v1/public/skills/dart.svg diff --git a/public/skills/docker.png b/v1/public/skills/docker.png similarity index 100% rename from public/skills/docker.png rename to v1/public/skills/docker.png diff --git a/public/skills/docker.svg b/v1/public/skills/docker.svg similarity index 100% rename from public/skills/docker.svg rename to v1/public/skills/docker.svg diff --git a/public/skills/express.svg b/v1/public/skills/express.svg similarity index 100% rename from public/skills/express.svg rename to v1/public/skills/express.svg diff --git a/public/skills/firebase.svg b/v1/public/skills/firebase.svg similarity index 100% rename from public/skills/firebase.svg rename to v1/public/skills/firebase.svg diff --git a/public/skills/flutter.svg b/v1/public/skills/flutter.svg similarity index 100% rename from public/skills/flutter.svg rename to v1/public/skills/flutter.svg diff --git a/public/skills/getx.png b/v1/public/skills/getx.png similarity index 100% rename from public/skills/getx.png rename to v1/public/skills/getx.png diff --git a/public/skills/git.svg b/v1/public/skills/git.svg similarity index 100% rename from public/skills/git.svg rename to v1/public/skills/git.svg diff --git a/public/skills/github.svg b/v1/public/skills/github.svg similarity index 100% rename from public/skills/github.svg rename to v1/public/skills/github.svg diff --git a/public/skills/html.svg b/v1/public/skills/html.svg similarity index 100% rename from public/skills/html.svg rename to v1/public/skills/html.svg diff --git a/public/skills/javascript.svg b/v1/public/skills/javascript.svg similarity index 100% rename from public/skills/javascript.svg rename to v1/public/skills/javascript.svg diff --git a/public/skills/jenkins.svg b/v1/public/skills/jenkins.svg similarity index 100% rename from public/skills/jenkins.svg rename to v1/public/skills/jenkins.svg diff --git a/public/skills/kubernetes.svg b/v1/public/skills/kubernetes.svg similarity index 100% rename from public/skills/kubernetes.svg rename to v1/public/skills/kubernetes.svg diff --git a/public/skills/mongodb.svg b/v1/public/skills/mongodb.svg similarity index 100% rename from public/skills/mongodb.svg rename to v1/public/skills/mongodb.svg diff --git a/public/skills/mysql.svg b/v1/public/skills/mysql.svg similarity index 100% rename from public/skills/mysql.svg rename to v1/public/skills/mysql.svg diff --git a/public/skills/nestjs.svg b/v1/public/skills/nestjs.svg similarity index 100% rename from public/skills/nestjs.svg rename to v1/public/skills/nestjs.svg diff --git a/public/skills/nextjs.png b/v1/public/skills/nextjs.png similarity index 100% rename from public/skills/nextjs.png rename to v1/public/skills/nextjs.png diff --git a/public/skills/nodejs.svg b/v1/public/skills/nodejs.svg similarity index 100% rename from public/skills/nodejs.svg rename to v1/public/skills/nodejs.svg diff --git a/public/skills/postgresql.svg b/v1/public/skills/postgresql.svg similarity index 100% rename from public/skills/postgresql.svg rename to v1/public/skills/postgresql.svg diff --git a/public/skills/react.svg b/v1/public/skills/react.svg similarity index 100% rename from public/skills/react.svg rename to v1/public/skills/react.svg diff --git a/public/skills/redis.svg b/v1/public/skills/redis.svg similarity index 100% rename from public/skills/redis.svg rename to v1/public/skills/redis.svg diff --git a/public/skills/redux.svg b/v1/public/skills/redux.svg similarity index 100% rename from public/skills/redux.svg rename to v1/public/skills/redux.svg diff --git a/public/skills/sass.svg b/v1/public/skills/sass.svg similarity index 100% rename from public/skills/sass.svg rename to v1/public/skills/sass.svg diff --git a/public/skills/socket-io.png b/v1/public/skills/socket-io.png similarity index 100% rename from public/skills/socket-io.png rename to v1/public/skills/socket-io.png diff --git a/public/skills/sqlite.svg b/v1/public/skills/sqlite.svg similarity index 100% rename from public/skills/sqlite.svg rename to v1/public/skills/sqlite.svg diff --git a/public/skills/terraform.svg b/v1/public/skills/terraform.svg similarity index 100% rename from public/skills/terraform.svg rename to v1/public/skills/terraform.svg diff --git a/public/skills/typescript.svg b/v1/public/skills/typescript.svg similarity index 100% rename from public/skills/typescript.svg rename to v1/public/skills/typescript.svg diff --git a/public/skills/ubuntu.png b/v1/public/skills/ubuntu.png similarity index 100% rename from public/skills/ubuntu.png rename to v1/public/skills/ubuntu.png diff --git a/screenshot-desktop.png b/v1/screenshot-desktop.png similarity index 100% rename from screenshot-desktop.png rename to v1/screenshot-desktop.png diff --git a/sentry.client.config.js b/v1/sentry.client.config.js similarity index 100% rename from sentry.client.config.js rename to v1/sentry.client.config.js diff --git a/sentry.edge.config.js b/v1/sentry.edge.config.js similarity index 100% rename from sentry.edge.config.js rename to v1/sentry.edge.config.js diff --git a/sentry.server.config.js b/v1/sentry.server.config.js similarity index 100% rename from sentry.server.config.js rename to v1/sentry.server.config.js diff --git a/src/app/apple-icon.png b/v1/src/app/apple-icon.png similarity index 100% rename from src/app/apple-icon.png rename to v1/src/app/apple-icon.png diff --git a/src/app/error.tsx b/v1/src/app/error.tsx similarity index 100% rename from src/app/error.tsx rename to v1/src/app/error.tsx diff --git a/src/app/favicon.ico b/v1/src/app/favicon.ico similarity index 100% rename from src/app/favicon.ico rename to v1/src/app/favicon.ico diff --git a/src/app/global-error.tsx b/v1/src/app/global-error.tsx similarity index 100% rename from src/app/global-error.tsx rename to v1/src/app/global-error.tsx diff --git a/src/app/globals.scss b/v1/src/app/globals.scss similarity index 100% rename from src/app/globals.scss rename to v1/src/app/globals.scss diff --git a/src/app/layout.tsx b/v1/src/app/layout.tsx similarity index 100% rename from src/app/layout.tsx rename to v1/src/app/layout.tsx diff --git a/src/app/loading.tsx b/v1/src/app/loading.tsx similarity index 100% rename from src/app/loading.tsx rename to v1/src/app/loading.tsx diff --git a/src/app/page.tsx b/v1/src/app/page.tsx similarity index 100% rename from src/app/page.tsx rename to v1/src/app/page.tsx diff --git a/src/app/payment/page.tsx b/v1/src/app/payment/page.tsx similarity index 100% rename from src/app/payment/page.tsx rename to v1/src/app/payment/page.tsx diff --git a/src/app/robots.txt b/v1/src/app/robots.txt similarity index 100% rename from src/app/robots.txt rename to v1/src/app/robots.txt diff --git a/src/app/scroll.module.scss b/v1/src/app/scroll.module.scss similarity index 100% rename from src/app/scroll.module.scss rename to v1/src/app/scroll.module.scss diff --git a/src/app/sitemap.xml b/v1/src/app/sitemap.xml similarity index 70% rename from src/app/sitemap.xml rename to v1/src/app/sitemap.xml index 175cbc6..8eec4ec 100644 --- a/src/app/sitemap.xml +++ b/v1/src/app/sitemap.xml @@ -5,12 +5,6 @@ yearly 1 - - https://www.nixrajput.com - 2024-06-11T15:02:24.021Z - yearly - 1 - https://www.nixrajput.com/payment 2024-06-11T15:02:24.021Z diff --git a/src/components/common/AppBar.tsx b/v1/src/components/common/AppBar.tsx similarity index 100% rename from src/components/common/AppBar.tsx rename to v1/src/components/common/AppBar.tsx diff --git a/src/components/common/FilledButton.tsx b/v1/src/components/common/FilledButton.tsx similarity index 100% rename from src/components/common/FilledButton.tsx rename to v1/src/components/common/FilledButton.tsx diff --git a/src/components/common/FlipWords.tsx b/v1/src/components/common/FlipWords.tsx similarity index 100% rename from src/components/common/FlipWords.tsx rename to v1/src/components/common/FlipWords.tsx diff --git a/src/components/common/GalleryImageView.tsx b/v1/src/components/common/GalleryImageView.tsx similarity index 100% rename from src/components/common/GalleryImageView.tsx rename to v1/src/components/common/GalleryImageView.tsx diff --git a/src/components/common/GoogleAnalytics.tsx b/v1/src/components/common/GoogleAnalytics.tsx similarity index 100% rename from src/components/common/GoogleAnalytics.tsx rename to v1/src/components/common/GoogleAnalytics.tsx diff --git a/src/components/common/HoverLayoutGrid.tsx b/v1/src/components/common/HoverLayoutGrid.tsx similarity index 100% rename from src/components/common/HoverLayoutGrid.tsx rename to v1/src/components/common/HoverLayoutGrid.tsx diff --git a/src/components/common/OutlinedButton.tsx b/v1/src/components/common/OutlinedButton.tsx similarity index 100% rename from src/components/common/OutlinedButton.tsx rename to v1/src/components/common/OutlinedButton.tsx diff --git a/src/components/common/ScrollToTop.tsx b/v1/src/components/common/ScrollToTop.tsx similarity index 100% rename from src/components/common/ScrollToTop.tsx rename to v1/src/components/common/ScrollToTop.tsx diff --git a/src/components/common/SectionTitle.tsx b/v1/src/components/common/SectionTitle.tsx similarity index 100% rename from src/components/common/SectionTitle.tsx rename to v1/src/components/common/SectionTitle.tsx diff --git a/src/components/common/TypewriterEffect.tsx b/v1/src/components/common/TypewriterEffect.tsx similarity index 100% rename from src/components/common/TypewriterEffect.tsx rename to v1/src/components/common/TypewriterEffect.tsx diff --git a/src/components/common/WebVitals.tsx b/v1/src/components/common/WebVitals.tsx similarity index 100% rename from src/components/common/WebVitals.tsx rename to v1/src/components/common/WebVitals.tsx diff --git a/src/components/common/bulleted-text.tsx b/v1/src/components/common/bulleted-text.tsx similarity index 100% rename from src/components/common/bulleted-text.tsx rename to v1/src/components/common/bulleted-text.tsx diff --git a/src/components/common/razor-pay-button.tsx b/v1/src/components/common/razor-pay-button.tsx similarity index 100% rename from src/components/common/razor-pay-button.tsx rename to v1/src/components/common/razor-pay-button.tsx diff --git a/src/components/common/timeline.tsx b/v1/src/components/common/timeline.tsx similarity index 100% rename from src/components/common/timeline.tsx rename to v1/src/components/common/timeline.tsx diff --git a/src/components/core/CardBox.tsx b/v1/src/components/core/CardBox.tsx similarity index 100% rename from src/components/core/CardBox.tsx rename to v1/src/components/core/CardBox.tsx diff --git a/src/components/core/Column.tsx b/v1/src/components/core/Column.tsx similarity index 100% rename from src/components/core/Column.tsx rename to v1/src/components/core/Column.tsx diff --git a/src/components/core/GridBox.tsx b/v1/src/components/core/GridBox.tsx similarity index 100% rename from src/components/core/GridBox.tsx rename to v1/src/components/core/GridBox.tsx diff --git a/src/components/core/Modal.tsx b/v1/src/components/core/Modal.tsx similarity index 100% rename from src/components/core/Modal.tsx rename to v1/src/components/core/Modal.tsx diff --git a/src/components/core/PageBox.tsx b/v1/src/components/core/PageBox.tsx similarity index 100% rename from src/components/core/PageBox.tsx rename to v1/src/components/core/PageBox.tsx diff --git a/src/components/core/ResponsiveBox.tsx b/v1/src/components/core/ResponsiveBox.tsx similarity index 100% rename from src/components/core/ResponsiveBox.tsx rename to v1/src/components/core/ResponsiveBox.tsx diff --git a/src/components/core/Row.tsx b/v1/src/components/core/Row.tsx similarity index 100% rename from src/components/core/Row.tsx rename to v1/src/components/core/Row.tsx diff --git a/src/components/core/constrained-box.tsx b/v1/src/components/core/constrained-box.tsx similarity index 100% rename from src/components/core/constrained-box.tsx rename to v1/src/components/core/constrained-box.tsx diff --git a/src/components/home/Section1.tsx b/v1/src/components/home/Section1.tsx similarity index 100% rename from src/components/home/Section1.tsx rename to v1/src/components/home/Section1.tsx diff --git a/src/components/home/Section2.tsx b/v1/src/components/home/Section2.tsx similarity index 100% rename from src/components/home/Section2.tsx rename to v1/src/components/home/Section2.tsx diff --git a/src/components/home/Section3.tsx b/v1/src/components/home/Section3.tsx similarity index 100% rename from src/components/home/Section3.tsx rename to v1/src/components/home/Section3.tsx diff --git a/src/components/home/Section4.tsx b/v1/src/components/home/Section4.tsx similarity index 100% rename from src/components/home/Section4.tsx rename to v1/src/components/home/Section4.tsx diff --git a/src/components/home/Section5.tsx b/v1/src/components/home/Section5.tsx similarity index 100% rename from src/components/home/Section5.tsx rename to v1/src/components/home/Section5.tsx diff --git a/src/components/home/Section6.tsx b/v1/src/components/home/Section6.tsx similarity index 100% rename from src/components/home/Section6.tsx rename to v1/src/components/home/Section6.tsx diff --git a/src/components/home/ui/AnimatedServiceCard.tsx b/v1/src/components/home/ui/AnimatedServiceCard.tsx similarity index 100% rename from src/components/home/ui/AnimatedServiceCard.tsx rename to v1/src/components/home/ui/AnimatedServiceCard.tsx diff --git a/src/components/home/ui/ExperienceItem.tsx b/v1/src/components/home/ui/ExperienceItem.tsx similarity index 100% rename from src/components/home/ui/ExperienceItem.tsx rename to v1/src/components/home/ui/ExperienceItem.tsx diff --git a/src/components/home/ui/ProjectItem.tsx b/v1/src/components/home/ui/ProjectItem.tsx similarity index 100% rename from src/components/home/ui/ProjectItem.tsx rename to v1/src/components/home/ui/ProjectItem.tsx diff --git a/src/components/home/ui/ProjectList.tsx b/v1/src/components/home/ui/ProjectList.tsx similarity index 100% rename from src/components/home/ui/ProjectList.tsx rename to v1/src/components/home/ui/ProjectList.tsx diff --git a/src/components/home/ui/ResumeButton.tsx b/v1/src/components/home/ui/ResumeButton.tsx similarity index 100% rename from src/components/home/ui/ResumeButton.tsx rename to v1/src/components/home/ui/ResumeButton.tsx diff --git a/src/components/home/ui/SkillItem.tsx b/v1/src/components/home/ui/SkillItem.tsx similarity index 100% rename from src/components/home/ui/SkillItem.tsx rename to v1/src/components/home/ui/SkillItem.tsx diff --git a/src/components/home/ui/SocialButton.tsx b/v1/src/components/home/ui/SocialButton.tsx similarity index 100% rename from src/components/home/ui/SocialButton.tsx rename to v1/src/components/home/ui/SocialButton.tsx diff --git a/src/components/home/ui/TalkButton.tsx b/v1/src/components/home/ui/TalkButton.tsx similarity index 100% rename from src/components/home/ui/TalkButton.tsx rename to v1/src/components/home/ui/TalkButton.tsx diff --git a/src/components/navbar/FloatingNavbar.tsx b/v1/src/components/navbar/FloatingNavbar.tsx similarity index 100% rename from src/components/navbar/FloatingNavbar.tsx rename to v1/src/components/navbar/FloatingNavbar.tsx diff --git a/src/components/payment/MainSection.tsx b/v1/src/components/payment/MainSection.tsx similarity index 100% rename from src/components/payment/MainSection.tsx rename to v1/src/components/payment/MainSection.tsx diff --git a/src/constants/config.ts b/v1/src/constants/config.ts similarity index 100% rename from src/constants/config.ts rename to v1/src/constants/config.ts diff --git a/src/constants/strings.ts b/v1/src/constants/strings.ts similarity index 100% rename from src/constants/strings.ts rename to v1/src/constants/strings.ts diff --git a/src/data/experiences.ts b/v1/src/data/experiences.ts similarity index 100% rename from src/data/experiences.ts rename to v1/src/data/experiences.ts diff --git a/src/data/navMenus.ts b/v1/src/data/navMenus.ts similarity index 100% rename from src/data/navMenus.ts rename to v1/src/data/navMenus.ts diff --git a/src/data/projects.ts b/v1/src/data/projects.ts similarity index 100% rename from src/data/projects.ts rename to v1/src/data/projects.ts diff --git a/src/data/services.ts b/v1/src/data/services.ts similarity index 100% rename from src/data/services.ts rename to v1/src/data/services.ts diff --git a/src/data/skills.ts b/v1/src/data/skills.ts similarity index 100% rename from src/data/skills.ts rename to v1/src/data/skills.ts diff --git a/src/data/socialLinks.ts b/v1/src/data/socialLinks.ts similarity index 100% rename from src/data/socialLinks.ts rename to v1/src/data/socialLinks.ts diff --git a/src/hooks/useIsInViewport.ts b/v1/src/hooks/useIsInViewport.ts similarity index 100% rename from src/hooks/useIsInViewport.ts rename to v1/src/hooks/useIsInViewport.ts diff --git a/src/hooks/useMobileNav.ts b/v1/src/hooks/useMobileNav.ts similarity index 100% rename from src/hooks/useMobileNav.ts rename to v1/src/hooks/useMobileNav.ts diff --git a/src/hooks/useOnClickOutside.ts b/v1/src/hooks/useOnClickOutside.ts similarity index 100% rename from src/hooks/useOnClickOutside.ts rename to v1/src/hooks/useOnClickOutside.ts diff --git a/src/hooks/useScrolled.ts b/v1/src/hooks/useScrolled.ts similarity index 100% rename from src/hooks/useScrolled.ts rename to v1/src/hooks/useScrolled.ts diff --git a/src/hooks/useVisibleSection.ts b/v1/src/hooks/useVisibleSection.ts similarity index 100% rename from src/hooks/useVisibleSection.ts rename to v1/src/hooks/useVisibleSection.ts diff --git a/src/hooks/useWindowDimensions.ts b/v1/src/hooks/useWindowDimensions.ts similarity index 100% rename from src/hooks/useWindowDimensions.ts rename to v1/src/hooks/useWindowDimensions.ts diff --git a/src/types/index.ts b/v1/src/types/index.ts similarity index 100% rename from src/types/index.ts rename to v1/src/types/index.ts diff --git a/src/utils/cn.ts b/v1/src/utils/cn.ts similarity index 100% rename from src/utils/cn.ts rename to v1/src/utils/cn.ts diff --git a/tailwind.config.ts b/v1/tailwind.config.ts similarity index 100% rename from tailwind.config.ts rename to v1/tailwind.config.ts diff --git a/tsconfig.json b/v1/tsconfig.json similarity index 100% rename from tsconfig.json rename to v1/tsconfig.json diff --git a/v2/.gitignore b/v2/.gitignore new file mode 100644 index 0000000..c035238 --- /dev/null +++ b/v2/.gitignore @@ -0,0 +1,48 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +# lock +package-lock.json +pnpm-lock.yaml +yarn.lock +bun.lock +bun.lockb \ No newline at end of file diff --git a/v2/README.md b/v2/README.md new file mode 100644 index 0000000..e29f3a1 --- /dev/null +++ b/v2/README.md @@ -0,0 +1,43 @@ +# Portfolio Website (v2) + +This is the new version (v2) of my portfolio website built with [Next.js 15](https://nextjs.org) and [Tailwind CSS v4](https://tailwindcss.com/). + +This directory is part of a monorepo structure where: + +- `v1/` contains the original portfolio website +- `v2/` (this directory) contains the new redesigned portfolio website + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +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. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/v2/components.json b/v2/components.json new file mode 100644 index 0000000..0e8b633 --- /dev/null +++ b/v2/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.ts", + "css": "src/app/globals.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "iconLibrary": "lucide" +} \ No newline at end of file diff --git a/v2/eslint.config.mjs b/v2/eslint.config.mjs new file mode 100644 index 0000000..c85fb67 --- /dev/null +++ b/v2/eslint.config.mjs @@ -0,0 +1,16 @@ +import { dirname } from "path"; +import { fileURLToPath } from "url"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, +}); + +const eslintConfig = [ + ...compat.extends("next/core-web-vitals", "next/typescript"), +]; + +export default eslintConfig; diff --git a/v2/next.config.ts b/v2/next.config.ts new file mode 100644 index 0000000..e9ffa30 --- /dev/null +++ b/v2/next.config.ts @@ -0,0 +1,7 @@ +import type { NextConfig } from "next"; + +const nextConfig: NextConfig = { + /* config options here */ +}; + +export default nextConfig; diff --git a/v2/package.json b/v2/package.json new file mode 100644 index 0000000..ce73ef3 --- /dev/null +++ b/v2/package.json @@ -0,0 +1,72 @@ +{ + "name": "portfolio-nextjs", + "version": "2.0.0", + "private": true, + "scripts": { + "dev": "next dev --turbopack", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@hookform/resolvers": "^5.0.1", + "@radix-ui/react-accordion": "^1.2.11", + "@radix-ui/react-alert-dialog": "^1.1.14", + "@radix-ui/react-aspect-ratio": "^1.1.7", + "@radix-ui/react-avatar": "^1.1.10", + "@radix-ui/react-checkbox": "^1.3.2", + "@radix-ui/react-collapsible": "^1.1.11", + "@radix-ui/react-context-menu": "^2.2.15", + "@radix-ui/react-dialog": "^1.1.14", + "@radix-ui/react-dropdown-menu": "^2.1.15", + "@radix-ui/react-hover-card": "^1.1.14", + "@radix-ui/react-label": "^2.1.7", + "@radix-ui/react-menubar": "^1.1.15", + "@radix-ui/react-navigation-menu": "^1.2.13", + "@radix-ui/react-popover": "^1.1.14", + "@radix-ui/react-progress": "^1.1.7", + "@radix-ui/react-radio-group": "^1.3.7", + "@radix-ui/react-scroll-area": "^1.2.9", + "@radix-ui/react-select": "^2.2.5", + "@radix-ui/react-separator": "^1.1.7", + "@radix-ui/react-slider": "^1.3.5", + "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-switch": "^1.2.5", + "@radix-ui/react-tabs": "^1.1.12", + "@radix-ui/react-toggle": "^1.1.9", + "@radix-ui/react-toggle-group": "^1.1.10", + "@radix-ui/react-tooltip": "^1.2.7", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cmdk": "^1.1.1", + "date-fns": "^4.1.0", + "embla-carousel-react": "^8.6.0", + "input-otp": "^1.4.2", + "lucide-react": "^0.511.0", + "next": "15.1.8", + "next-themes": "^0.4.6", + "react": "^19.1.0", + "react-day-picker": "9.7.0", + "react-dom": "^19.1.0", + "react-hook-form": "^7.56.4", + "react-resizable-panels": "^3.0.2", + "recharts": "^2.15.3", + "sonner": "^2.0.3", + "tailwind-merge": "^3.3.0", + "vaul": "^1.1.2", + "zod": "^3.25.28" + }, + "devDependencies": { + "@eslint/eslintrc": "^3.3.1", + "@tailwindcss/postcss": "^4.1.7", + "@types/node": "^22.15.21", + "@types/react": "^19.1.5", + "@types/react-dom": "^19.1.5", + "eslint": "^9.27.0", + "eslint-config-next": "15.1.8", + "postcss": "^8.5.3", + "tailwindcss": "^4.1.7", + "tw-animate-css": "^1.3.0", + "typescript": "^5.8.3" + } +} diff --git a/v2/postcss.config.mjs b/v2/postcss.config.mjs new file mode 100644 index 0000000..5d6d845 --- /dev/null +++ b/v2/postcss.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: { + '@tailwindcss/postcss': {}, + }, +}; + +export default config; diff --git a/v2/public/file.svg b/v2/public/file.svg new file mode 100644 index 0000000..004145c --- /dev/null +++ b/v2/public/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/v2/public/globe.svg b/v2/public/globe.svg new file mode 100644 index 0000000..567f17b --- /dev/null +++ b/v2/public/globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/v2/public/next.svg b/v2/public/next.svg new file mode 100644 index 0000000..5174b28 --- /dev/null +++ b/v2/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/v2/public/vercel.svg b/v2/public/vercel.svg new file mode 100644 index 0000000..7705396 --- /dev/null +++ b/v2/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/v2/public/window.svg b/v2/public/window.svg new file mode 100644 index 0000000..b2b2a44 --- /dev/null +++ b/v2/public/window.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/v2/src/app/favicon.ico b/v2/src/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/v2/src/app/globals.css b/v2/src/app/globals.css new file mode 100644 index 0000000..a47edc6 --- /dev/null +++ b/v2/src/app/globals.css @@ -0,0 +1,216 @@ +@import "tailwindcss"; + +@import "tw-animate-css"; + +@custom-variant dark (&:is(.dark *)); + +@theme inline { + --radius-sm: calc(var(--radius) - 4px); + + --radius-md: calc(var(--radius) - 2px); + + --radius-lg: var(--radius); + + --radius-xl: calc(var(--radius) + 4px); + + --color-background: var(--background); + + --color-foreground: var(--foreground); + + --color-card: var(--card); + + --color-card-foreground: var(--card-foreground); + + --color-popover: var(--popover); + + --color-popover-foreground: var(--popover-foreground); + + --color-primary: var(--primary); + + --color-primary-foreground: var(--primary-foreground); + + --color-secondary: var(--secondary); + + --color-secondary-foreground: var(--secondary-foreground); + + --color-muted: var(--muted); + + --color-muted-foreground: var(--muted-foreground); + + --color-accent: var(--accent); + + --color-accent-foreground: var(--accent-foreground); + + --color-destructive: var(--destructive); + + --color-border: var(--border); + + --color-input: var(--input); + + --color-ring: var(--ring); + + --color-chart-1: var(--chart-1); + + --color-chart-2: var(--chart-2); + + --color-chart-3: var(--chart-3); + + --color-chart-4: var(--chart-4); + + --color-chart-5: var(--chart-5); + + --color-sidebar: var(--sidebar); + + --color-sidebar-foreground: var(--sidebar-foreground); + + --color-sidebar-primary: var(--sidebar-primary); + + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + + --color-sidebar-accent: var(--sidebar-accent); + + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + + --color-sidebar-border: var(--sidebar-border); + + --color-sidebar-ring: var(--sidebar-ring); +} + +:root { + --radius: 0.625rem; + + --background: oklch(1 0 0); + + --foreground: oklch(0.145 0 0); + + --card: oklch(1 0 0); + + --card-foreground: oklch(0.145 0 0); + + --popover: oklch(1 0 0); + + --popover-foreground: oklch(0.145 0 0); + + --primary: oklch(0.205 0 0); + + --primary-foreground: oklch(0.985 0 0); + + --secondary: oklch(0.97 0 0); + + --secondary-foreground: oklch(0.205 0 0); + + --muted: oklch(0.97 0 0); + + --muted-foreground: oklch(0.556 0 0); + + --accent: oklch(0.97 0 0); + + --accent-foreground: oklch(0.205 0 0); + + --destructive: oklch(0.577 0.245 27.325); + + --border: oklch(0.922 0 0); + + --input: oklch(0.922 0 0); + + --ring: oklch(0.708 0 0); + + --chart-1: oklch(0.646 0.222 41.116); + + --chart-2: oklch(0.6 0.118 184.704); + + --chart-3: oklch(0.398 0.07 227.392); + + --chart-4: oklch(0.828 0.189 84.429); + + --chart-5: oklch(0.769 0.188 70.08); + + --sidebar: oklch(0.985 0 0); + + --sidebar-foreground: oklch(0.145 0 0); + + --sidebar-primary: oklch(0.205 0 0); + + --sidebar-primary-foreground: oklch(0.985 0 0); + + --sidebar-accent: oklch(0.97 0 0); + + --sidebar-accent-foreground: oklch(0.205 0 0); + + --sidebar-border: oklch(0.922 0 0); + + --sidebar-ring: oklch(0.708 0 0); +} + +.dark { + --background: oklch(0.145 0 0); + + --foreground: oklch(0.985 0 0); + + --card: oklch(0.205 0 0); + + --card-foreground: oklch(0.985 0 0); + + --popover: oklch(0.205 0 0); + + --popover-foreground: oklch(0.985 0 0); + + --primary: oklch(0.922 0 0); + + --primary-foreground: oklch(0.205 0 0); + + --secondary: oklch(0.269 0 0); + + --secondary-foreground: oklch(0.985 0 0); + + --muted: oklch(0.269 0 0); + + --muted-foreground: oklch(0.708 0 0); + + --accent: oklch(0.269 0 0); + + --accent-foreground: oklch(0.985 0 0); + + --destructive: oklch(0.704 0.191 22.216); + + --border: oklch(1 0 0 / 10%); + + --input: oklch(1 0 0 / 15%); + + --ring: oklch(0.556 0 0); + + --chart-1: oklch(0.488 0.243 264.376); + + --chart-2: oklch(0.696 0.17 162.48); + + --chart-3: oklch(0.769 0.188 70.08); + + --chart-4: oklch(0.627 0.265 303.9); + + --chart-5: oklch(0.645 0.246 16.439); + + --sidebar: oklch(0.205 0 0); + + --sidebar-foreground: oklch(0.985 0 0); + + --sidebar-primary: oklch(0.488 0.243 264.376); + + --sidebar-primary-foreground: oklch(0.985 0 0); + + --sidebar-accent: oklch(0.269 0 0); + + --sidebar-accent-foreground: oklch(0.985 0 0); + + --sidebar-border: oklch(1 0 0 / 10%); + + --sidebar-ring: oklch(0.556 0 0); +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/v2/src/app/layout.tsx b/v2/src/app/layout.tsx new file mode 100644 index 0000000..f7fa87e --- /dev/null +++ b/v2/src/app/layout.tsx @@ -0,0 +1,34 @@ +import type { Metadata } from "next"; +import { Geist, Geist_Mono } from "next/font/google"; +import "./globals.css"; + +const geistSans = Geist({ + variable: "--font-geist-sans", + subsets: ["latin"], +}); + +const geistMono = Geist_Mono({ + variable: "--font-geist-mono", + subsets: ["latin"], +}); + +export const metadata: Metadata = { + title: "Create Next App", + description: "Generated by create next app", +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + {children} + + + ); +} diff --git a/v2/src/app/page.tsx b/v2/src/app/page.tsx new file mode 100644 index 0000000..5d2a0e4 --- /dev/null +++ b/v2/src/app/page.tsx @@ -0,0 +1,101 @@ +import Image from "next/image"; + +export default function Home() { + return ( +

+
+ Next.js logo +
    +
  1. + Get started by editing{" "} + + src/app/page.tsx + + . +
  2. +
  3. Save and see your changes instantly.
  4. +
+ + +
+ +
+ ); +} diff --git a/v2/src/components/ui/accordion.tsx b/v2/src/components/ui/accordion.tsx new file mode 100644 index 0000000..4a8cca4 --- /dev/null +++ b/v2/src/components/ui/accordion.tsx @@ -0,0 +1,66 @@ +"use client" + +import * as React from "react" +import * as AccordionPrimitive from "@radix-ui/react-accordion" +import { ChevronDownIcon } from "lucide-react" + +import { cn } from "@/lib/utils" + +function Accordion({ + ...props +}: React.ComponentProps) { + return +} + +function AccordionItem({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AccordionTrigger({ + className, + children, + ...props +}: React.ComponentProps) { + return ( + + svg]:rotate-180", + className + )} + {...props} + > + {children} + + + + ) +} + +function AccordionContent({ + className, + children, + ...props +}: React.ComponentProps) { + return ( + +
{children}
+
+ ) +} + +export { Accordion, AccordionItem, AccordionTrigger, AccordionContent } diff --git a/v2/src/components/ui/alert-dialog.tsx b/v2/src/components/ui/alert-dialog.tsx new file mode 100644 index 0000000..0863e40 --- /dev/null +++ b/v2/src/components/ui/alert-dialog.tsx @@ -0,0 +1,157 @@ +"use client" + +import * as React from "react" +import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog" + +import { cn } from "@/lib/utils" +import { buttonVariants } from "@/components/ui/button" + +function AlertDialog({ + ...props +}: React.ComponentProps) { + return +} + +function AlertDialogTrigger({ + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AlertDialogPortal({ + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AlertDialogOverlay({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AlertDialogContent({ + className, + ...props +}: React.ComponentProps) { + return ( + + + + + ) +} + +function AlertDialogHeader({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function AlertDialogFooter({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function AlertDialogTitle({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AlertDialogDescription({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AlertDialogAction({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AlertDialogCancel({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +export { + AlertDialog, + AlertDialogPortal, + AlertDialogOverlay, + AlertDialogTrigger, + AlertDialogContent, + AlertDialogHeader, + AlertDialogFooter, + AlertDialogTitle, + AlertDialogDescription, + AlertDialogAction, + AlertDialogCancel, +} diff --git a/v2/src/components/ui/alert.tsx b/v2/src/components/ui/alert.tsx new file mode 100644 index 0000000..1421354 --- /dev/null +++ b/v2/src/components/ui/alert.tsx @@ -0,0 +1,66 @@ +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const alertVariants = cva( + "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current", + { + variants: { + variant: { + default: "bg-card text-card-foreground", + destructive: + "text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +function Alert({ + className, + variant, + ...props +}: React.ComponentProps<"div"> & VariantProps) { + return ( +
+ ) +} + +function AlertTitle({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function AlertDescription({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ ) +} + +export { Alert, AlertTitle, AlertDescription } diff --git a/v2/src/components/ui/aspect-ratio.tsx b/v2/src/components/ui/aspect-ratio.tsx new file mode 100644 index 0000000..3df3fd0 --- /dev/null +++ b/v2/src/components/ui/aspect-ratio.tsx @@ -0,0 +1,11 @@ +"use client" + +import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio" + +function AspectRatio({ + ...props +}: React.ComponentProps) { + return +} + +export { AspectRatio } diff --git a/v2/src/components/ui/avatar.tsx b/v2/src/components/ui/avatar.tsx new file mode 100644 index 0000000..71e428b --- /dev/null +++ b/v2/src/components/ui/avatar.tsx @@ -0,0 +1,53 @@ +"use client" + +import * as React from "react" +import * as AvatarPrimitive from "@radix-ui/react-avatar" + +import { cn } from "@/lib/utils" + +function Avatar({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AvatarImage({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AvatarFallback({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +export { Avatar, AvatarImage, AvatarFallback } diff --git a/v2/src/components/ui/badge.tsx b/v2/src/components/ui/badge.tsx new file mode 100644 index 0000000..0205413 --- /dev/null +++ b/v2/src/components/ui/badge.tsx @@ -0,0 +1,46 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const badgeVariants = cva( + "inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90", + secondary: + "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90", + destructive: + "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + outline: + "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +function Badge({ + className, + variant, + asChild = false, + ...props +}: React.ComponentProps<"span"> & + VariantProps & { asChild?: boolean }) { + const Comp = asChild ? Slot : "span" + + return ( + + ) +} + +export { Badge, badgeVariants } diff --git a/v2/src/components/ui/breadcrumb.tsx b/v2/src/components/ui/breadcrumb.tsx new file mode 100644 index 0000000..eb88f32 --- /dev/null +++ b/v2/src/components/ui/breadcrumb.tsx @@ -0,0 +1,109 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { ChevronRight, MoreHorizontal } from "lucide-react" + +import { cn } from "@/lib/utils" + +function Breadcrumb({ ...props }: React.ComponentProps<"nav">) { + return