├── .husky └── pre-commit ├── src ├── app │ ├── icon.png │ ├── favicon.ico │ ├── apple-icon.png │ ├── robots.ts │ ├── about │ │ └── page.tsx │ ├── privacy │ │ └── policy │ │ │ └── page.tsx │ ├── terms │ │ └── and │ │ │ └── conditions │ │ │ └── page.tsx │ ├── pricing │ │ └── page.tsx │ ├── studies │ │ └── page.tsx │ ├── portfolio │ │ └── page.tsx │ ├── sitemap.ts │ ├── layout.tsx │ ├── page.tsx │ ├── legal │ │ └── notice │ │ │ └── page.tsx │ └── service │ │ ├── mobile │ │ └── page.tsx │ │ ├── website │ │ ├── development │ │ │ └── page.tsx │ │ └── design │ │ │ └── page.tsx │ │ ├── smm │ │ └── page.tsx │ │ ├── ppc │ │ └── page.tsx │ │ ├── logo │ │ └── page.tsx │ │ └── seo │ │ └── page.tsx ├── styles │ ├── bootstrap.css │ ├── fonts.css │ ├── normalize.css │ ├── spacing.css │ └── global.css ├── utils │ ├── styles.ts │ ├── constant.ts │ └── animation.ts ├── components │ ├── Buttons │ │ ├── NavButton.tsx │ │ └── GetQuoteButton.tsx │ ├── Header │ │ ├── Header.tsx │ │ └── Navbar.tsx │ ├── ReCAPTCHA.tsx │ ├── InnerMain.tsx │ ├── Service │ │ ├── DescriptionService.tsx │ │ └── ProcessService.tsx │ ├── SocialIcons.tsx │ ├── Modals │ │ ├── FeatureModal.tsx │ │ └── ContactModal.tsx │ ├── BackgroundShape.tsx │ ├── Sections │ │ ├── PricingSection.tsx │ │ ├── AboutSection.tsx │ │ ├── CaseStudySection.tsx │ │ ├── ServicesSection.tsx │ │ └── FeaturesSection.tsx │ └── Footer │ │ ├── Newsletter.tsx │ │ └── Footer.tsx └── context │ └── QuoteContext.tsx ├── public └── clients │ ├── client_1.png │ └── client_2.png ├── .prettierrc.json ├── next.config.js ├── .github └── workflows │ └── lint.yml ├── .eslintrc.json ├── tsconfig.json ├── LICENSE ├── README.md ├── package.json └── .gitignore /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | npm run lint:staged 4 | -------------------------------------------------------------------------------- /src/app/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-enes/kesency/HEAD/src/app/icon.png -------------------------------------------------------------------------------- /src/styles/bootstrap.css: -------------------------------------------------------------------------------- 1 | @import url("bootstrap/dist/css/bootstrap.min.css"); 2 | -------------------------------------------------------------------------------- /src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-enes/kesency/HEAD/src/app/favicon.ico -------------------------------------------------------------------------------- /src/app/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-enes/kesency/HEAD/src/app/apple-icon.png -------------------------------------------------------------------------------- /public/clients/client_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-enes/kesency/HEAD/public/clients/client_1.png -------------------------------------------------------------------------------- /public/clients/client_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-enes/kesency/HEAD/public/clients/client_2.png -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "singleQuote": false, 4 | "printWidth": 140, 5 | "trailingComma": "es5", 6 | "semi": true, 7 | "endOfLine": "lf" 8 | } 9 | -------------------------------------------------------------------------------- /src/utils/styles.ts: -------------------------------------------------------------------------------- 1 | export const styles = (type: string) => { 2 | return { 3 | box: "grad-style-" + type, 4 | light: "grad-style-" + type + "-light", 5 | icon: "txt-grad-" + type, 6 | }; 7 | }; 8 | -------------------------------------------------------------------------------- /src/styles/fonts.css: -------------------------------------------------------------------------------- 1 | @import url("https://cdn.kesency.com/fonts/miniline-font.css"); 2 | @import url("https://cdn.kesency.com/fonts/firasans-font.css"); 3 | @import url("https://cdn.kesency.com/fonts/hindvadodara-font.css"); 4 | -------------------------------------------------------------------------------- /src/app/robots.ts: -------------------------------------------------------------------------------- 1 | import { MetadataRoute } from "next"; 2 | 3 | const robots = (): MetadataRoute.Robots => { 4 | return { 5 | rules: { 6 | userAgent: "*", 7 | allow: "/", 8 | disallow: ["/admin/", "/private/"], 9 | }, 10 | sitemap: "https://kesency.com/sitemap.xml", 11 | }; 12 | }; 13 | 14 | export default robots; 15 | -------------------------------------------------------------------------------- /src/components/Buttons/NavButton.tsx: -------------------------------------------------------------------------------- 1 | import Link from "next/link"; 2 | 3 | interface INavButton { 4 | to: string; 5 | label: string; 6 | } 7 | 8 | const NavButton = ({ to, label }: INavButton) => { 9 | return ( 10 | 11 | {label} 12 | 13 | ); 14 | }; 15 | 16 | export { NavButton }; 17 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | const nextConfig = { 2 | output: "export", 3 | trailingSlash: true, 4 | distDir: "dist", 5 | images: { 6 | unoptimized: true, 7 | remotePatterns: [ 8 | { 9 | protocol: "https", 10 | hostname: "cdn.kesency.com", 11 | pathname: "/images/**", 12 | }, 13 | ], 14 | }, 15 | }; 16 | 17 | module.exports = nextConfig; 18 | -------------------------------------------------------------------------------- /src/components/Header/Header.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import React from "react"; 4 | 5 | import { Navbar } from "@components/Header/Navbar"; 6 | import { ContactModal } from "@components/Modals/ContactModal"; 7 | 8 | const Header = () => { 9 | return ( 10 | 11 |
12 | 13 |
14 | 15 |
16 | ); 17 | }; 18 | 19 | export { Header }; 20 | -------------------------------------------------------------------------------- /src/utils/constant.ts: -------------------------------------------------------------------------------- 1 | export const CAPTCHA_SITE_KEY: string = ""; 2 | export const CLOUDFLARE_BEACON: string = ""; 3 | export const LINKS = { 4 | INSTAGRAM: "", 5 | TWITTER: "", 6 | GITHUB: "", 7 | GOOGLE: "", 8 | }; 9 | export const CDN = "https://cdn.kesency.com"; 10 | export const LEGAL_NOTICE_UPDATE = new Date(2023, 9, 13); 11 | export const TERMS_CONDITIONS_UPDATE = new Date(2022, 4, 19); 12 | export const PRIVACY_POLICY_UPDATE = new Date(2022, 4, 28); 13 | -------------------------------------------------------------------------------- /src/app/about/page.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import { InnerMain } from "@components/InnerMain"; 4 | import { AboutSection } from "@components/Sections/AboutSection"; 5 | 6 | const AboutPage = () => { 7 | return ( 8 | 9 | 10 |

About Us

11 |

What makes a company great? That’s simple. It’s the people who work here.

12 |
13 | 14 |
15 | ); 16 | }; 17 | 18 | export default AboutPage; 19 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: Lint Check 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | branches: 9 | - main 10 | 11 | jobs: 12 | eslint_and_prettier: 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - name: Checkout code 17 | uses: actions/checkout@v4 18 | 19 | - name: Use Node.js 18.x 20 | uses: actions/setup-node@v4 21 | with: 22 | node-version: "18.x" 23 | 24 | - name: Install dependencies 25 | run: npm install 26 | 27 | - name: Run ESLint and Prettier 28 | run: | 29 | npm run lint 30 | npm run format 31 | -------------------------------------------------------------------------------- /src/app/privacy/policy/page.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import { InnerMain } from "@components/InnerMain"; 4 | import { PRIVACY_POLICY_UPDATE } from "@utils/constant"; 5 | 6 | const PrivacyPolicyPage = () => { 7 | return ( 8 | 9 | 10 |

Privacy Policy

11 |

{PRIVACY_POLICY_UPDATE.toLocaleDateString()}

12 |
13 |
14 |
{/* Your Privacy Policy */}
15 |
16 |
17 | ); 18 | }; 19 | 20 | export default PrivacyPolicyPage; 21 | -------------------------------------------------------------------------------- /src/app/terms/and/conditions/page.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import { InnerMain } from "@components/InnerMain"; 4 | import { TERMS_CONDITIONS_UPDATE } from "@utils/constant"; 5 | 6 | const TermsPage = () => { 7 | return ( 8 | 9 | 10 |

Terms & Conditions

11 |

{TERMS_CONDITIONS_UPDATE.toLocaleDateString()}

12 |
13 |
14 |
{/* Your Terms & Conditions */}
15 |
16 |
17 | ); 18 | }; 19 | 20 | export default TermsPage; 21 | -------------------------------------------------------------------------------- /src/components/Buttons/GetQuoteButton.tsx: -------------------------------------------------------------------------------- 1 | import { CSSProperties } from "react"; 2 | import { Nav } from "react-bootstrap"; 3 | 4 | import { useQuote } from "@context/QuoteContext"; 5 | 6 | interface IGetQuoteButtonProps { 7 | to: string; 8 | style: CSSProperties | undefined; 9 | } 10 | 11 | const GetQuoteButton = ({ to, style }: IGetQuoteButtonProps) => { 12 | const { openQuoteModal } = useQuote(); 13 | 14 | return ( 15 | 16 | 17 | GET A QUOTE 18 | 19 | 20 | ); 21 | }; 22 | 23 | export { GetQuoteButton }; 24 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "es2021": true, 5 | "node": true 6 | }, 7 | "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "plugin:@next/next/recommended", "prettier"], 8 | "parser": "@typescript-eslint/parser", 9 | "parserOptions": { 10 | "ecmaVersion": "latest", 11 | "sourceType": "module" 12 | }, 13 | "plugins": ["@typescript-eslint", "prettier"], 14 | "ignorePatterns": ["dist", "node_modules"], 15 | "rules": { 16 | "indent": ["error", 2], 17 | "linebreak-style": ["error", "unix"], 18 | "quotes": ["error", "double"], 19 | "semi": ["error", "always"], 20 | "prettier/prettier": "error" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/app/pricing/page.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import { InnerMain } from "@components/InnerMain"; 4 | import { PricingSection } from "@components/Sections/PricingSection"; 5 | 6 | const PricingPage = () => { 7 | return ( 8 | 9 | 10 |
11 |

