├── app ├── favicon.ico ├── about │ └── page.tsx ├── layout.tsx ├── globals.css ├── layout-backup.tsx ├── menu │ └── page.tsx ├── contact │ └── page.tsx └── page.tsx ├── postcss.config.mjs ├── public ├── cofe.jpeg ├── vercel.svg ├── window.svg ├── file.svg ├── globe.svg └── next.svg ├── components ├── Navbar.tsx ├── Header │ ├── Logo.tsx │ ├── CTAButton.tsx │ ├── index.tsx │ └── Navigation.tsx ├── Common │ └── Button.tsx ├── Footer.tsx ├── Menu │ └── MenuSection.tsx └── Reservation │ └── ReservationSection.tsx ├── .hintrc ├── next.config.ts ├── eslint.config.mjs ├── package.json ├── .gitignore ├── tsconfig.json └── README.md /app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YALDAKHOSHPEY/COFFEE-SHOP-WEBSITE/HEAD/app/favicon.ico -------------------------------------------------------------------------------- /postcss.config.mjs: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | '@tailwindcss/postcss': {}, 4 | }, 5 | }; -------------------------------------------------------------------------------- /public/cofe.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YALDAKHOSHPEY/COFFEE-SHOP-WEBSITE/HEAD/public/cofe.jpeg -------------------------------------------------------------------------------- /components/Navbar.tsx: -------------------------------------------------------------------------------- 1 | import Header from './Header'; 2 | 3 | export default function Navbar() { 4 | return
; 5 | } 6 | -------------------------------------------------------------------------------- /public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.hintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "development" 4 | ], 5 | "hints": { 6 | "no-inline-styles": "off", 7 | "axe/forms": "off" 8 | } 9 | } -------------------------------------------------------------------------------- /next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from "next"; 2 | 3 | const nextConfig: NextConfig = { 4 | /* config options here */ 5 | }; 6 | 7 | export default nextConfig; 8 | -------------------------------------------------------------------------------- /components/Header/Logo.tsx: -------------------------------------------------------------------------------- 1 | import Link from 'next/link'; 2 | 3 | export default function Logo() { 4 | return ( 5 | 6 | Coffee Haven 7 | 8 | ); 9 | } 10 | -------------------------------------------------------------------------------- /components/Header/CTAButton.tsx: -------------------------------------------------------------------------------- 1 | import Link from 'next/link'; 2 | 3 | export default function CTAButton() { 4 | return ( 5 | 9 | رزرو میز 10 | 11 | ); 12 | } 13 | -------------------------------------------------------------------------------- /public/window.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /components/Header/index.tsx: -------------------------------------------------------------------------------- 1 | import Logo from './Logo'; 2 | import Navigation from './Navigation'; 3 | import CTAButton from './CTAButton'; 4 | 5 | export default function Header() { 6 | return ( 7 | 14 | ); 15 | } 16 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { defineConfig, globalIgnores } from "eslint/config"; 2 | import nextVitals from "eslint-config-next/core-web-vitals"; 3 | import nextTs from "eslint-config-next/typescript"; 4 | 5 | const eslintConfig = defineConfig([ 6 | ...nextVitals, 7 | ...nextTs, 8 | // Override default ignores of eslint-config-next. 9 | globalIgnores([ 10 | // Default ignores of eslint-config-next: 11 | ".next/**", 12 | "out/**", 13 | "build/**", 14 | "next-env.d.ts", 15 | ]), 16 | ]); 17 | 18 | export default eslintConfig; 19 | -------------------------------------------------------------------------------- /app/about/page.tsx: -------------------------------------------------------------------------------- 1 | export default function About() { 2 | return ( 3 |
4 |

About Us

5 |
6 |

Coffee Haven opened in 2020 with a passion for great coffee.

7 |

We source our beans from local roasters and bake everything in-house.

8 |

Come visit us at 123 Coffee Street!

9 |
10 |
11 | ); 12 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "coffee-shop-website", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "eslint" 10 | }, 11 | "dependencies": { 12 | "next": "16.0.1", 13 | "react": "19.2.0", 14 | "react-dom": "19.2.0" 15 | }, 16 | "devDependencies": { 17 | "@tailwindcss/postcss": "^4.1.16", 18 | "@types/node": "^20", 19 | "@types/react": "^19", 20 | "@types/react-dom": "^19", 21 | "eslint": "^9", 22 | "eslint-config-next": "16.0.1", 23 | "tailwindcss": "^4", 24 | "typescript": "^5" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /.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.* 7 | .yarn/* 8 | !.yarn/patches 9 | !.yarn/plugins 10 | !.yarn/releases 11 | !.yarn/versions 12 | 13 | # testing 14 | /coverage 15 | 16 | # next.js 17 | /.next/ 18 | /out/ 19 | 20 | # production 21 | /build 22 | 23 | # misc 24 | .DS_Store 25 | *.pem 26 | 27 | # debug 28 | npm-debug.log* 29 | yarn-debug.log* 30 | yarn-error.log* 31 | .pnpm-debug.log* 32 | 33 | # env files (can opt-in for committing if needed) 34 | .env* 35 | 36 | # vercel 37 | .vercel 38 | 39 | # typescript 40 | *.tsbuildinfo 41 | next-env.d.ts 42 | node_modules/ 43 | .next/ 44 | .env* 45 | *.log 46 | .DS_Store -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2017", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "noEmit": true, 9 | "esModuleInterop": true, 10 | "module": "esnext", 11 | "moduleResolution": "bundler", 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "jsx": "react-jsx", 15 | "incremental": true, 16 | "plugins": [ 17 | { 18 | "name": "next" 19 | } 20 | ], 21 | "paths": { 22 | "@/*": ["./*"] 23 | } 24 | }, 25 | "include": [ 26 | "next-env.d.ts", 27 | "**/*.ts", 28 | "**/*.tsx", 29 | ".next/types/**/*.ts", 30 | ".next/dev/types/**/*.ts", 31 | "**/*.mts" 32 | ], 33 | "exclude": ["node_modules"] 34 | } 35 | -------------------------------------------------------------------------------- /components/Common/Button.tsx: -------------------------------------------------------------------------------- 1 | export function Button({ children, href, onClick, variant = 'primary', className = '' }: { 2 | children: React.ReactNode; 3 | href?: string; 4 | onClick?: () => void; 5 | variant?: 'primary' | 'secondary'; 6 | className?: string; 7 | }) { 8 | const baseClasses = 'px-6 py-3 rounded-lg font-semibold transition-colors'; 9 | const variants = { 10 | primary: 'bg-yellow-600 hover:bg-yellow-700 text-white', 11 | secondary: 'border-2 border-white hover:bg-white hover:text-gray-900 text-white' 12 | }; 13 | 14 | const classes = ${baseClasses} ; 15 | 16 | if (href) { 17 | return ( 18 | 19 | {children} 20 | 21 | ); 22 | } 23 | 24 | return ( 25 | 28 | ); 29 | } 30 | -------------------------------------------------------------------------------- /components/Header/Navigation.tsx: -------------------------------------------------------------------------------- 1 | import Link from 'next/link'; 2 | 3 | export default function Navigation() { 4 | return ( 5 | 27 | ); 28 | } 29 | -------------------------------------------------------------------------------- /app/layout.tsx: -------------------------------------------------------------------------------- 1 | import './globals.css'; 2 | import Navbar from '../components/Navbar'; 3 | import Footer from '../components/Footer'; 4 | import type { Metadata } from 'next'; 5 | 6 | export const metadata: Metadata = { 7 | title: 'Coffee Haven | کافیشاپ لوکس', 8 | description: 'طعم طلایی و آرامش یاقوتی', 9 | }; 10 | 11 | export default function RootLayout({ children }: { children: React.ReactNode }) { 12 | return ( 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
{children}
21 |