├── public
├── CNAME
├── favicon.ico
├── apple-touch-icon.png
├── mstile-150x150.png
├── android-chrome-192x192.png
├── android-chrome-512x512.png
├── apple-touch-icon-precomposed.png
├── robots.txt
├── browserconfig.xml
├── sitemap.xml
├── site.webmanifest
├── 404.html
└── safari-pinned-tab.svg
├── bun.lockb
├── src
├── assets
│ └── media
│ │ ├── header-bg.webp
│ │ ├── services-bg.webp
│ │ ├── header-bg-mobile.webp
│ │ ├── reviewers
│ │ ├── Mercy_Ares.webp
│ │ ├── usman_shah.webp
│ │ ├── Lex_Scooter.webp
│ │ ├── xavier_marin.webp
│ │ ├── Danielle_Marie.webp
│ │ ├── Eddrina-Delmont.webp
│ │ ├── Africans_In_Orlando.webp
│ │ └── Virag_Anna_Szolgyemy.webp
│ │ ├── services-bg-mobile.webp
│ │ ├── services
│ │ ├── radio_stereo.webp
│ │ ├── hid_led_lights.webp
│ │ └── lift_kit_services.webp
│ │ └── cc-logo.svg
├── scss
│ ├── bs-dynamic.scss
│ ├── style.scss
│ ├── _whyus.scss
│ ├── _testimonials.scss
│ ├── _variables.scss
│ ├── _hero.scss
│ ├── _components.scss
│ ├── _deals.scss
│ ├── _base.scss
│ ├── _contactus.scss
│ └── _navigation.scss
├── js
│ ├── footer.js
│ ├── hidepreloader.js
│ ├── glide.js
│ ├── header.js
│ ├── whyus.js
│ ├── aboutus.js
│ ├── contact.js
│ ├── deals.js
│ └── testimonials.js
├── index.js
└── css
│ ├── preloader.min.css
│ └── preloader.css
├── .gitignore
├── LICENSE
├── package.json
├── .github
└── workflows
│ └── static.yml
├── vite.config.js
├── postcss.config.cjs
├── README.md
└── index.html
/public/CNAME:
--------------------------------------------------------------------------------
1 | carclubtire.com
--------------------------------------------------------------------------------
/bun.lockb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/bun.lockb
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/public/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/public/apple-touch-icon.png
--------------------------------------------------------------------------------
/public/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/public/mstile-150x150.png
--------------------------------------------------------------------------------
/src/assets/media/header-bg.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/src/assets/media/header-bg.webp
--------------------------------------------------------------------------------
/public/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/public/android-chrome-192x192.png
--------------------------------------------------------------------------------
/public/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/public/android-chrome-512x512.png
--------------------------------------------------------------------------------
/src/assets/media/services-bg.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/src/assets/media/services-bg.webp
--------------------------------------------------------------------------------
/public/apple-touch-icon-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/public/apple-touch-icon-precomposed.png
--------------------------------------------------------------------------------
/src/assets/media/header-bg-mobile.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/src/assets/media/header-bg-mobile.webp
--------------------------------------------------------------------------------
/src/assets/media/reviewers/Mercy_Ares.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/src/assets/media/reviewers/Mercy_Ares.webp
--------------------------------------------------------------------------------
/src/assets/media/reviewers/usman_shah.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/src/assets/media/reviewers/usman_shah.webp
--------------------------------------------------------------------------------
/src/assets/media/services-bg-mobile.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/src/assets/media/services-bg-mobile.webp
--------------------------------------------------------------------------------
/src/assets/media/reviewers/Lex_Scooter.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/src/assets/media/reviewers/Lex_Scooter.webp
--------------------------------------------------------------------------------
/src/assets/media/reviewers/xavier_marin.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/src/assets/media/reviewers/xavier_marin.webp
--------------------------------------------------------------------------------
/src/assets/media/services/radio_stereo.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/src/assets/media/services/radio_stereo.webp
--------------------------------------------------------------------------------
/src/assets/media/reviewers/Danielle_Marie.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/src/assets/media/reviewers/Danielle_Marie.webp
--------------------------------------------------------------------------------
/src/assets/media/reviewers/Eddrina-Delmont.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/src/assets/media/reviewers/Eddrina-Delmont.webp
--------------------------------------------------------------------------------
/src/assets/media/services/hid_led_lights.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/src/assets/media/services/hid_led_lights.webp
--------------------------------------------------------------------------------
/src/assets/media/services/lift_kit_services.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/src/assets/media/services/lift_kit_services.webp
--------------------------------------------------------------------------------
/src/assets/media/reviewers/Africans_In_Orlando.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/src/assets/media/reviewers/Africans_In_Orlando.webp
--------------------------------------------------------------------------------
/src/assets/media/reviewers/Virag_Anna_Szolgyemy.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saaqi/car-mechanic-shop/HEAD/src/assets/media/reviewers/Virag_Anna_Szolgyemy.webp
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 |
3 | Disallow:
4 | Disallow: /cgi-bin/
5 | Disallow: /src/
6 | Disallow: /purgecss.config.js
7 |
8 | Sitemap: https://carclubtire.com/sitemap.xml
--------------------------------------------------------------------------------
/src/scss/bs-dynamic.scss:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";
2 |
3 | // override bootstrap variables
4 | @import "./variables";
5 | // import bootstrap scss
6 | @import "../../node_modules/bootstrap/scss/bootstrap.scss";
7 |
--------------------------------------------------------------------------------
/src/scss/style.scss:
--------------------------------------------------------------------------------
1 | @use "base";
2 | @use "navigation";
3 | @use "components";
4 | // sections
5 | @use "hero";
6 | @use "deals";
7 | @use "whyus";
8 | @use "testimonials";
9 | @use "contactus";
10 |
--------------------------------------------------------------------------------
/src/scss/_whyus.scss:
--------------------------------------------------------------------------------
1 | @media only screen and ( max-width: 300px) {
2 | .counter-box {
3 | word-break: break-all;
4 | flex-direction: column;
5 | }
6 | .counter-box > div {
7 | width: 100%
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/public/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #374162
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/public/sitemap.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | https://carclubtire.com/
5 | 2024-03-13
6 | monthly
7 | 1.0
8 |
9 |
--------------------------------------------------------------------------------
/src/js/footer.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @file footer.js
3 | * @description This file contains a script to display the current year in an HTML element with the ID "year".
4 | */
5 |
6 | /**
7 | * @description Sets the innerHTML of the element with ID "year" to the current year.
8 | */
9 | document.getElementById("year").innerHTML = new Date().getFullYear();
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/public/site.webmanifest:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Car Club Tire and Auto Repair Service",
3 | "short_name": "Car Club",
4 | "icons": [
5 | {
6 | "src": "/android-chrome-192x192.png",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | },
10 | {
11 | "src": "/android-chrome-512x512.png",
12 | "sizes": "512x512",
13 | "type": "image/png"
14 | }
15 | ],
16 | "theme_color": "#374162",
17 | "background_color": "#374162",
18 | "display": "standalone"
19 | }
20 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | // BOOTSTRAP
2 | // import "./scss/bs-dynamic.scss"
3 | import "./css/bs-compiled.css"
4 | // STYLES
5 | import "./scss/style.scss"
6 | // BOX Icons
7 | import "boxicons/css/boxicons.css"
8 |
9 |
10 | // Sections
11 | import "./js/header.js"
12 | import "./js/deals.js"
13 | import "./js/whyus.js"
14 | import "./js/aboutus.js"
15 | import "./js/testimonials.js"
16 | import "./js/contact.js"
17 | import "./js/footer.js"
18 |
19 | // GlideJs
20 | import "./js/glide.js"
21 |
22 | // hide preloader
23 | import "./js/hidepreloader.js"
--------------------------------------------------------------------------------
/src/scss/_testimonials.scss:
--------------------------------------------------------------------------------
1 | // import partials ---
2 | @use "./variables" as v;
3 |
4 | .testimonial .blockquote {
5 | font-size: .875rem;
6 | }
7 |
8 | .star-ratings {
9 | font-size: 1.5rem;
10 | color: #ffcc33;
11 | }
12 |
13 | .star-ratings>i {
14 | text-shadow: v.$text-shadow;
15 | }
16 |
17 | .glide-deals .glide__arrow--left,
18 | .glide-services .glide__arrow--left,
19 | .glide-reviews .glide__arrow--left {
20 | left: 0;
21 | }
22 |
23 | .glide-deals .glide__arrow--right,
24 | .glide-services .glide__arrow--right,
25 | .glide-reviews .glide__arrow--right {
26 | right: 0;
27 | }
--------------------------------------------------------------------------------
/src/scss/_variables.scss:
--------------------------------------------------------------------------------
1 | // Bootstrap over rides ---
2 |
3 | // Colors ----------
4 | $primary: #374162;
5 | $secondary: #f9d949;
6 | $info: #f45050;
7 | $danger: #9E1A1A;
8 | $success: #105B38;
9 | $dark: #212529;
10 | $light: #fefefe;
11 | // $warning: $warning;
12 |
13 | // Typography ------
14 | // $font-size-base: 0.9375rem;;
15 | $font-family-sans-serif: Montserrat, sans-serif;
16 |
17 |
18 | // custom variables -----
19 | $even-bg: #f0f0f0;
20 | $odd-bg: #f9f9f9;
21 |
22 | $box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.3);
23 | $text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1);
24 | $transition: all ease-in-out 0.2s;
--------------------------------------------------------------------------------
/src/scss/_hero.scss:
--------------------------------------------------------------------------------
1 | .hero {
2 | padding: calc(2rem + 66px) 0 2rem;
3 | background-image: url("/src/assets/media/header-bg.webp");
4 | background-position: center center;
5 | background-repeat: no-repeat;
6 | background-size: cover;
7 | position: relative;
8 | min-height: 100svh;
9 |
10 | a.home-phone > i.bx:hover {
11 | transform: rotate(30deg);
12 | }
13 |
14 | .container * {
15 | z-index: 2;
16 | }
17 |
18 | .background-overlay {
19 | height: 100%;
20 | width: 100%;
21 | min-height: 100svh;
22 | top: 0;
23 | left: 0;
24 | position: absolute;
25 | mix-blend-mode: multiply;
26 | background-color: var(--bs-primary);
27 | opacity: 1;
28 | z-index: 0;
29 | }
30 | }
31 |
32 | @media (max-width: 1024px) {
33 | .hero {
34 | background-image: url("/src/assets/media/header-bg-mobile.webp");
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/scss/_components.scss:
--------------------------------------------------------------------------------
1 | // BUTTONS ---------------------------
2 | .btn {
3 | box-shadow: inset 0 -2px 0 rgba(0, 0, 0, 0.3), 1px 1px 2px 0 rgba(0, 0, 0, 0.3);
4 | font-weight: 500;
5 | padding: 1rem 2rem;
6 | text-transform: uppercase;
7 | transition: all ease-in-out 0.1s;
8 | letter-spacing: 1px;
9 |
10 | &:hover {
11 | box-shadow: inset 0 -2px 0 rgba(0, 0, 0, 0.3);
12 | transform: translateY(0.5px);
13 | }
14 |
15 | &:active {
16 | box-shadow: none;
17 | text-shadow: none;
18 | transform: translateY(2px);
19 | }
20 | }
21 |
22 | [class*="btn-"]:not([class*="btn-outline-"]) {
23 | border: 0;
24 | }
25 |
26 | [class*="btn-outline-"] {
27 | box-shadow: none;
28 |
29 | &:hover {
30 | box-shadow: none;
31 | }
32 |
33 | &:active {
34 | box-shadow: none;
35 | }
36 | }
37 |
38 | .social-button {
39 | letter-spacing: 0;
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/src/js/hidepreloader.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @file src/js/hidepreloader.js
3 | * @description This file contains functions to for the hiding the preloader after the page is loaded.
4 | */
5 |
6 | // Hide Preloader ------------
7 | const preloader = document.getElementById("loader-wrapper");
8 |
9 | /**
10 | * Hides the preloader element after a delay of 2 seconds once the window has loaded.
11 | * This function sets the `hidden` attribute and `display` style of the preloader element to `none`
12 | * after a delay of 2 seconds.
13 | */
14 | window.onload = setTimeout(function () {
15 | if (preloader) preloader.hidden = true;
16 | if (preloader) preloader.style.display = "none";
17 | }, 2000);
18 |
19 | /**
20 | * Adds the 'hide-preloader' class to the preloader element once the window has loaded.
21 | * This function ensures that the preloader element is hidden by adding the 'hide-preloader' class
22 | * to it when the window has finished loading.
23 | */
24 | window.onload = function () {
25 | preloader.classList.add("hide-preloader");
26 | };
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Saqib Islam
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 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "car-mechanic-shop-html5-bootstrap-template",
3 | "description": "This is a fully responsive and animated HTML 5 template for a car mechanic shop. The template has been designed to provide a professional and modern look to the website. It includes a responsive navigation bar that makes it easy for users to navigate through the different sections of the website.",
4 | "private": true,
5 | "version": "2.1.6",
6 | "type": "module",
7 | "scripts": {
8 | "dev": "vite",
9 | "build": "vite build --emptyOutDir",
10 | "test": "vite preview",
11 | "build-bootstrap": "sass --no-source-map ./src/scss/bs-dynamic.scss ./src/css/bs-compiled.css"
12 | },
13 | "devDependencies": {
14 | "@fullhuman/postcss-purgecss": "^5.0.0",
15 | "autoprefixer": "^10.4.21",
16 | "caniuse-lite": "^1.0.30001717",
17 | "cssnano": "^6.1.2",
18 | "postcss": "^8.5.3",
19 | "sass": "^1.87.0",
20 | "vite": "^5.4.19",
21 | "vite-plugin-minify": "^1.5.2",
22 | "vite-plugin-webfont-dl": "^3.10.4"
23 | },
24 | "dependencies": {
25 | "@glidejs/glide": "^3.7.1",
26 | "bootstrap": "^5.3.5",
27 | "boxicons": "^2.1.4"
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/.github/workflows/static.yml:
--------------------------------------------------------------------------------
1 | # Simple workflow for deploying static content to GitHub Pages
2 | name: Deploy static content to Pages
3 |
4 | on:
5 | # Runs on pushes targeting the default branch
6 | push:
7 | branches: ['main']
8 |
9 | # Allows you to run this workflow manually from the Actions tab
10 | workflow_dispatch:
11 |
12 | # Sets the GITHUB_TOKEN permissions to allow deployment to GitHub Pages
13 | permissions:
14 | contents: read
15 | pages: write
16 | id-token: write
17 |
18 | # Allow one concurrent deployment
19 | concurrency:
20 | group: 'pages'
21 | cancel-in-progress: true
22 |
23 | jobs:
24 | # Single deploy job since we're just deploying
25 | deploy:
26 | environment:
27 | name: github-pages
28 | url: ${{ steps.deployment.outputs.page_url }}
29 | runs-on: ubuntu-latest
30 | steps:
31 | - name: Checkout
32 | uses: actions/checkout@v4
33 | - name: Set up Bun
34 | uses: oven-sh/setup-bun@v1
35 | with:
36 | bun-version: latest
37 | - name: Install dependencies
38 | run: bun install
39 | - name: Build
40 | run: bun run build
41 | - name: Setup Pages
42 | uses: actions/configure-pages@v4
43 | - name: Upload artifact
44 | uses: actions/upload-pages-artifact@v3
45 | with:
46 | # Upload dist folder
47 | path: './dist'
48 | - name: Deploy to GitHub Pages
49 | id: deployment
50 | uses: actions/deploy-pages@v4
51 |
--------------------------------------------------------------------------------
/src/scss/_deals.scss:
--------------------------------------------------------------------------------
1 | // import partials ---
2 | @use "./variables" as v;
3 |
4 | .ag-courses_item {
5 | overflow: hidden;
6 | position: relative;
7 |
8 | &:hover {
9 | box-shadow: v.$box-shadow;
10 | }
11 |
12 | &:hover .ag-courses-item_bg {
13 | transform: scale(10);
14 | }
15 | }
16 |
17 | .ag-courses-item_title {
18 | position: relative;
19 | z-index: 2;
20 | overflow: hidden;
21 | }
22 |
23 | .ag-course-body {
24 | z-index: 3;
25 | position: relative;
26 | }
27 |
28 | .ag-courses-item_bg {
29 | height: 128px;
30 | width: 128px;
31 | background-color: #f9b234;
32 | z-index: 1;
33 | position: absolute;
34 | top: -75px;
35 | right: -75px;
36 | border-radius: 50%;
37 | transition: v.$transition;
38 | }
39 |
40 | .glide-deals li.glide__slide:nth-child(2n)>.ag-courses_item>.ag-courses-item_bg {
41 | background-color: #3ecd5e;
42 | }
43 |
44 | .glide-deals li.glide__slide:nth-child(3n)>.ag-courses_item>.ag-courses-item_bg {
45 | background-color: #e44002;
46 | }
47 |
48 | .glide-deals li.glide__slide:nth-child(4n)>.ag-courses_item>.ag-courses-item_bg {
49 | background-color: #952aff;
50 | }
51 |
52 | .glide-deals li.glide__slide:nth-child(5n)>.ag-courses_item>.ag-courses-item_bg {
53 | background-color: #cd3e94;
54 | }
55 |
56 | .glide-deals li.glide__slide:nth-child(6n)>.ag-courses_item>.ag-courses-item_bg {
57 | background-color: #4c49ea;
58 | }
59 |
60 |
61 | //////////////////////////////////////////
62 | .alert-heading:hover {
63 | box-shadow: v.$box-shadow;
64 | }
--------------------------------------------------------------------------------
/src/js/glide.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @file glide.js
3 | * @description This file initializes and configures Glide.js carousels for the "deals" and "services" sections of the webpage.
4 | */
5 |
6 | // Import Glide.js CSS files
7 | import "@glidejs/glide/dist/css/glide.core.min.css";
8 | import "@glidejs/glide/dist/css/glide.theme.min.css";
9 |
10 | // Import Glide.js library
11 | import Glide from "@glidejs/glide";
12 |
13 | // Initialize and configure the Glide.js carousel for the "deals" section
14 | new Glide(".glide-deals", {
15 | type: "carousel",
16 | perView: 3,
17 | swipeThreshold: 40,
18 | dragThreshold: 60,
19 | animationDuration: 250,
20 | peek: 40,
21 | breakpoints: {
22 | 992: {
23 | perView: 1,
24 | },
25 | },
26 | }).mount();
27 |
28 | // Initialize and configure the Glide.js carousel for the "services" section
29 | new Glide(".glide-services", {
30 | type: "carousel",
31 | perView: 3,
32 | swipeThreshold: 40,
33 | dragThreshold: 60,
34 | animationDuration: 250,
35 | peek: 40,
36 | breakpoints: {
37 | // 992: {
38 | // perView: 1,
39 | // },
40 | 768: {
41 | perView: 1,
42 | },
43 | },
44 | }).mount();
45 |
46 | // Initialize and configure the Glide.js carousel for the "reviews" section
47 | new Glide(".glide-reviews", {
48 | type: "carousel",
49 | perView: 3,
50 | swipeThreshold: 40,
51 | dragThreshold: 60,
52 | animationDuration: 250,
53 | breakpoints: {
54 | 992: {
55 | perView: 2,
56 | },
57 | 768: {
58 | perView: 1,
59 | },
60 | },
61 | }).mount();
62 |
--------------------------------------------------------------------------------
/src/scss/_base.scss:
--------------------------------------------------------------------------------
1 | // import partials ---
2 | @use "./variables" as v;
3 |
4 | html {
5 | scroll-padding-top: 68px;
6 | /* scroll-snap-type: y proximity; */
7 | }
8 |
9 | a {
10 | text-decoration: none;
11 | }
12 |
13 | ///////////////////////
14 | // Section defaults ---
15 | .section {
16 | display: flex;
17 | justify-content: center;
18 | align-items: center;
19 | align-content: center;
20 | place-content: center;
21 | padding: 2rem 0;
22 | /* scroll-snap-align: start; */
23 | }
24 | .section:nth-child(even) {
25 | background-color: v.$even-bg;
26 | }
27 | .section:nth-child(odd) {
28 | background-color: v.$odd-bg;
29 | }
30 |
31 | .heading-container {
32 | margin-bottom: 1.5rem;
33 | }
34 |
35 | .section-heading {
36 | text-align: center;
37 | padding-bottom: 1rem;
38 | position: relative;
39 | }
40 |
41 | .section-heading::before {
42 | content: "";
43 | position: absolute;
44 | display: block;
45 | width: 240px;
46 | height: 1px;
47 | background: #ddd;
48 | bottom: 1px;
49 | left: calc(50% - 120px);
50 | }
51 |
52 | .section-heading::after {
53 | content: "";
54 | position: absolute;
55 | display: block;
56 | width: 80px;
57 | height: 3px;
58 | background: var(--bs-primary);
59 | bottom: 0;
60 | left: calc(50% - 40px);
61 | }
62 |
63 | .section-copy {
64 | max-width: 768px;
65 | margin-left: auto;
66 | margin-right: auto;
67 | }
68 |
69 | ////////////
70 | /*Top Link*/
71 | body.dark a.top-link {
72 | opacity: 1;
73 | transition: all ease-in-out 0.3s;
74 | visibility: visible;
75 | }
76 | a.top-link {
77 | bottom: 10px;
78 | opacity: 0;
79 | position: fixed;
80 | right: 10px;
81 | transition: all ease-in-out 0.3s;
82 | visibility: hidden;
83 | z-index: 4;
84 | }
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vite";
2 | import webfontDownload from "vite-plugin-webfont-dl";
3 | import { ViteMinifyPlugin } from "vite-plugin-minify";
4 | const IN_PRODUCTION = process.env.NODE_ENV === "production";
5 | const IN_DEVELOPMENT = process.env.NODE_ENV === "development";
6 |
7 | // Hide Preloader while in development.
8 | const hidePreloader = () => {
9 | return {
10 | name: "hide-preloader",
11 | transformIndexHtml(html) {
12 | return html.replace(
13 | ` `,
14 | ``
15 | );
16 | }
17 | }
18 | }
19 |
20 | export default defineConfig({
21 | plugins: [
22 |
23 | /* ## Hide Preloader while in Development
24 | --------------------------------------------- */
25 | IN_DEVELOPMENT && hidePreloader(),
26 |
27 | /* ## Download Google Fonts and attach them with production build for offline use
28 | --------------------------------------------- */
29 | IN_PRODUCTION && webfontDownload(
30 | [
31 | "https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;700&display=swap",
32 | ]
33 | ),
34 |
35 | /* ## Minify the output HTML files in production
36 | --------------------------------------------- */
37 | IN_PRODUCTION && ViteMinifyPlugin({}),
38 | ],
39 |
40 | css: {
41 | preprocessorOptions: {
42 | scss: {
43 | api: 'modern',
44 | }
45 | }
46 | },
47 |
48 | base: "./",
49 | server: {
50 | port: 3000,
51 | },
52 |
53 | build: {
54 | // outDir: "./docs",
55 | minify: 'terser',
56 | terserOptions: {
57 | format: {
58 | comments: false,
59 | },
60 | },
61 | },
62 |
63 | });
64 |
--------------------------------------------------------------------------------
/public/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 404 - Page Not Found
9 |
10 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
Oops!
62 |
63 |
404 - Page not found
64 |
Uh-oh! It seems the page you're looking for has either been removed, relocated, or may not exist at all. Before you
65 | venture further, double-check the URL in your browser. If all seems well, consider navigating back to our homepage to
66 | explore anew. Thanks for your understanding!
67 |
Go To Homepage
68 |
69 |
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/src/scss/_contactus.scss:
--------------------------------------------------------------------------------
1 | // contact form
2 | // import partials ---
3 | @use "./variables" as v;
4 |
5 |
6 | .contact-form {
7 |
8 | & label {
9 | margin-bottom: 0.2rem;
10 | color: var(--bs-primary);
11 | font-weight: 500;
12 | }
13 |
14 | & input,
15 | & textarea {
16 | background-color: v.$even-bg;
17 | border-radius: 5px;
18 | border: 1px solid var(--bs-primary);
19 | margin-bottom: 2rem;
20 | outline: 0;
21 | padding: 0.5rem;
22 | transition: v.$transition;
23 | width: 100%;
24 | }
25 |
26 | & input:focus,
27 | & textarea:focus {
28 | background-color: v.$odd-bg;
29 | box-shadow: inset 1px 1px 2px rgba(0, 0, 0, 0.25);
30 | border-color: v.$info;
31 | }
32 | }
33 |
34 | @media only screen and (max-width: 992px) {
35 | .contact-form {
36 |
37 | & input,
38 | & textarea {
39 | margin-bottom: 1rem;
40 | }
41 | }
42 | }
43 |
44 |
45 | ////////////////////////
46 | /// working hours widget
47 | .working-hours {
48 | border: 1px solid var(--bs-primary);
49 |
50 | & table {
51 | margin-bottom: 0;
52 |
53 | & .thead>tr>th {
54 | background-color: v.$even-bg;
55 | }
56 |
57 | & tbody>tr>td:first-child {
58 | font-weight: 500;
59 | }
60 |
61 | & tbody>tr:nth-child(odd)>td {
62 | background-color: v.$odd-bg;
63 | }
64 |
65 | & tbody>tr:nth-child(even)>td {
66 | background-color: v.$even-bg;
67 | }
68 |
69 | }
70 |
71 | }
72 |
73 | /////////////
74 | // map widget
75 | .map-widget-container {
76 | position: relative;
77 | padding-bottom: 400px !important;
78 | height: 0;
79 | overflow: hidden;
80 | height: auto;
81 | border: 1px solid var(--bs-primary);
82 | display: block;
83 |
84 | & iframe {
85 | position: absolute;
86 | top: 0;
87 | left: 0;
88 | width: 100% !important;
89 | height: 100% !important;
90 | max-height: 400px !important;
91 | }
92 | }
--------------------------------------------------------------------------------
/postcss.config.cjs:
--------------------------------------------------------------------------------
1 | // const autoprefixer = require("autoprefixer");
2 | // const cssnano = require('cssnano');
3 | // const purgecss = require("@fullhuman/postcss-purgecss");
4 | const IN_PRODUCTION = process.env.NODE_ENV === "production";
5 | const bootstrap = "node_modules/bootstrap"
6 |
7 |
8 | module.exports = {
9 | plugins: [
10 | IN_PRODUCTION &&
11 | require("@fullhuman/postcss-purgecss")({
12 | content: [
13 | "index.html",
14 | "./src/**/*.js",
15 | // --- Import only the required components.
16 | `${bootstrap}/js/dist/alert.js`,
17 | // `${bootstrap}/js/dist/base-component.js`,
18 | // `${bootstrap}/js/dist/button.js`,
19 | // `${bootstrap}/js/dist/carousel.js`,
20 | // `${bootstrap}/js/dist/collapse.js`,
21 | // `${bootstrap}/js/dist/dropdown.js`,
22 | // `${bootstrap}/js/dist/modal.js`,
23 | // `${bootstrap}/js/dist/offcanvas.js`,
24 | // `${bootstrap}/js/dist/popover.js`,
25 | // `${bootstrap}/js/dist/scrollspy.js`,
26 | // `${bootstrap}/js/dist/tab.js`,
27 | // `${bootstrap}/js/dist/toast.js`,
28 | // `${bootstrap}/js/dist/tooltip.js`,
29 | ],
30 | defaultExtractor(content) {
31 | const contentWithoutStyleBlocks = content.replace(
32 | /
8 |
9 |
10 |
21 |
26 |
33 |
35 |
37 |
40 |
41 |
42 |
45 |
50 |
51 |
52 |
56 |
61 |
66 |
72 |
77 |
79 |
86 |
87 |
88 |
93 |
96 |
100 |
105 |
108 |
112 |
115 |
119 |
120 |
121 |
123 |
125 |
134 |
138 |
140 |
149 |
151 |
161 |
163 |
165 |
166 |
175 |
177 |
179 |
186 |
188 |
189 |
198 |
200 |
201 |
202 |
203 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | Car Club Tire & Auto Repair Services - Orange City, Florida
10 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
93 |
94 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
117 |
118 |
Loading
119 |
120 |
121 |
122 | Skip to content
123 |
124 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 | Discover the best place for auto repair services in Orange City, Florida.
175 |
176 |
177 | Our expert technicians provide top-notch solutions for all your automotive needs.
178 | From tire change to complete auto repairs, trust us for reliable and certified services.
179 |
180 |
181 |
187 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 | Deals for a Limited Time
202 |
203 |
204 |
205 |
206 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
219 |
220 |
221 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
235 |
236 |
237 |
239 |
240 |
241 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 | About Us
255 |
256 |
257 |
258 |
259 | Welcome to Car Club Tire, your trusted auto repair shop in Orange City, FL.
260 | Our customer-centric approach ensures your satisfaction is our priority.
261 | Our certified technicians deliver top-notch services, from tire replacements to wheel alignments,
262 | providing personalized care and a commitment to excellence. Drive away with confidence and peace
263 | of mind, experience the difference at Car Club Tire.
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
275 |
276 |
277 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
Why Choose Us
295 |
296 |
297 |
298 | We offer top-notch auto repair services in Orange City, Florida. For all vehicle repairs, modifications, and
299 | maintenance, our team of highly skilled professionals is committed to giving the best possible service. We
300 | distinguish ourselves as the best option for your vehicle's requirements since we are passionate about
301 | automotive quality and customer satisfaction. Your valuable asset is in the capable hands of Car Club, where
302 | we go above and above for the maintenance of your vehicle.
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 | Testimonials
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
331 |
332 |
333 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
471 |
472 |
473 |
474 |
475 |
531 |
532 |
533 |
534 |
535 |
541 |
542 |
543 |
--------------------------------------------------------------------------------