Pricing Plans

12 |

13 | Based on market demand, we have created 3 packages that will 14 |
15 | cover all your business needs. 16 |

17 |
18 |
19 | 20 |
21 | ); 22 | }; 23 | 24 | export default PricingPage; 25 | -------------------------------------------------------------------------------- /src/app/studies/page.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import { InnerMain } from "@components/InnerMain"; 4 | import { NavButton } from "@components/Buttons/NavButton"; 5 | import { FeaturesSection } from "@components/Sections/FeaturesSection"; 6 | 7 | const StudiesPage = () => { 8 | return ( 9 | 10 | 11 |

Oops! Under maintenance.

12 |

This part of the site is under maintenance for technical reasons. Try again later!

13 | 14 |
15 | 16 |
17 | ); 18 | }; 19 | 20 | export default StudiesPage; 21 | -------------------------------------------------------------------------------- /src/components/ReCAPTCHA.tsx: -------------------------------------------------------------------------------- 1 | import { LegacyRef } from "react"; 2 | import ReCaptcha from "react-google-recaptcha"; 3 | 4 | import { CAPTCHA_SITE_KEY } from "@utils/constant"; 5 | 6 | interface IReCAPTCHAProps { 7 | refKey: LegacyRef | undefined; 8 | } 9 | 10 | const ReCAPTCHA = ({ refKey }: IReCAPTCHAProps) => { 11 | return ( 12 | console.log("ReCaptcha Completed - " + Date.now())} 16 | onErrored={() => console.log("ReCaptcha Errored - " + Date.now())} 17 | onExpired={() => console.log("ReCaptcha Expired - " + Date.now())} 18 | size={"invisible"} 19 | badge={"bottomright"} 20 | className="rc-just-align" 21 | /> 22 | ); 23 | }; 24 | 25 | export { ReCAPTCHA }; 26 | -------------------------------------------------------------------------------- /src/app/portfolio/page.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import { InnerMain } from "@components/InnerMain"; 4 | import { FeaturesSection } from "@components/Sections/FeaturesSection"; 5 | 6 | const PortfolioPage = () => { 7 | return ( 8 | 9 | 10 |

Portfolio

11 |

12 | We use strategic approaches to provide our clients with high-end. 13 |
14 | services that ensure superior customer satisfaction. 15 |

16 |
17 | 18 | 19 |
20 | ); 21 | }; 22 | 23 | export default PortfolioPage; 24 | -------------------------------------------------------------------------------- /src/components/InnerMain.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import React from "react"; 4 | 5 | import { BackgroundShape } from "@components/BackgroundShape"; 6 | import { Container } from "react-bootstrap"; 7 | 8 | interface IInnerMain { 9 | style: string; 10 | children: React.ReactNode; 11 | } 12 | 13 | const InnerMain = ({ style, children }: IInnerMain) => { 14 | return ( 15 |
16 |
17 | 18 | 19 |
20 | {children} 21 |
22 |
23 |
24 | ); 25 | }; 26 | 27 | export { InnerMain }; 28 | -------------------------------------------------------------------------------- /src/app/sitemap.ts: -------------------------------------------------------------------------------- 1 | import { MetadataRoute } from "next"; 2 | 3 | const sitemap = (): MetadataRoute.Sitemap => { 4 | return [ 5 | { 6 | url: "https://kesency.com", 7 | lastModified: new Date(), 8 | changeFrequency: "monthly", 9 | }, 10 | { 11 | url: "https://kesency.com/about", 12 | lastModified: new Date(), 13 | changeFrequency: "monthly", 14 | }, 15 | { 16 | url: "https://kesency.com/legal", 17 | lastModified: new Date(), 18 | changeFrequency: "monthly", 19 | }, 20 | { 21 | url: "https://kesency.com/portfolio", 22 | lastModified: new Date(), 23 | changeFrequency: "monthly", 24 | }, 25 | { 26 | url: "https://kesency.com/pricing", 27 | lastModified: new Date(), 28 | changeFrequency: "monthly", 29 | }, 30 | ]; 31 | }; 32 | 33 | export default sitemap; 34 | -------------------------------------------------------------------------------- /src/components/Service/DescriptionService.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import React from "react"; 4 | import Image from "next/image"; 5 | 6 | import { Col, Container, Row } from "react-bootstrap"; 7 | 8 | interface IDescriptionService { 9 | children: React.ReactNode; 10 | image: string; 11 | } 12 | 13 | const DescriptionService = ({ children, image }: IDescriptionService) => { 14 | return ( 15 |
16 | 17 | 18 | {children} 19 | 20 | description image 21 | 22 | 23 | 24 |
25 | ); 26 | }; 27 | 28 | export { DescriptionService }; 29 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "NodeNext", 12 | "moduleResolution": "NodeNext", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true, 17 | "plugins": [ 18 | { 19 | "name": "next" 20 | } 21 | ], 22 | "paths": { 23 | "@components/*": ["./src/components/*"], 24 | "@api/*": ["./src/api/*"], 25 | "@styles/*": ["./src/styles/*"], 26 | "@utils/*": ["./src/utils/*"], 27 | "@context/*": ["./src/context/*"] 28 | } 29 | }, 30 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", "dist/types/**/*.ts"], 31 | "exclude": ["node_modules", "dist", "build", "out"] 32 | } 33 | -------------------------------------------------------------------------------- /src/components/SocialIcons.tsx: -------------------------------------------------------------------------------- 1 | import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; 2 | import { faGithub, faGoogle, faInstagram, faTwitter } from "@fortawesome/free-brands-svg-icons"; 3 | 4 | import { LINKS } from "@utils/constant"; 5 | 6 | const SocialIcons = () => { 7 | return ( 8 | 30 | ); 31 | }; 32 | 33 | export { SocialIcons }; 34 | -------------------------------------------------------------------------------- /src/context/QuoteContext.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { createContext, useContext, useState } from "react"; 4 | 5 | interface IQuoteContext { 6 | showModal: boolean; 7 | openQuoteModal: () => void; 8 | closeQuoteModal: () => void; 9 | } 10 | 11 | const QuoteContext = createContext(undefined); 12 | 13 | export const QuoteProvider = ({ children }: { children: React.ReactNode }) => { 14 | const [showModal, setShowModal] = useState(false); 15 | 16 | const openQuoteModal = () => { 17 | setShowModal(true); 18 | }; 19 | 20 | const closeQuoteModal = () => { 21 | setShowModal(false); 22 | }; 23 | 24 | return {children}; 25 | }; 26 | 27 | export const useQuote = (): IQuoteContext => { 28 | const context = useContext(QuoteContext); 29 | if (context === undefined) { 30 | throw new Error("useQuote must be used within a QuoteProvider"); 31 | } 32 | 33 | return context; 34 | }; 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022-2024 Enes Tahiri. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/components/Modals/FeatureModal.tsx: -------------------------------------------------------------------------------- 1 | import Image from "next/image"; 2 | 3 | import { NavButton } from "@components/Buttons/NavButton"; 4 | import { Modal, Row, Col } from "react-bootstrap"; 5 | 6 | interface IFeatureModal { 7 | show: boolean; 8 | handleClose: () => void; 9 | image: string; 10 | alt: string; 11 | title: string; 12 | description: string; 13 | removeBtn: boolean; 14 | } 15 | 16 | const FeatureModal = ({ show, handleClose, image, alt, title, description, removeBtn }: IFeatureModal) => { 17 | return ( 18 | 19 | 20 | 21 | 22 | 23 | {alt} 24 | 25 | 26 |
27 |

