Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
13 changes: 7 additions & 6 deletions package.json → client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,20 @@
"lint": "next lint"
},
"dependencies": {
"lucide-react": "^0.544.0",
"next": "15.4.5",
"react": "19.1.0",
"react-dom": "19.1.0",
"next": "15.4.5"
"react-dom": "19.1.0"
},
"devDependencies": {
"typescript": "^5",
"@eslint/eslintrc": "^3",
"@tailwindcss/postcss": "^4",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
"@tailwindcss/postcss": "^4",
"tailwindcss": "^4",
"eslint": "^9",
"eslint-config-next": "15.4.5",
"@eslint/eslintrc": "^3"
"tailwindcss": "^4",
"typescript": "^5"
}
}
12 changes: 12 additions & 0 deletions pnpm-lock.yaml → client/pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

File renamed without changes.
File renamed without changes
File renamed without changes
Binary file added client/public/grand_seiko_banner.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes.
File renamed without changes.
8 changes: 7 additions & 1 deletion src/app/layout.tsx → client/src/app/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import "./globals.css";
import Navbar from "@/components/Navbar";
import Footer from "@/components/Footer";

const geistSans = Geist({
variable: "--font-geist-sans",
Expand All @@ -27,7 +29,11 @@ export default function RootLayout({
<body
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
>
{children}
<div className="mx-auto p-4 sm:max-w-xl md:max-w-2xl lg:max-w-3xl xl:max-w-6xl">
<Navbar />
{children}
<Footer />
</div>
</body>
</html>
);
Expand Down
18 changes: 18 additions & 0 deletions client/src/app/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import Image from "next/image";

const Homepage = () => {
return (
<div className="">
<div className="relative aspect-[3/1]">
<Image
src="/grand_seiko_banner.webp"
alt="ساعت گرند سیکو"
fill
className="object-cover -"
/>
</div>
</div>
);
};

export default Homepage;
48 changes: 48 additions & 0 deletions client/src/components/Footer.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import { Watch } from "lucide-react";
import Image from "next/image";
import Link from "next/link";

const Footer = () => {
return (
<div className="mt-16 flex flex-col items-center gap-8 md:gap-0 md:flex-row md:items-start md:justify-between bg-gray-800 p-8 rounded-lg">
<div className="flex flex-col gap-4 items-center md:items-start">
<Link href={"/"} className="flex items-center text-white">
<Watch
width={36}
height={36}
className="
w-6 h-6 md:w-9 md:h-9"
/>
<p className="hidden md:block font-medium text-md tracking-wider">
SilverWatch
</p>
</Link>
<p className="text-sm text-gray-400">© 2025 Alikhanix</p>
<p className="text-sm text-gray-400">All rights reserved</p>
</div>
<div className="flex flex-col gap-4 text-sm text-gray-400 items-center md:items-start">
<p className="text-sm text-amber-50">Links</p>
<Link href={"/"}>Homepage</Link>
<Link href={"/"}>Contact</Link>
<Link href={"/"}>Terms of Service</Link>
<Link href={"/"}>Privacy policy</Link>
</div>
<div className="flex flex-col gap-4 text-sm text-gray-400 items-center md:items-start">
<p className="text-sm text-amber-50">Links</p>
<Link href={"/"}>Homepage</Link>
<Link href={"/"}>Contact</Link>
<Link href={"/"}>Terms of Service</Link>
<Link href={"/"}>Privacy policy</Link>
</div>
<div className="flex flex-col gap-4 text-sm text-gray-400 items-center md:items-start">
<p className="text-sm text-amber-50">Links</p>
<Link href={"/"}>Homepage</Link>
<Link href={"/"}>Contact</Link>
<Link href={"/"}>Terms of Service</Link>
<Link href={"/"}>Privacy policy</Link>
</div>
</div>
);
};

export default Footer;
48 changes: 48 additions & 0 deletions client/src/components/Navbar.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import Image from "next/image";
import Link from "next/link";
import SearchBar from "./SearchBar";
import { Bell, Home, ShoppingCart, Watch } from "lucide-react";

const Navbar = () => {
return (
<nav className="w-full flex justify-between items-center border-b border-gray-200 pb-4">
{/* Left */}
<Link href={"/"} className="flex items-center">
{/* <Image
src={"/logo.png"}
alt="Trend Lama"
width={36}
height={36}
className="w-6 h-6 md:w-9 md:h-9"
/> */}
<Watch
width={36}
height={36}
className="
w-6 h-6 md:w-9 md:h-9"
/>
<p className="hidden md:block font-medium text-md tracking-wider">
SilverWatch
</p>
</Link>

{/* Right */}
<div className="flex items-center gap-6">
<SearchBar />
<Link href={"/"}>
<Home className="w-4 h-4 text-gray-600" />
</Link>
<Link href={"/"}>
<Bell className="w-4 h-4 text-gray-600" />
</Link>
<Link href={"/"}>
<ShoppingCart className="w-4 h-4 text-gray-600" />
</Link>

<Link href={"/login"}>Sign In</Link>
</div>
</nav>
);
};

export default Navbar;
117 changes: 117 additions & 0 deletions client/src/components/ProductList.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
// TEMPORARY
const products = [
{
id: 1,
name: "Adidas CoreFit T-Shirt",
shortDescription:
"Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit.",
description:
"Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit. Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit. Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit.",
price: 39.9,
sizes: ["s", "m", "l", "xl", "xxl"],
colors: ["gray", "purple", "green"],
images: {
gray: "/products/1g.png",
purple: "/products/1p.png",
green: "/products/1gr.png",
},
},
{
id: 2,
name: "Puma Ultra Warm Zip",
shortDescription:
"Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit.",
description:
"Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit. Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit. Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit.",
price: 59.9,
sizes: ["s", "m", "l", "xl"],
colors: ["gray", "green"],
images: { gray: "/products/2g.png", green: "/products/2gr.png" },
},
{
id: 3,
name: "Nike Air Essentials Pullover",
shortDescription:
"Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit.",
description:
"Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit. Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit. Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit.",
price: 69.9,
sizes: ["s", "m", "l"],
colors: ["green", "blue", "black"],
images: {
green: "/products/3gr.png",
blue: "/products/3b.png",
black: "/products/3bl.png",
},
},
{
id: 4,
name: "Nike Dri Flex T-Shirt",
shortDescription:
"Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit.",
description:
"Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit. Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit. Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit.",
price: 29.9,
sizes: ["s", "m", "l"],
colors: ["white", "pink"],
images: { white: "/products/4w.png", pink: "/products/4p.png" },
},
{
id: 5,
name: "Under Armour StormFleece",
shortDescription:
"Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit.",
description:
"Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit. Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit. Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit.",
price: 49.9,
sizes: ["s", "m", "l"],
colors: ["red", "orange", "black"],
images: {
red: "/products/5r.png",
orange: "/products/5o.png",
black: "/products/5bl.png",
},
},
{
id: 6,
name: "Nike Air Max 270",
shortDescription:
"Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit.",
description:
"Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit. Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit. Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit.",
price: 59.9,
sizes: ["40", "42", "43", "44"],
colors: ["gray", "white"],
images: { gray: "/products/6g.png", white: "/products/6w.png" },
},
{
id: 7,
name: "Nike Ultraboost Pulse ",
shortDescription:
"Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit.",
description:
"Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit. Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit. Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit.",
price: 69.9,
sizes: ["40", "42", "43"],
colors: ["gray", "pink"],
images: { gray: "/products/7g.png", pink: "/products/7p.png" },
},
{
id: 8,
name: "Levi’s Classic Denim",
shortDescription:
"Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit.",
description:
"Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit. Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit. Lorem ipsum dolor sit amet consect adipisicing elit lorem ipsum dolor sit.",
price: 59.9,
sizes: ["s", "m", "l"],
colors: ["blue", "green"],
images: { blue: "/products/8b.png", green: "/products/8gr.png" },
},
];

const ProductList = () => {
return <div>ProductList</div>;
};

export default ProductList;
16 changes: 16 additions & 0 deletions client/src/components/SearchBar.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { Search } from "lucide-react";

const SearchBar = () => {
return (
<div className="hidden sm:flex items-center gap-2 rounded-md ring-1 ring-gray-200 px-2 py-1 shadow-md">
<Search className="w-4 h-4 text-gray-500" />
<input
id="search"
placeholder="Search..."
className="text-sm outline-0"
/>
</div>
);
};

export default SearchBar;
File renamed without changes.
7 changes: 0 additions & 7 deletions src/app/page.tsx

This file was deleted.