From 68aa9a373f016197b9f062acebdc0dfd3ec71ea0 Mon Sep 17 00:00:00 2001 From: 04widodo <04widodo@gmail.com> Date: Wed, 13 May 2026 15:46:12 +0700 Subject: [PATCH] porto --- package-lock.json | 13 +- package.json | 3 +- .../corner-footer-1.svg | 0 .../corner-footer-2.svg | 0 public/image/portofolio/serba-mas.png | Bin 0 -> 4517 bytes public/style/globals.css | 11 ++ src/app/layout.tsx | 4 +- src/app/portfolio/client-image.tsx | 62 +++++++ src/app/portfolio/page.tsx | 164 ++++++++++++++++++ src/components/footer.tsx | 41 +++++ src/components/navbar.tsx | 2 +- 11 files changed, 296 insertions(+), 4 deletions(-) rename public/image/{portofolio => footer}/corner-footer-1.svg (100%) rename public/image/{portofolio => footer}/corner-footer-2.svg (100%) create mode 100644 public/image/portofolio/serba-mas.png create mode 100644 src/app/portfolio/client-image.tsx create mode 100644 src/components/footer.tsx diff --git a/package-lock.json b/package-lock.json index 186c6c0..a0667a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,8 @@ "@phosphor-icons/react": "^2.1.10", "next": "16.2.6", "react": "19.2.4", - "react-dom": "19.2.4" + "react-dom": "19.2.4", + "react-fast-marquee": "^1.6.5" }, "devDependencies": { "@tailwindcss/postcss": "^4", @@ -5457,6 +5458,16 @@ "react": "^19.2.4" } }, + "node_modules/react-fast-marquee": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/react-fast-marquee/-/react-fast-marquee-1.6.5.tgz", + "integrity": "sha512-swDnPqrT2XISAih0o74zQVE2wQJFMvkx+9VZXYYNSLb/CUcAzU9pNj637Ar2+hyRw6b4tP6xh4GQZip2ZCpQpg==", + "license": "MIT", + "peerDependencies": { + "react": ">= 16.8.0 || ^18.0.0", + "react-dom": ">= 16.8.0 || ^18.0.0" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", diff --git a/package.json b/package.json index ab8ec40..ae7e893 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "@phosphor-icons/react": "^2.1.10", "next": "16.2.6", "react": "19.2.4", - "react-dom": "19.2.4" + "react-dom": "19.2.4", + "react-fast-marquee": "^1.6.5" }, "devDependencies": { "@tailwindcss/postcss": "^4", diff --git a/public/image/portofolio/corner-footer-1.svg b/public/image/footer/corner-footer-1.svg similarity index 100% rename from public/image/portofolio/corner-footer-1.svg rename to public/image/footer/corner-footer-1.svg diff --git a/public/image/portofolio/corner-footer-2.svg b/public/image/footer/corner-footer-2.svg similarity index 100% rename from public/image/portofolio/corner-footer-2.svg rename to public/image/footer/corner-footer-2.svg diff --git a/public/image/portofolio/serba-mas.png b/public/image/portofolio/serba-mas.png new file mode 100644 index 0000000000000000000000000000000000000000..8219e0779444c456b99b134dd9f1d18f36418e53 GIT binary patch literal 4517 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 { return ( - +
{children}
+