{title}

28 |

{description}

29 |
30 | {removeBtn ? " " : } 31 | 32 |
33 |
34 |
35 | ); 36 | }; 37 | 38 | export { FeatureModal }; 39 | -------------------------------------------------------------------------------- /src/components/BackgroundShape.tsx: -------------------------------------------------------------------------------- 1 | const svg = { 2 | width: "779px", 3 | height: "759px", 4 | stopColor: "rgb(237, 247, 255)", 5 | }; 6 | 7 | interface IDirectionProps { 8 | direction: "left" | "right"; 9 | className: "shape-home-banner" | "shape-project" | `inner-page-shape-banner-${"left" | "right"}`; 10 | } 11 | 12 | const BackgroundShape = ({ direction, className }: IDirectionProps) => { 13 | return ( 14 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 32 | 33 | ); 34 | }; 35 | 36 | export { BackgroundShape }; 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # KESENCY Website Front 2 | 3 | ![](https://img.shields.io/github/stars/e-enes/kesency?label=Stars) 4 | [![](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) 5 | ![](https://img.shields.io/github/last-commit/e-enes/kesency?label=Last%20Update) 6 | ![](https://img.shields.io/github/issues/e-enes/kesency?label=Issues) 7 | 8 | This is the front-end repository for the Kesency website, a digital agency that provides services related to web design, development, and marketing. The website is built using modern web development technologie, including **Next.js** and **Bootstrap**. 9 | 10 | ## Requirements 11 | 12 | - Node.js version 18.x.x or higher 13 | 14 | ## Getting Started 15 | 16 | To get started with the project, clone the repository to your local machine and run the following commands: 17 | 18 | ``` 19 | npm install 20 | npm run dev 21 | ``` 22 | 23 | This will install the required dependencies and start the development server. You can then access the website at `http://localhost:3000`. 24 | 25 | ## Contributing 26 | 27 | Contributions to the project are welcome! If you find a bug or have a feature request, please open an issue in the repository. If you would like to contribute code, please create a pull request and make sure that your changes pass the tests and linting rules. 28 | 29 | ## License 30 | 31 | This project is licensed under the MIT License. You are free to use, modify, and distribute the code as long as you include the license file in your distribution. See the LICENSE file for more information. 32 | 33 | ## Warning 34 | 35 | Images and fonts are not provided for copyright reasons. It's up to you to set up your own CDN and find your own images according to the architecture of the website. 36 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "kesency", 3 | "version": "1.3.0", 4 | "description": "Official KESENCY Website (front-end part)", 5 | "private": true, 6 | "scripts": { 7 | "dev": "next dev", 8 | "build": "next build", 9 | "start": "next start", 10 | "format": "prettier . --check", 11 | "lint": "eslint .", 12 | "lint:staged": "lint-staged", 13 | "prepare": "husky" 14 | }, 15 | "author": "Enes Tahiri <125091714+e-enes@users.noreply.github.com>", 16 | "license": "MIT", 17 | "lint-staged": { 18 | "*.{js,ts,tsx}": [ 19 | "eslint --fix", 20 | "prettier --write" 21 | ], 22 | "*.json": [ 23 | "prettier --write" 24 | ] 25 | }, 26 | "browserslist": [ 27 | "> 0.5%", 28 | "not dead", 29 | "not ie <= 11", 30 | "not Safari > 0" 31 | ], 32 | "homepage": "https://github.com/e-enes/kesency#readme", 33 | "bugs": { 34 | "email": "125091714+e-enes@users.noreply.github.com", 35 | "url": "https://github.com/e-enes/kesency/issues" 36 | }, 37 | "dependencies": { 38 | "@fortawesome/free-brands-svg-icons": "^6.5.2", 39 | "@fortawesome/react-fontawesome": "^0.2.0", 40 | "bootstrap": "^5.3.3", 41 | "next": "^14.1.4", 42 | "react-bootstrap": "^2.10.2", 43 | "react-google-recaptcha": "^3.1.0", 44 | "react-slick": "^0.30.2", 45 | "slick-carousel": "^1.8.1" 46 | }, 47 | "devDependencies": { 48 | "@next/eslint-plugin-next": "^14.1.4", 49 | "@types/node": "18.19.30", 50 | "@types/react-google-recaptcha": "^2.1.9", 51 | "@types/react-slick": "^0.23.13", 52 | "@typescript-eslint/eslint-plugin": "^7.5.0", 53 | "@typescript-eslint/parser": "^7.5.0", 54 | "eslint": "^8.57.0", 55 | "eslint-config-prettier": "^9.1.0", 56 | "eslint-plugin-prettier": "^5.1.3", 57 | "husky": "^9.0.11", 58 | "lint-staged": "^15.2.2", 59 | "prettier": "^3.2.5", 60 | "typescript": "5.4.4" 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Metadata } from "next"; 3 | 4 | import "@styles/fonts.css"; 5 | import "@styles/bootstrap.css"; 6 | import "@styles/normalize.css"; 7 | import "@styles/global.css"; 8 | 9 | import { CLOUDFLARE_BEACON } from "@utils/constant"; 10 | import { Header } from "@components/Header/Header"; 11 | import { Footer } from "@components/Footer/Footer"; 12 | import { QuoteProvider } from "@context/QuoteContext"; 13 | 14 | export const metadata: Metadata = { 15 | metadataBase: new URL("https://kesency.com"), 16 | title: "KESENCY - Digital Agency", 17 | description: 18 | "A skilled team dedicated to bringing your vision and projects to life. Do you have a concept or a project in mind? We can turn it into reality for you: websites, applications, games—using custom technologies tailored to your specific needs", 19 | keywords: ["kesency", "digital-agency", "website", "development", "application"], 20 | openGraph: { 21 | type: "website", 22 | url: "https://kesency.com/", 23 | title: "KESENCY - Digital Agency", 24 | description: 25 | "A skilled team dedicated to bringing your vision and projects to life. Do you have a concept or a project in mind? We can turn it into reality for you: websites, applications, games—using custom technologies tailored to your specific needs", 26 | siteName: "KESENCY", 27 | images: [ 28 | { 29 | url: "https://cdn.kesency.com/images/brand-logo.svg", 30 | }, 31 | ], 32 | }, 33 | }; 34 | 35 | const RootLayout = ({ children }: { children: React.ReactNode }) => { 36 | return ( 37 | 38 | 39 | 40 |
41 | {children} 42 | 43 |