summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md20
-rw-r--r--src/components/CustomStyles.astro20
-rw-r--r--src/components/blog/GridItem.astro5
-rw-r--r--src/components/blog/ListItem.astro2
-rw-r--r--src/components/widgets/Announcement.astro1
-rw-r--r--src/components/widgets/CallToActionImage.astro18
-rw-r--r--src/components/widgets/Features2Custom.astro9
-rw-r--r--src/components/widgets/Footer.astro4
-rw-r--r--src/components/widgets/Header.astro35
-rw-r--r--src/components/widgets/Map.astro6
-rw-r--r--src/components/widgets/Portfolio.astro6
-rw-r--r--src/components/widgets/Pricing.astro101
-rw-r--r--src/components/widgets/Steps2.astro10
-rw-r--r--src/config.yaml10
-rw-r--r--src/navigation.ts23
-rw-r--r--src/pages/index.astro75
-rw-r--r--src/utils/images.ts4
-rw-r--r--vendor/integration/types.d.ts9
-rw-r--r--vendor/integration/utils/configBuilder.ts8
19 files changed, 220 insertions, 146 deletions
diff --git a/README.md b/README.md
index f431771..5342558 100644
--- a/README.md
+++ b/README.md
@@ -16,17 +16,20 @@ Official website for **CustomWorks** - professional car detailing, wrapping, and
- **Premium materials** - working with high-quality products and techniques
### Company Details
+
- **Owner**: CustomWorks
- **Address**: Bydgoszcz, Miedzyń, Poland
- **Phone**: +48 790-209-770
- **Website**: https://www.customworks.pl
### Services
+
CustomWorks offers a complete range of automotive care services, from basic detailing to advanced protection and customization solutions.
## Website Technology
This website is built with:
+
- **[Astro 5.0](https://astro.build/)** - Modern static site generator
- **[Tailwind CSS](https://tailwindcss.com/)** - Utility-first CSS framework
- **TypeScript** - Type-safe development
@@ -36,18 +39,21 @@ This website is built with:
## Development
### Prerequisites
+
- Node.js 18.17.1 or higher
- npm or yarn
### Getting Started
1. **Clone the repository**
+
```bash
git clone <repository-url>
cd customworks.com
```
2. **Install dependencies**
+
```bash
npm install
```
@@ -60,13 +66,13 @@ This website is built with:
### Available Commands
-| Command | Description |
-|---------|-------------|
-| `npm run dev` | Start development server |
-| `npm run build` | Build for production |
-| `npm run preview` | Preview production build |
-| `npm run check` | Check for errors |
-| `npm run fix` | Fix linting and formatting issues |
+| Command | Description |
+| ----------------- | --------------------------------- |
+| `npm run dev` | Start development server |
+| `npm run build` | Build for production |
+| `npm run preview` | Preview production build |
+| `npm run check` | Check for errors |
+| `npm run fix` | Fix linting and formatting issues |
## Project Structure
diff --git a/src/components/CustomStyles.astro b/src/components/CustomStyles.astro
index 9798cb6..696b899 100644
--- a/src/components/CustomStyles.astro
+++ b/src/components/CustomStyles.astro
@@ -34,14 +34,14 @@ import '@fontsource/poppins';
--aw-color-text-heading: #162130; /* Głęboki granat dla nagłówków */
--aw-color-text-default: #000000; /* Czerń dla tekstu na jasnym tle */
--aw-color-text-muted: #888888; /* Stonowana szarość */
- --aw-color-bg-page: #FFFFFF; /* Klasyczna biel */
- --aw-color-bg-section: #FFFFFF; /* Klasyczna biel */
+ --aw-color-bg-page: #ffffff; /* Klasyczna biel */
+ --aw-color-bg-section: #ffffff; /* Klasyczna biel */
--aw-color-bg-page-dark: #162130; /* Głęboki granat */
::selection {
background-color: #162130;
- color: #FFFFFF;
+ color: #ffffff;
}
}
@@ -51,18 +51,18 @@ import '@fontsource/poppins';
--aw-font-heading: 'Kanit';
/* Dark mode */
- --aw-color-primary: #FFFFFF; /* Biały dla kontrastu na ciemnym tle */
- --aw-color-secondary: #FFFFFF; /* Biały dla kontrastu na ciemnym tle */
- --aw-color-accent: #FFFFFF; /* Biały dla kontrastu na ciemnym tle */
+ --aw-color-primary: #ffffff; /* Biały dla kontrastu na ciemnym tle */
+ --aw-color-secondary: #ffffff; /* Biały dla kontrastu na ciemnym tle */
+ --aw-color-accent: #ffffff; /* Biały dla kontrastu na ciemnym tle */
- --aw-color-text-heading: #CCCCCC; /* Jasna szarość na ciemnym tle */
- --aw-color-text-default: #CCCCCC; /* Jasna szarość na ciemnym tle */
+ --aw-color-text-heading: #cccccc; /* Jasna szarość na ciemnym tle */
+ --aw-color-text-default: #cccccc; /* Jasna szarość na ciemnym tle */
--aw-color-text-muted: #888888; /* Stonowana szarość */
--aw-color-bg-page: #162130; /* Głęboki granat */
- --aw-color-bg-section: #FFFFFF; /* Klasyczna biel dla jasnych sekcji */
+ --aw-color-bg-section: #ffffff; /* Klasyczna biel dla jasnych sekcji */
::selection {
- background-color: #FFFFFF;
+ background-color: #ffffff;
color: #162130;
}
}
diff --git a/src/components/blog/GridItem.astro b/src/components/blog/GridItem.astro
index 73353ca..823063c 100644
--- a/src/components/blog/GridItem.astro
+++ b/src/components/blog/GridItem.astro
@@ -58,7 +58,10 @@ const link = APP_BLOG?.post?.isEnabled ? getPermalink(post.permalink, 'post') :
<h3 class="text-xl sm:text-2xl font-bold leading-tight mb-2 font-heading dark:text-slate-300">
{
link ? (
- <a class="inline-block hover:text-primary dark:hover:text-secondary transition ease-in duration-200" href={link}>
+ <a
+ class="inline-block hover:text-primary dark:hover:text-secondary transition ease-in duration-200"
+ href={link}
+ >
{post.title}
</a>
) : (
diff --git a/src/components/blog/ListItem.astro b/src/components/blog/ListItem.astro
index 36602f2..f078c25 100644
--- a/src/components/blog/ListItem.astro
+++ b/src/components/blog/ListItem.astro
@@ -94,7 +94,7 @@ const link = APP_BLOG?.post?.isEnabled ? getPermalink(post.permalink, 'post') :
{
link ? (
<a
- class="inline-block hover:text-primary dark:hover:text-secondary transition ease-in duration-200"
+ class="inline-block hover:text-primary dark:hover:text-secondary transition ease-in duration-200"
href={link}
>
{post.title}
diff --git a/src/components/widgets/Announcement.astro b/src/components/widgets/Announcement.astro
index 8e4bf78..e3098d5 100644
--- a/src/components/widgets/Announcement.astro
+++ b/src/components/widgets/Announcement.astro
@@ -12,5 +12,4 @@
<a href="#contact" class="text-muted hover:underline dark:text-slate-400 font-medium"
>Skontaktuj się z nami - Darmowa wycena! »</a
>
-
</div>
diff --git a/src/components/widgets/CallToActionImage.astro b/src/components/widgets/CallToActionImage.astro
index df13145..80e181e 100644
--- a/src/components/widgets/CallToActionImage.astro
+++ b/src/components/widgets/CallToActionImage.astro
@@ -47,27 +47,19 @@ const {
image && (
<div class="flex justify-center mt-6 px-4">
{image.href ? (
- <a
- href={image.href}
+ <a
+ href={image.href}
target={image.target || '_self'}
rel={image.target === '_blank' ? 'noopener noreferrer' : ''}
class="inline-block hover:opacity-80 transition-opacity duration-200"
>
- <Image
- src={image.src}
- alt={image.alt}
- class="max-h-20 h-auto w-auto max-w-full object-contain"
- />
+ <Image src={image.src} alt={image.alt} class="max-h-20 h-auto w-auto max-w-full object-contain" />
</a>
) : (
- <Image
- src={image.src}
- alt={image.alt}
- class="max-h-20 h-auto w-auto max-w-full object-contain"
- />
+ <Image src={image.src} alt={image.alt} class="max-h-20 h-auto w-auto max-w-full object-contain" />
)}
</div>
)
}
</div>
-</WidgetWrapper> \ No newline at end of file
+</WidgetWrapper>
diff --git a/src/components/widgets/Features2Custom.astro b/src/components/widgets/Features2Custom.astro
index 18c1546..605fd08 100644
--- a/src/components/widgets/Features2Custom.astro
+++ b/src/components/widgets/Features2Custom.astro
@@ -33,7 +33,7 @@ const {
<WidgetWrapper id={id} isDark={isDark} containerClass={`max-w-7xl mx-auto ${classes?.container ?? ''}`} bg={bg}>
<Headline title={title} subtitle={subtitle} tagline={tagline} classes={classes?.headline as Record<string, string>} />
-
+
{
items && items.length > 0 && (
<div
@@ -69,7 +69,10 @@ const {
)}
<div class={twMerge('text-xl font-bold', titleClass, itemClasses?.title)}>{title}</div>
{description && (
- <p class={twMerge('text-muted mt-2', descriptionClass, itemClasses?.description)} set:html={description} />
+ <p
+ class={twMerge('text-muted mt-2', descriptionClass, itemClasses?.description)}
+ set:html={description}
+ />
)}
{callToAction && (
<div class="mt-2">
@@ -81,4 +84,4 @@ const {
</div>
)
}
-</WidgetWrapper> \ No newline at end of file
+</WidgetWrapper>
diff --git a/src/components/widgets/Footer.astro b/src/components/widgets/Footer.astro
index 70cac54..55501ff 100644
--- a/src/components/widgets/Footer.astro
+++ b/src/components/widgets/Footer.astro
@@ -1,7 +1,5 @@
---
import { Icon } from 'astro-icon/components';
-import { SITE } from 'astrowind:config';
-import { getHomePermalink } from '~/utils/permalinks';
interface Link {
text?: string;
@@ -23,7 +21,7 @@ export interface Props {
theme?: string;
}
-const { socialLinks = [], secondaryLinks = [], links = [], footNote = '', theme = 'light' } = Astro.props;
+const { socialLinks = [], footNote = '', theme = 'light' } = Astro.props;
---
<footer class:list={[{ dark: theme === 'dark' }, 'relative border-t border-gray-200 dark:border-slate-800 not-prose']}>
diff --git a/src/components/widgets/Header.astro b/src/components/widgets/Header.astro
index 0064a30..f5d5236 100644
--- a/src/components/widgets/Header.astro
+++ b/src/components/widgets/Header.astro
@@ -1,14 +1,41 @@
---
import { Icon } from 'astro-icon/components';
+import { SITE } from 'astrowind:config';
---
<header class="bg-black text-white py-2 px-4">
- <div class="max-w-7xl mx-auto flex items-center justify-center">
+ <div class="max-w-7xl mx-auto flex items-center justify-between">
<div class="flex items-center space-x-2">
<Icon name="tabler:phone" class="w-4 h-4" />
- <a href="tel:+48790209770" class="text-sm font-medium hover:text-gray-300 transition-colors">
- +48 790-209-770
- </a>
+ <a href="tel:+48790209770" class="text-sm font-medium hover:text-gray-300 transition-colors"> +48 790-209-770 </a>
</div>
+ {
+ SITE.social && (SITE.social.facebook || SITE.social.instagram) && (
+ <div class="flex items-center space-x-3">
+ {SITE.social.facebook && (
+ <a
+ href={SITE.social.facebook}
+ aria-label="Facebook"
+ class="text-white hover:text-gray-300 transition-colors"
+ target="_blank"
+ rel="noopener noreferrer"
+ >
+ <Icon name="tabler:brand-facebook" class="w-4 h-4" />
+ </a>
+ )}
+ {SITE.social.instagram && (
+ <a
+ href={SITE.social.instagram}
+ aria-label="Instagram"
+ class="text-white hover:text-gray-300 transition-colors"
+ target="_blank"
+ rel="noopener noreferrer"
+ >
+ <Icon name="tabler:brand-instagram" class="w-4 h-4" />
+ </a>
+ )}
+ </div>
+ )
+ }
</div>
</header>
diff --git a/src/components/widgets/Map.astro b/src/components/widgets/Map.astro
index dae8253..76d81a4 100644
--- a/src/components/widgets/Map.astro
+++ b/src/components/widgets/Map.astro
@@ -21,11 +21,11 @@ const {
// Use provided coordinates or default to Bydgoszcz, Miedzyń
const coordinates = {
lat: lat,
- lon: lon
+ lon: lon,
};
// Create map URL with proper coordinates
-const mapUrl = `https://www.openstreetmap.org/export/embed.html?bbox=${coordinates.lon-0.01},${coordinates.lat-0.01},${coordinates.lon+0.01},${coordinates.lat+0.01}&layer=mapnik&marker=${coordinates.lat},${coordinates.lon}`;
+const mapUrl = `https://www.openstreetmap.org/export/embed.html?bbox=${coordinates.lon - 0.01},${coordinates.lat - 0.01},${coordinates.lon + 0.01},${coordinates.lat + 0.01}&layer=mapnik&marker=${coordinates.lat},${coordinates.lon}`;
---
<WidgetWrapper id={id} isDark={isDark} containerClass={`max-w-7xl mx-auto ${classes?.container ?? ''}`} bg={bg}>
@@ -57,4 +57,4 @@ const mapUrl = `https://www.openstreetmap.org/export/embed.html?bbox=${coordinat
</div>
</div>
</div>
-</WidgetWrapper> \ No newline at end of file
+</WidgetWrapper>
diff --git a/src/components/widgets/Portfolio.astro b/src/components/widgets/Portfolio.astro
index 8cd230c..d4016a7 100644
--- a/src/components/widgets/Portfolio.astro
+++ b/src/components/widgets/Portfolio.astro
@@ -10,7 +10,7 @@ const {
subtitle = '',
tagline = '',
items = [],
- columns = 3,
+
callToAction,
id,
@@ -38,7 +38,7 @@ const {
layout="responsive"
{...image}
/>
- <div class="absolute inset-0 bg-black bg-opacity-0 group-hover:bg-opacity-20 transition-all duration-300"></div>
+ <div class="absolute inset-0 bg-black bg-opacity-0 group-hover:bg-opacity-20 transition-all duration-300" />
</div>
</div>
))
@@ -53,4 +53,4 @@ const {
</div>
)
}
-</WidgetWrapper> \ No newline at end of file
+</WidgetWrapper>
diff --git a/src/components/widgets/Pricing.astro b/src/components/widgets/Pricing.astro
index d8cd2a6..b0c2fa1 100644
--- a/src/components/widgets/Pricing.astro
+++ b/src/components/widgets/Pricing.astro
@@ -18,12 +18,7 @@ const {
} = Astro.props;
---
-<WidgetWrapper
- id={id}
- isDark={isDark}
- containerClass={`mx-auto ${classes?.container ?? ''}`}
- bg={bg}
->
+<WidgetWrapper id={id} isDark={isDark} containerClass={`mx-auto ${classes?.container ?? ''}`} bg={bg}>
<Headline
title={title}
subtitle={subtitle}
@@ -38,60 +33,66 @@ const {
<div class="md:flex md:gap-8">
<div class="md:w-1/2">
{
- items && items.length > 0 && items.filter((_, index) => index % 2 === 0).map((item) => (
- <div class="mb-8">
- {item.title && (
- <h3 class="text-lg font-bold leading-6 dark:text-white mb-4">{item.title}</h3>
- )}
- <hr class="mb-8 border-2">
- {item.entries && item.entries.length > 0 && (
- <table class="w-full border-collapse">
- <tbody>
- {item.entries.map((entry) => (
- <tr class="h-12">
- <td class="w-1/2 h-12 px-4 text-muted dark:text-slate-400" set:html={entry.description}></td>
- <td class="w-1/2 text-right h-12 px-4 text-muted dark:text-slate-400">{entry.price}</td>
- </tr>
- ))}
- </tbody>
- </table>
- )}
- </div>
- ))
+ items &&
+ items.length > 0 &&
+ items
+ .filter((_, index) => index % 2 === 0)
+ .map((item) => (
+ <div class="mb-8">
+ {item.title && <h3 class="text-lg font-bold leading-6 dark:text-white mb-4">{item.title}</h3>}
+ <hr class="mb-8 border-2" />
+ {item.entries && item.entries.length > 0 && (
+ <table class="w-full border-collapse">
+ <tbody>
+ {item.entries.map((entry) => (
+ <tr class="h-12">
+ <td class="w-1/2 h-12 px-4 text-muted dark:text-slate-400" set:html={entry.description} />
+ <td class="w-1/2 text-right h-12 px-4 text-muted dark:text-slate-400">{entry.price}</td>
+ </tr>
+ ))}
+ </tbody>
+ </table>
+ )}
+ </div>
+ ))
}
</div>
<div class="md:w-1/2">
{
- items && items.length > 0 && items.filter((_, index) => index % 2 === 1).map((item) => (
- <div class="mb-8">
- {item.title && (
- <h3 class="text-lg font-bold leading-6 dark:text-white mb-4">{item.title}</h3>
- )}
- <hr class="mb-8 border-2">
- {item.entries && item.entries.length > 0 && (
- <table class="w-full border-collapse">
- <tbody>
- {item.entries.map((entry) => (
- <tr class="h-12">
- <td class="w-1/2 h-12 px-4 text-muted dark:text-slate-400" set:html={entry.description}></td>
- <td class="w-1/2 text-right h-12 px-4 text-muted dark:text-slate-400">{entry.price}</td>
- </tr>
- ))}
- </tbody>
- </table>
- )}
- </div>
- ))
+ items &&
+ items.length > 0 &&
+ items
+ .filter((_, index) => index % 2 === 1)
+ .map((item) => (
+ <div class="mb-8">
+ {item.title && <h3 class="text-lg font-bold leading-6 dark:text-white mb-4">{item.title}</h3>}
+ <hr class="mb-8 border-2" />
+ {item.entries && item.entries.length > 0 && (
+ <table class="w-full border-collapse">
+ <tbody>
+ {item.entries.map((entry) => (
+ <tr class="h-12">
+ <td class="w-1/2 h-12 px-4 text-muted dark:text-slate-400" set:html={entry.description} />
+ <td class="w-1/2 text-right h-12 px-4 text-muted dark:text-slate-400">{entry.price}</td>
+ </tr>
+ ))}
+ </tbody>
+ </table>
+ )}
+ </div>
+ ))
}
</div>
</div>
</div>
<div class="mt-12 text-center">
- {await Astro.slots.render('disclaimer') && (
- <div class="text-xs text-muted dark:text-slate-400 mb-8" set:html={await Astro.slots.render('disclaimer')} />
- )}
-
+ {
+ (await Astro.slots.render('disclaimer')) && (
+ <div class="text-xs text-muted dark:text-slate-400 mb-8" set:html={await Astro.slots.render('disclaimer')} />
+ )
+ }
+
{
actions && actions.length > 0 && (
<div class="max-w-xs sm:max-w-md m-auto flex flex-nowrap flex-col sm:flex-row sm:justify-center gap-4 mt-6">
diff --git a/src/components/widgets/Steps2.astro b/src/components/widgets/Steps2.astro
index 0891663..7a84282 100644
--- a/src/components/widgets/Steps2.astro
+++ b/src/components/widgets/Steps2.astro
@@ -23,7 +23,10 @@ const {
function makeEmailsClickable(text: string | undefined): string {
if (!text) return '';
const emailRegex = /([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/g;
- return text.replace(emailRegex, '<a href="mailto:$1" class="text-primary hover:text-secondary transition-colors">$1</a>');
+ return text.replace(
+ emailRegex,
+ '<a href="mailto:$1" class="text-primary hover:text-secondary transition-colors">$1</a>'
+ );
}
---
@@ -67,7 +70,10 @@ function makeEmailsClickable(text: string | undefined): string {
</div>
<div class="pl-4 rtl:pl-0 rtl:pr-4">
<h3 class="mb-4 text-xl font-semibold font-heading" set:html={title2} />
- <p class="text-muted dark:text-gray-400" set:html={description ? makeEmailsClickable(description) : ''} />
+ <p
+ class="text-muted dark:text-gray-400"
+ set:html={description ? makeEmailsClickable(description) : ''}
+ />
</div>
</li>
))
diff --git a/src/config.yaml b/src/config.yaml
index 0c5c1b1..87d121b 100644
--- a/src/config.yaml
+++ b/src/config.yaml
@@ -6,17 +6,21 @@ site:
googleSiteVerificationId: orcPxI47GSa-cRvY11tUe6iGg2IO_RPvnA1q95iEM3M
+ social:
+ facebook: 'https://www.facebook.com/profile.php?id=100091581500469'
+ instagram: 'https://www.instagram.com/custom_works_bdg'
+
# Default SEO metadata
metadata:
title:
- default: CustomWorks – Detailing, wrapping, tuning | Profesjonalne usługi pielęgnacji samochodów – Bydgoszcz
+ default: CustomWorks – Detailing, wrapping, tuning | Profesjonalne usługi pielęgnacji samochodów – Bydgoszcz
template: '%s — CustomWorks'
- description: "CustomWorks oferuje detailing, wrapping, tuning i powłoki ochronne. Renowacja lakieru, folie PPF, powłoki ceramiczne – Bydgoszcz, kujawsko-pomorskie."
+ description: 'CustomWorks oferuje detailing, wrapping, tuning i powłoki ochronne. Renowacja lakieru, folie PPF, powłoki ceramiczne – Bydgoszcz, kujawsko-pomorskie.'
robots:
index: true
follow: true
openGraph:
- site_name: CustomWorks – Detailing, wrapping, tuning | Profesjonalne usługi pielęgnacji samochodów – Bydgoszcz
+ site_name: CustomWorks – Detailing, wrapping, tuning | Profesjonalne usługi pielęgnacji samochodów – Bydgoszcz
images:
- url: '~/assets/images/customworks-hero.webp'
width: 819
diff --git a/src/navigation.ts b/src/navigation.ts
index 7186a35..baa9bb4 100644
--- a/src/navigation.ts
+++ b/src/navigation.ts
@@ -1,4 +1,5 @@
-import { getPermalink, getBlogPermalink, getAsset } from './utils/permalinks';
+import { getPermalink, getBlogPermalink } from './utils/permalinks';
+import { SITE } from 'astrowind:config';
export const headerData = {
links: [
@@ -123,8 +124,26 @@ export const footerData = {
secondaryLinks: [],
socialLinks: [
{ text: 'Polityka prywatności', href: getPermalink('/polityka-prywatnosci') },
+ ...(SITE.social?.facebook
+ ? [
+ {
+ ariaLabel: 'Facebook',
+ href: SITE.social.facebook,
+ icon: 'tabler:brand-facebook',
+ },
+ ]
+ : []),
+ ...(SITE.social?.instagram
+ ? [
+ {
+ ariaLabel: 'Instagram',
+ href: SITE.social.instagram,
+ icon: 'tabler:brand-instagram',
+ },
+ ]
+ : []),
],
footNote: `
- Strona obsługiwana przez <a class="text-primary underline dark:text-muted" href="https://www.rycerz.xyz/">Craftknight</a> Copyright 2025 © Wszystkie prawa zastrzeżone
+ <span class="text-xs text-muted dark:text-slate-400">Strona obsługiwana przez <a class="text-primary underline dark:text-muted" href="https://www.rycerz.xyz/">Craftknight</a> Copyright 2025 © Wszystkie prawa zastrzeżone</span>
`,
};
diff --git a/src/pages/index.astro b/src/pages/index.astro
index df14280..e095fe0 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -2,16 +2,9 @@
import Layout from '~/layouts/PageLayout.astro';
import Hero from '~/components/widgets/Hero2.astro';
-import Note from '~/components/widgets/Note.astro';
-import Features from '~/components/widgets/Features.astro';
import Features2Custom from '~/components/widgets/Features2Custom.astro';
import Steps2 from '~/components/widgets/Steps2.astro';
import Content from '~/components/widgets/Content.astro';
-import BlogLatestPosts from '~/components/widgets/BlogLatestPosts.astro';
-import FAQs from '~/components/widgets/FAQs.astro';
-import Stats from '~/components/widgets/Stats.astro';
-import CallToAction from '~/components/widgets/CallToAction.astro';
-import CallToActionImage from '~/components/widgets/CallToActionImage.astro';
import Pricing from '~/components/widgets/Pricing.astro';
import Portfolio from '~/components/widgets/Portfolio.astro';
import Map from '~/components/widgets/Map.astro';
@@ -35,7 +28,10 @@ const metadata = {
},
{ text: 'Usługi', href: '#features' },
]}
- image={{ src: '~/assets/images/hero-image.webp', alt: 'CustomWorks - Profesjonalne usługi detailingu samochodowego' }}
+ image={{
+ src: '~/assets/images/hero-image.webp',
+ alt: 'CustomWorks - Profesjonalne usługi detailingu samochodowego',
+ }}
>
<Fragment slot="title">
<span class="text-accent dark:text-white">
@@ -44,9 +40,7 @@ const metadata = {
</span>
</Fragment>
- <Fragment slot="subtitle">
- Twój specjalista od pielęgnacji samochodów
- </Fragment>
+ <Fragment slot="subtitle"> Twój specjalista od pielęgnacji samochodów </Fragment>
</Hero>
<!-- Oferowane usługi *************** -->
@@ -58,42 +52,50 @@ const metadata = {
items={[
{
title: 'Renowacja lakieru',
- description: 'Przywracam blask i witalność Twojego samochodu, usuwając wszelkie rysy, zadrapania i oznaki zużycia',
+ description:
+ 'Przywracam blask i witalność Twojego samochodu, usuwając wszelkie rysy, zadrapania i oznaki zużycia',
iconSvg: '/src/assets/images/spray-gun.svg',
},
{
title: 'Detailing wnętrz',
- description: 'Pielęgnuję wnętrze Twojego samochodu, stosując zaawansowane metody czyszczenia i zabezpieczania materiałów',
+ description:
+ 'Pielęgnuję wnętrze Twojego samochodu, stosując zaawansowane metody czyszczenia i zabezpieczania materiałów',
iconSvg: '/src/assets/images/interior-detailing.svg',
},
{
title: 'Powłoki ochronne',
- description: 'Specjalizuję się w aplikacji powłok ceramicznych, grafenowych i kwarcowych, zapewniając najwyższą jakość ochrony lakieru, a jednocześnie zachwycając wyglądem',
+ description:
+ 'Specjalizuję się w aplikacji powłok ceramicznych, grafenowych i kwarcowych, zapewniając najwyższą jakość ochrony lakieru, a jednocześnie zachwycając wyglądem',
iconSvg: '/src/assets/images/ceramic-coating.svg',
},
{
title: 'Niewidzialne wycieraczki',
- description: 'Zapewniam czyste i suche szyby dzięki rewolucyjnym niewidzialnym wycieraczkom, które utrzymują widoczność nawet w trudnych warunkach atmosferycznych',
+ description:
+ 'Zapewniam czyste i suche szyby dzięki rewolucyjnym niewidzialnym wycieraczkom, które utrzymują widoczność nawet w trudnych warunkach atmosferycznych',
iconSvg: '/src/assets/images/invisible-wipers.svg',
},
{
title: 'Ochrona lakieru foliami PPF',
- description: 'Zabezpieczam Twoje auto przed uszkodzeniami mechanicznymi, odpryskami i rysami, dzięki innowacyjnym foliom ochronnym PPF',
+ description:
+ 'Zabezpieczam Twoje auto przed uszkodzeniami mechanicznymi, odpryskami i rysami, dzięki innowacyjnym foliom ochronnym PPF',
iconSvg: '/src/assets/images/ppf-protection.svg',
},
{
title: 'Czyszczenie komory silnika',
- description: 'Dbam o serce Twojego samochodu, przeprowadzając profesjonalne czyszczenie komory silnika oraz jego podzespołów',
+ description:
+ 'Dbam o serce Twojego samochodu, przeprowadzając profesjonalne czyszczenie komory silnika oraz jego podzespołów',
iconSvg: '/src/assets/images/engine-cleaning.svg',
},
{
title: 'Zmiana koloru foliami',
- description: 'Daję Ci możliwość szybkiej i skutecznej metamorfozy Twojego pojazdu poprzez zmianę koloru za pomocą wysokiej jakości folii',
+ description:
+ 'Daję Ci możliwość szybkiej i skutecznej metamorfozy Twojego pojazdu poprzez zmianę koloru za pomocą wysokiej jakości folii',
iconSvg: '/src/assets/images/color-change.svg',
},
{
title: 'Tuning wizualny',
- description: 'Realizuję Twoje wizje i pomysły na wyjątkowy wygląd samochodu, oferując szeroki zakres opcji stylizacji zewnętrznej i wewnętrznej',
+ description:
+ 'Realizuję Twoje wizje i pomysły na wyjątkowy wygląd samochodu, oferując szeroki zakres opcji stylizacji zewnętrznej i wewnętrznej',
iconSvg: '/src/assets/images/visual-tuning.svg',
},
]}
@@ -112,8 +114,7 @@ const metadata = {
},
{
title: 'Doświadczenie i jakość',
- description:
- 'Działam z myślą o Twoim zadowoleniu, gwarantując solidność i niezawodność usług.',
+ description: 'Działam z myślą o Twoim zadowoleniu, gwarantując solidność i niezawodność usług.',
},
{
title: 'Kompleksowa opieka',
@@ -127,8 +128,12 @@ const metadata = {
}}
>
<Fragment slot="content">
- <h3 class="text-2xl font-bold tracking-tight dark:text-white sm:text-3xl mb-2">Profesjonalna opieka nad Twoim samochodem</h3>
- W Custom Works zawsze dokładam wszelkich starań, aby spełnić oczekiwania moich klientów, a nawet je przekroczyć. Działam z myślą o Twoim zadowoleniu, gwarantując solidność i niezawodność usług. Zapraszam do kontaktu ze mną, by dowiedzieć się więcej o tym, jak mogę nadać Twojemu samochodowi wyjątkowy charakter!
+ <h3 class="text-2xl font-bold tracking-tight dark:text-white sm:text-3xl mb-2">
+ Profesjonalna opieka nad Twoim samochodem
+ </h3>
+ W Custom Works zawsze dokładam wszelkich starań, aby spełnić oczekiwania moich klientów, a nawet je przekroczyć. Działam
+ z myślą o Twoim zadowoleniu, gwarantując solidność i niezawodność usług. Zapraszam do kontaktu ze mną, by dowiedzieć
+ się więcej o tym, jak mogę nadać Twojemu samochodowi wyjątkowy charakter!
</Fragment>
<Fragment slot="bg">
@@ -165,8 +170,12 @@ const metadata = {
}}
>
<Fragment slot="content">
- <h3 class="text-2xl font-bold tracking-tight dark:text-white sm:text-3xl mb-2">Kompleksowe rozwiązania dla Twojego samochodu</h3>
- Oferuję pełen zakres usług detailingowych, od podstawowego mycia po zaawansowane powłoki ochronne. Każdy samochód traktuję indywidualnie, dostosowując metody pracy do jego specyfiki. Używam tylko sprawdzonych i certyfikowanych produktów, gwarantując trwałe i satysfakcjonujące rezultaty.
+ <h3 class="text-2xl font-bold tracking-tight dark:text-white sm:text-3xl mb-2">
+ Kompleksowe rozwiązania dla Twojego samochodu
+ </h3>
+ Oferuję pełen zakres usług detailingowych, od podstawowego mycia po zaawansowane powłoki ochronne. Każdy samochód traktuję
+ indywidualnie, dostosowując metody pracy do jego specyfiki. Używam tylko sprawdzonych i certyfikowanych produktów,
+ gwarantując trwałe i satysfakcjonujące rezultaty.
</Fragment>
<Fragment slot="bg">
@@ -253,10 +262,11 @@ const metadata = {
download: true,
},
]}
- >
+ >
<Fragment slot="disclaimer">
- Podane ceny są cenami orientacyjnymi, dokładna wycena podawana jest po oględzinach pojazdu.<br><br>
- Lista usług jest orientacyjna i ogólna, jeśli jesteś zainteresowany czymś nietypowym to zapraszam do kontaktu, postaram się pomóc.
+ Podane ceny są cenami orientacyjnymi, dokładna wycena podawana jest po oględzinach pojazdu.<br /><br />
+ Lista usług jest orientacyjna i ogólna, jeśli jesteś zainteresowany czymś nietypowym to zapraszam do kontaktu, postaram
+ się pomóc.
</Fragment>
</Pricing>
@@ -282,13 +292,7 @@ const metadata = {
<!-- Mapa **************** -->
- <Map
- title="Lokalizacja"
- location="Bydgoszcz, Miedzyń"
- lat={53.13105}
- lon={17.93132}
- height={600}
- />
+ <Map title="Lokalizacja" location="Bydgoszcz, Miedzyń" lat={53.13105} lon={17.93132} height={600} />
<!-- Kontakt **************** -->
@@ -309,5 +313,4 @@ const metadata = {
},
]}
/>
-
</Layout>
diff --git a/src/utils/images.ts b/src/utils/images.ts
index d6f14f0..a33584e 100644
--- a/src/utils/images.ts
+++ b/src/utils/images.ts
@@ -84,9 +84,7 @@ export const adaptOpenGraphImages = async (
typeof resolvedImage !== 'string' && resolvedImage?.width <= defaultWidth
? [resolvedImage?.width, resolvedImage?.height]
: [defaultWidth, defaultHeight];
- _image = (
- await astroAssetsOptimizer(resolvedImage, [dimensions[0]], dimensions[0], dimensions[1], 'jpg')
- )[0];
+ _image = (await astroAssetsOptimizer(resolvedImage, [dimensions[0]], dimensions[0], dimensions[1], 'jpg'))[0];
}
if (typeof _image === 'object') {
diff --git a/vendor/integration/types.d.ts b/vendor/integration/types.d.ts
index 3b6113b..257c82a 100644
--- a/vendor/integration/types.d.ts
+++ b/vendor/integration/types.d.ts
@@ -1,5 +1,12 @@
declare module 'astrowind:config' {
- import type { SiteConfig, I18NConfig, MetaDataConfig, AppBlogConfig, UIConfig, AnalyticsConfig } from './config';
+ import type {
+ SiteConfig,
+ I18NConfig,
+ MetaDataConfig,
+ AppBlogConfig,
+ UIConfig,
+ AnalyticsConfig,
+ } from './utils/configBuilder';
export const SITE: SiteConfig;
export const I18N: I18NConfig;
diff --git a/vendor/integration/utils/configBuilder.ts b/vendor/integration/utils/configBuilder.ts
index 1c60e9b..4e9339a 100644
--- a/vendor/integration/utils/configBuilder.ts
+++ b/vendor/integration/utils/configBuilder.ts
@@ -19,6 +19,10 @@ export interface SiteConfig {
base?: string;
trailingSlash?: boolean;
googleSiteVerificationId?: string;
+ social?: {
+ facebook?: string;
+ instagram?: string;
+ };
}
export interface MetaDataConfig extends Omit<MetaData, 'title'> {
title?: {
@@ -92,6 +96,10 @@ const getSite = (config: Config) => {
trailingSlash: false,
googleSiteVerificationId: '',
+ social: {
+ facebook: undefined,
+ instagram: undefined,
+ },
};
return merge({}, _default, config?.site ?? {}) as SiteConfig;