├── .prettierrc ├── src ├── images │ ├── icon.png │ ├── social.png │ ├── blog │ │ ├── anna.avif │ │ ├── brad.avif │ │ ├── jacob.avif │ │ ├── post-1.avif │ │ ├── post-2.avif │ │ └── post-3.avif │ ├── hero-image.avif │ ├── aerial-view.avif │ ├── before-after.avif │ ├── blueprint-1.avif │ ├── blueprint-2.avif │ ├── icon-maskable.png │ ├── using-tools.avif │ ├── automated-tools.avif │ ├── dashboard-image.avif │ ├── features-image.avif │ ├── person-working.avif │ ├── product-image-1.avif │ ├── product-image-2.avif │ ├── product-image-3.avif │ ├── product-image-4.avif │ ├── blueprints-image.avif │ ├── construction-image.avif │ ├── insights │ │ ├── insight-1.avif │ │ ├── insight-2.avif │ │ └── insight-3.avif │ ├── progress-building.avif │ ├── under-construction.avif │ ├── construction-workers.avif │ ├── product-image-main-1.avif │ ├── product-image-main-2.avif │ ├── product-image-main-3.avif │ ├── product-image-main-4.avif │ └── icon.svg ├── utils │ ├── ui.ts │ ├── utils.ts │ ├── fr │ │ └── navigation.ts │ └── navigation.ts ├── env.d.ts ├── assets │ ├── scripts │ │ └── lenisSmoothScroll.js │ └── styles │ │ └── lenis.css ├── components │ ├── ui │ │ ├── avatars │ │ │ ├── AvatarTestimonialSection.astro │ │ │ ├── Avatar.astro │ │ │ ├── AvatarBlogLarge.astro │ │ │ └── AvatarBlog.astro │ │ ├── blocks │ │ │ ├── StatsSmall.astro │ │ │ ├── StatsBig.astro │ │ │ ├── StatsGrid.astro │ │ │ ├── IconBlock.astro │ │ │ ├── MainSection.astro │ │ │ ├── LeftSection.astro │ │ │ ├── AccordionItem.astro │ │ │ ├── TabNav.astro │ │ │ ├── ReviewComponent.astro │ │ │ ├── TabContent.astro │ │ │ ├── ContactIconBlock.astro │ │ │ └── RightSection.astro │ │ ├── links │ │ │ ├── FooterSocialLink.astro │ │ │ └── NavLink.astro │ │ ├── forms │ │ │ ├── input │ │ │ │ ├── TextInput.astro │ │ │ │ ├── TextAreaInput.astro │ │ │ │ ├── PhoneInput.astro │ │ │ │ ├── Checkbox.astro │ │ │ │ ├── EmailContactInput.astro │ │ │ │ ├── EmailFooterInput.astro │ │ │ │ ├── EmailInput.astro │ │ │ │ └── PasswordInput.astro │ │ │ └── RecoverModal.astro │ │ ├── stars │ │ │ ├── FullStar.astro │ │ │ └── HalfStar.astro │ │ ├── icons │ │ │ └── Icon.astro │ │ ├── buttons │ │ │ ├── GithubBtn.astro │ │ │ ├── AuthBtn.astro │ │ │ ├── ProductTabBtn.astro │ │ │ ├── Btn404.astro │ │ │ ├── SecondaryCTA.astro │ │ │ ├── PrimaryCTA.astro │ │ │ ├── LoginBtn.astro │ │ │ └── GoogleBtn.astro │ │ ├── starlight │ │ │ ├── Head.astro │ │ │ ├── MobileMenuFooter.astro │ │ │ └── SiteTitle.astro │ │ ├── cards │ │ │ ├── CardRelated.astro │ │ │ ├── CardSmall.astro │ │ │ ├── CardWide.astro │ │ │ ├── CardInsight.astro │ │ │ ├── CardBlog.astro │ │ │ └── CardBlogRecent.astro │ │ └── feedback │ │ │ └── PostFeedback.astro │ ├── sections │ │ ├── misc │ │ │ ├── Authentication.astro │ │ │ └── FAQ.astro │ │ ├── testimonials │ │ │ ├── TestimonialItem.astro │ │ │ ├── TestimonialsSection.astro │ │ │ └── TestimonialsSectionAlt.astro │ │ ├── landing │ │ │ ├── ClientsSection.astro │ │ │ └── HeroSection.astro │ │ └── features │ │ │ ├── FeaturesStatsAlt.astro │ │ │ ├── FeaturesStats.astro │ │ │ └── FeaturesGeneral.astro │ └── ThemeIcon.astro ├── pages │ ├── robots.txt.ts │ ├── favicon.ico.ts │ ├── contact.astro │ ├── fr │ │ └── contact.astro │ ├── manifest.json.ts │ └── 404.astro ├── content │ ├── docs │ │ ├── zh-cn │ │ │ ├── guides │ │ │ │ ├── intro.mdx │ │ │ │ ├── first-project-checklist.mdx │ │ │ │ └── getting-started.mdx │ │ │ └── welcome-to-docs.mdx │ │ ├── construction │ │ │ ├── project-planning.mdx │ │ │ ├── custom-solutions.mdx │ │ │ ├── safety.mdx │ │ │ └── service-overview.mdx │ │ ├── ja │ │ │ ├── guides │ │ │ │ ├── intro.mdx │ │ │ │ ├── first-project-checklist.mdx │ │ │ │ └── getting-started.mdx │ │ │ └── welcome-to-docs.mdx │ │ ├── tools │ │ │ ├── tool-guides.mdx │ │ │ └── equipment-care.mdx │ │ ├── fa │ │ │ ├── guides │ │ │ │ ├── intro.mdx │ │ │ │ └── first-project-checklist.mdx │ │ │ └── welcome-to-docs.mdx │ │ ├── guides │ │ │ ├── intro.mdx │ │ │ └── first-project-checklist.mdx │ │ ├── welcome-to-docs.mdx │ │ ├── fr │ │ │ ├── guides │ │ │ │ ├── intro.mdx │ │ │ │ └── first-project-checklist.mdx │ │ │ └── welcome-to-docs.mdx │ │ ├── es │ │ │ ├── guides │ │ │ │ ├── intro.mdx │ │ │ │ └── first-project-checklist.mdx │ │ │ └── welcome-to-docs.mdx │ │ ├── de │ │ │ ├── welcome-to-docs.mdx │ │ │ └── guides │ │ │ │ ├── intro.mdx │ │ │ │ └── first-project-checklist.mdx │ │ └── advanced │ │ │ └── technical-specifications.mdx │ ├── blog │ │ ├── en │ │ │ ├── post-3.md │ │ │ ├── post-1.md │ │ │ └── post-2.md │ │ └── fr │ │ │ ├── post-3.md │ │ │ ├── post-1.md │ │ │ └── post-2.md │ └── products │ │ ├── en │ │ └── item-a765.md │ │ └── fr │ │ └── item-a765.md ├── data_files │ ├── features.json │ ├── pricing.json │ ├── fr │ │ ├── features.json │ │ ├── pricing.json │ │ └── faqs.json │ ├── mega_link.ts │ └── faqs.json ├── layouts │ └── MainLayout.astro └── content.config.ts ├── .gitignore ├── tsconfig.json ├── .github ├── dependabot.yml └── FUNDING.yml ├── process-html.mjs ├── .vscode └── settings.json ├── LICENSE ├── package.json └── vercel.json /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": ["prettier-plugin-tailwindcss"] 3 | } 4 | -------------------------------------------------------------------------------- /src/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/icon.png -------------------------------------------------------------------------------- /src/utils/ui.ts: -------------------------------------------------------------------------------- 1 | export const languages = { 2 | en: "English", 3 | fr: "Français", 4 | }; -------------------------------------------------------------------------------- /src/images/social.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/social.png -------------------------------------------------------------------------------- /src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /src/images/blog/anna.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/blog/anna.avif -------------------------------------------------------------------------------- /src/images/blog/brad.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/blog/brad.avif -------------------------------------------------------------------------------- /src/images/blog/jacob.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/blog/jacob.avif -------------------------------------------------------------------------------- /src/images/hero-image.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/hero-image.avif -------------------------------------------------------------------------------- /src/images/aerial-view.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/aerial-view.avif -------------------------------------------------------------------------------- /src/images/before-after.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/before-after.avif -------------------------------------------------------------------------------- /src/images/blog/post-1.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/blog/post-1.avif -------------------------------------------------------------------------------- /src/images/blog/post-2.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/blog/post-2.avif -------------------------------------------------------------------------------- /src/images/blog/post-3.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/blog/post-3.avif -------------------------------------------------------------------------------- /src/images/blueprint-1.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/blueprint-1.avif -------------------------------------------------------------------------------- /src/images/blueprint-2.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/blueprint-2.avif -------------------------------------------------------------------------------- /src/images/icon-maskable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/icon-maskable.png -------------------------------------------------------------------------------- /src/images/using-tools.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/using-tools.avif -------------------------------------------------------------------------------- /src/images/automated-tools.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/automated-tools.avif -------------------------------------------------------------------------------- /src/images/dashboard-image.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/dashboard-image.avif -------------------------------------------------------------------------------- /src/images/features-image.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/features-image.avif -------------------------------------------------------------------------------- /src/images/person-working.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/person-working.avif -------------------------------------------------------------------------------- /src/images/product-image-1.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/product-image-1.avif -------------------------------------------------------------------------------- /src/images/product-image-2.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/product-image-2.avif -------------------------------------------------------------------------------- /src/images/product-image-3.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/product-image-3.avif -------------------------------------------------------------------------------- /src/images/product-image-4.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/product-image-4.avif -------------------------------------------------------------------------------- /src/images/blueprints-image.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/blueprints-image.avif -------------------------------------------------------------------------------- /src/images/construction-image.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/construction-image.avif -------------------------------------------------------------------------------- /src/images/insights/insight-1.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/insights/insight-1.avif -------------------------------------------------------------------------------- /src/images/insights/insight-2.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/insights/insight-2.avif -------------------------------------------------------------------------------- /src/images/insights/insight-3.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/insights/insight-3.avif -------------------------------------------------------------------------------- /src/images/progress-building.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/progress-building.avif -------------------------------------------------------------------------------- /src/images/under-construction.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/under-construction.avif -------------------------------------------------------------------------------- /src/images/construction-workers.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/construction-workers.avif -------------------------------------------------------------------------------- /src/images/product-image-main-1.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/product-image-main-1.avif -------------------------------------------------------------------------------- /src/images/product-image-main-2.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/product-image-main-2.avif -------------------------------------------------------------------------------- /src/images/product-image-main-3.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/product-image-main-3.avif -------------------------------------------------------------------------------- /src/images/product-image-main-4.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mearashadowfax/ScrewFast/HEAD/src/images/product-image-main-4.avif -------------------------------------------------------------------------------- /src/assets/scripts/lenisSmoothScroll.js: -------------------------------------------------------------------------------- 1 | import "@styles/lenis.css"; 2 | 3 | import Lenis from "lenis"; 4 | 5 | // Script to handle Lenis library settings for smooth scrolling 6 | // https://github.com/darkroomengineering/lenis 7 | const lenis = new Lenis({ 8 | autoRaf: true, 9 | }); -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # build output 2 | dist/ 3 | # generated types 4 | .astro/ 5 | .idea/ 6 | 7 | # dependencies 8 | node_modules/ 9 | 10 | # logs 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | 17 | # environment variables 18 | .env 19 | .env.production 20 | 21 | # macOS-specific files 22 | .DS_Store 23 | -------------------------------------------------------------------------------- /src/components/ui/avatars/AvatarTestimonialSection.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const { src, alt } = Astro.props; 3 | 4 | interface Props { 5 | src: string; 6 | alt: string; 7 | } 8 | --- 9 | 10 |
11 | {alt} 17 |
18 | -------------------------------------------------------------------------------- /src/components/ui/avatars/Avatar.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Image } from "astro:assets"; 3 | 4 | const { src, alt } = Astro.props; 5 | 6 | interface Props { 7 | src: string; 8 | alt: string; 9 | } 10 | --- 11 | 12 | {alt} 19 | -------------------------------------------------------------------------------- /src/assets/styles/lenis.css: -------------------------------------------------------------------------------- 1 | html.lenis, 2 | html.lenis body { 3 | height: auto; 4 | } 5 | 6 | .lenis:not(.lenis-autoToggle).lenis-stopped { 7 | overflow: clip; 8 | } 9 | 10 | .lenis.lenis-smooth [data-lenis-prevent] { 11 | overscroll-behavior: contain; 12 | } 13 | 14 | .lenis.lenis-smooth iframe { 15 | pointer-events: none; 16 | } 17 | 18 | .lenis.lenis-autoToggle { 19 | transition-property: overflow; 20 | transition-duration: 1ms; 21 | transition-behavior: allow-discrete; 22 | } -------------------------------------------------------------------------------- /src/components/ui/blocks/StatsSmall.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Extract the properties from Astro.props 3 | const { title, subTitle } = Astro.props; 4 | // Define TypeScript interface for the properties 5 | interface Props { 6 | title: string; 7 | subTitle: string; 8 | } 9 | --- 10 | 11 | 12 |
13 |

{title}

14 |

{subTitle}

15 |
16 | -------------------------------------------------------------------------------- /src/utils/utils.ts: -------------------------------------------------------------------------------- 1 | // Format the date to a string 2 | function formatDate(date: Date): string { 3 | const options: Intl.DateTimeFormatOptions = {year: 'numeric', month: 'short', day: 'numeric'}; 4 | 5 | return new Date(date).toLocaleDateString(undefined, options); 6 | } 7 | // Capitalize the first letter 8 | function capitalize(str:string): string { 9 | if ( typeof str !== 'string' || str.length === 0 ) { 10 | return str; 11 | } 12 | return str.charAt(0).toUpperCase() + str.slice(1); 13 | } 14 | 15 | export { formatDate, capitalize }; -------------------------------------------------------------------------------- /src/components/ui/blocks/StatsBig.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Extract the properties from Astro.props 3 | const { title, subTitle } = Astro.props; 4 | // Define TypeScript interface for the properties 5 | interface Props { 6 | title: string; 7 | subTitle: string; 8 | } 9 | --- 10 | 11 | 12 |
13 |

14 | {title} 15 |

16 |

{subTitle}

17 |
18 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "astro/tsconfigs/strict", 3 | "compilerOptions": { 4 | "baseUrl": ".", 5 | "paths": { 6 | "@/*": ["src/*"], 7 | "@components/*": ["src/components/*"], 8 | "@content/*": ["src/content/*"], 9 | "@data/*": ["src/data_files/*"], 10 | "@images/*": ["src/images/*"], 11 | "@scripts/*": ["src/assets/scripts/*"], 12 | "@styles/*": ["src/assets/styles/*"], 13 | "@utils/*": ["src/utils/*"] 14 | } 15 | }, 16 | "include": [".astro/types.d.ts", "**/*"], 17 | "exclude": ["dist"] 18 | } 19 | -------------------------------------------------------------------------------- /src/components/ui/links/FooterSocialLink.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const { url } = Astro.props; 3 | interface Props { 4 | url: string; 5 | } 6 | const linkClass = 7 | "inline-flex h-10 w-10 items-center justify-center gap-x-2 rounded-lg border border-transparent text-sm font-bold text-neutral-700 outline-hidden ring-zinc-500 hover:bg-neutral-500/10 focus:outline-hidden focus-visible:ring-3 focus-visible:ring-zinc-500 dark:ring-zinc-200 dark:hover:bg-neutral-50/10"; 8 | --- 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "npm" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "weekly" 12 | -------------------------------------------------------------------------------- /src/components/ui/avatars/AvatarBlogLarge.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import necessary components 3 | import { Image } from "astro:assets"; 4 | 5 | import type { CollectionEntry } from "astro:content"; 6 | 7 | const { blogEntry } = Astro.props; 8 | 9 | interface Props { 10 | blogEntry: CollectionEntry<"blog">; 11 | } 12 | --- 13 | 14 |
15 | {blogEntry.data.authorImageAlt} 22 |
23 | -------------------------------------------------------------------------------- /src/components/ui/avatars/AvatarBlog.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import necessary components 3 | import { Image } from "astro:assets"; 4 | 5 | import type { CollectionEntry } from "astro:content"; 6 | 7 | const { blogEntry } = Astro.props; 8 | 9 | interface Props { 10 | blogEntry: CollectionEntry<"blog">; 11 | } 12 | --- 13 | 14 |
15 | {blogEntry.data.authorImageAlt} 22 |
23 | -------------------------------------------------------------------------------- /src/components/sections/misc/Authentication.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import the necessary components from their respective component files 3 | import LoginModal from "@components/ui/forms/LoginModal.astro"; 4 | import RegisterModal from "@components/ui/forms/RegisterModal.astro"; 5 | import RecoverModal from "@components/ui/forms/RecoverModal.astro"; 6 | import LoginBtn from "@components/ui/buttons/LoginBtn.astro"; 7 | --- 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/components/ui/blocks/StatsGrid.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Icon from "@components/ui/icons/Icon.astro"; 3 | 4 | const { count, description, index } = Astro.props; 5 | 6 | interface Props { 7 | count: string; 8 | description: string; 9 | index: number; 10 | } 11 | --- 12 | 13 |
  • 14 |
    17 | {index === 1 || index === 2 ? : null} 18 | {count} 19 |
    20 |

    21 | {description} 22 |

    23 |
  • 24 | -------------------------------------------------------------------------------- /process-html.mjs: -------------------------------------------------------------------------------- 1 | import fs from 'node:fs/promises' 2 | import { globby } from 'globby' 3 | import { minify } from 'html-minifier-terser' 4 | 5 | // Get all HTML files from the output directory 6 | const path = './.vercel/output/static' 7 | const files = await globby(`${path}/**/*.html`) 8 | 9 | await Promise.all( 10 | files.map(async (file) => { 11 | console.log('Processing file:', file) 12 | let html = await fs.readFile(file, 'utf-8') 13 | 14 | // Minify the HTML 15 | html = await minify(html, { 16 | removeComments: true, 17 | preserveLineBreaks: true, 18 | collapseWhitespace: true, 19 | minifyJS: true 20 | }) 21 | await fs.writeFile(file, html) 22 | }) 23 | ) -------------------------------------------------------------------------------- /src/pages/robots.txt.ts: -------------------------------------------------------------------------------- 1 | // https://docs.astro.build/en/guides/integrations-guide/sitemap/#usage 2 | import type { APIRoute } from 'astro'; 3 | 4 | const robotsTxt = ` 5 | User-agent: Googlebot 6 | Disallow: 7 | Allow: / 8 | Crawl-delay: 10 9 | 10 | User-agent: Yandex 11 | Disallow: 12 | Allow: / 13 | Crawl-delay: 2 14 | 15 | User-agent: archive.org_bot 16 | Disallow: 17 | Allow: / 18 | Crawl-delay: 2 19 | 20 | User-agent: * 21 | Disallow: / 22 | 23 | Sitemap: ${new URL('sitemap-index.xml', import.meta.env.SITE).href} 24 | `.trim(); 25 | 26 | export const GET: APIRoute = () => { 27 | return new Response(robotsTxt, { 28 | headers: { 29 | 'Content-Type': 'text/plain; charset=utf-8', 30 | }, 31 | }); 32 | }; -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | // Enable pasting files into a Markdown editor to create Markdown links. 3 | "markdown.editor.filePaste.enabled": true, 4 | 5 | // Copy pasted media files into a Markdown editor to the workspace. 6 | "markdown.editor.filePaste.copyIntoWorkspace": "mediaFiles", 7 | 8 | // Enable dropping files into a Markdown editor to create Markdown links. 9 | "markdown.editor.drop.enabled": true, 10 | 11 | // Copy dropped media files into a Markdown editor to the workspace. 12 | "markdown.editor.drop.copyIntoWorkspace": "mediaFiles", 13 | 14 | // Define the destination folder for copied files. 15 | "markdown.copyFiles.destination": { 16 | "/src/content/**/*": "/src/images/content/${documentBaseName}/" 17 | }, 18 | } 19 | -------------------------------------------------------------------------------- /src/components/ui/forms/input/TextInput.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const { label, id, name } = Astro.props; 3 | 4 | interface Props { 5 | label: string; 6 | name: string; 7 | id: string; 8 | } 9 | --- 10 | 11 |
    12 | 13 | 20 |
    21 | -------------------------------------------------------------------------------- /src/components/ui/forms/input/TextAreaInput.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const { label, id, name } = Astro.props; 3 | 4 | interface Props { 5 | label: string; 6 | name: string; 7 | id: string; 8 | } 9 | --- 10 | 11 |
    12 | 13 | 19 |
    20 | -------------------------------------------------------------------------------- /src/pages/favicon.ico.ts: -------------------------------------------------------------------------------- 1 | import type { APIRoute } from "astro"; 2 | import sharp from "sharp"; 3 | import ico from "sharp-ico"; 4 | import path from "node:path"; 5 | 6 | const faviconSrc = path.resolve("src/images/icon.png"); 7 | 8 | export const GET: APIRoute = async () => { 9 | 10 | // Resize the image to multiple sizes 11 | const sizes = [16, 32]; 12 | 13 | const buffers = await Promise.all( 14 | sizes.map(async (size) => { 15 | return await sharp(faviconSrc) 16 | .resize(size) 17 | .toFormat("png") 18 | .toBuffer(); 19 | }) 20 | ); 21 | 22 | // Convert the image to an ICO file 23 | const icoBuffer = ico.encode(buffers); 24 | 25 | return new Response(new Uint8Array(icoBuffer), { 26 | headers: { "Content-Type": "image/x-icon" }, 27 | }); 28 | }; 29 | -------------------------------------------------------------------------------- /src/components/ui/forms/input/PhoneInput.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const { label= Astro.currentLocale === "fr" ? "Numéro de téléphone" : "Phone Number", id } = Astro.props; 3 | 4 | interface Props { 5 | label?: string; 6 | id: string; 7 | } 8 | --- 9 | 10 |
    11 | 12 | 19 |
    20 | -------------------------------------------------------------------------------- /src/components/ui/stars/FullStar.astro: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /src/content/docs/zh-cn/guides/intro.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ScrewFast 服务介绍 3 | description: 探索 ScrewFast 的全面文档,深入了解我们的优质工具和建筑服务。 4 | sidebar: 5 | label: Introduction to Services 6 | order: 2 7 | --- 8 | 9 | import { 10 | Tabs, 11 | TabItem, 12 | } from "@astrojs/starlight/components"; 13 | 14 | 作为我们致力于为您的所有建筑和硬件需求提供端到端解决方案的一部分,我们在 ScrewFast 自豪地提供一套全面的专业服务。从最初的咨询到最终的验收,我们多方位的服务涵盖了您项目的全部,确保质量的结果和客户满意度。本文档的本节将指导您了解如何充分利用我们的专业知识。 15 | 16 | ## 服务概述 17 | 18 | 19 | 20 | 每个建筑项目都带来了独特的挑战和需求。在 ScrewFast,我们定制我们的服务以满足您的特定需求,确保无论您的项目规模或复杂程度如何,我们的团队都能以精确和专业的方式处理。 21 | 22 | 23 | 利用我们熟练员工的技能,从建筑师和工程师到熟练的劳动者,每个人都为将您的愿景变为现实做出了贡献。 24 | 25 | 26 | 质量是我们做的一切的核心。我们采用严格的质量控制措施,确保我们交付的工作符合甚至超出行业标准。 27 | 28 | 29 | 我们与客户的关系在项目完成后并不结束。我们提供持续支持,以解决任何问题,并确保您对投资的持久满意度。 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/components/ui/icons/Icon.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Icons } from "./icons.ts"; 3 | 4 | interface Path { 5 | d: string; 6 | class?: string; 7 | } 8 | 9 | const { name } = Astro.props; 10 | 11 | let icon = (Icons as any)[name] || {}; 12 | 13 | let paths: Path[] = icon.paths || []; 14 | --- 15 | 16 | { 17 | icon ? ( 18 | {icon.title} 31 | {paths.map((path: Path) => ( 32 | 33 | ))} 34 | 35 | ) : ( 36 | "Icon not found" 37 | ) 38 | } 39 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 12 | polar: # Replace with a single Polar username 13 | buy_me_a_coffee: mearashadowfax 14 | thanks_dev: # Replace with a single thanks.dev username 15 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 16 | -------------------------------------------------------------------------------- /src/components/ui/blocks/IconBlock.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Get heading and content from Astro props 3 | const { heading, content } = Astro.props; 4 | // Define TypeScript interface for props 5 | interface Props { 6 | heading?: string; 7 | content?: string; 8 | } 9 | // Define classes for heading and content 10 | const headingClasses = 11 | "text-balance text-lg font-bold text-neutral-800 dark:text-neutral-200"; 12 | const contentClasses = 13 | "mt-1 text-pretty text-neutral-700 dark:text-neutral-300"; 14 | --- 15 | 16 | 17 |
    18 | 19 | 20 |
    21 | 22 |

    23 | {heading} 24 |

    25 | 26 |

    {content}

    27 |
    28 |
    29 | -------------------------------------------------------------------------------- /src/components/ui/forms/input/Checkbox.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const { label = Astro.currentLocale === "fr" ? "Me rappeler" : "Remember me", id } = Astro.props; 3 | 4 | interface Props { 5 | label?: string; 6 | id?: string; 7 | } 8 | --- 9 | 10 | 11 |
    12 | 13 |
    14 | 20 |
    21 | 22 |
    23 | 26 |
    27 |
    28 | -------------------------------------------------------------------------------- /src/content/docs/construction/project-planning.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Project Planning and Management 3 | description: Explore ScrewFast's comprehensive documentation for an in-depth look at our premium tools and construction services. 4 | sidebar: 5 | label: Project Planning 6 | order: 2 7 | --- 8 | 9 | import { 10 | Card 11 | } from "@astrojs/starlight/components"; 12 | 13 | Achieve seamless project execution with ScrewFast's meticulous planning and management approach. We prioritize clear communication and strategic planning to ensure your project milestones are achieved without compromise. 14 | 15 | 16 | - Detailed project timelines 17 | - Resource allocation and optimization 18 | - Regular progress updates and reports 19 | - Risk assessment and management 20 | 21 | We believe in proactive management to foresee potential challenges and devise solutions before they impact the project. -------------------------------------------------------------------------------- /src/components/ui/buttons/GithubBtn.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Icon from "@components/ui/icons/Icon.astro"; 3 | const { title, url } = Astro.props; 4 | 5 | interface Props { 6 | title?: string; 7 | url?: string; 8 | } 9 | 10 | const baseClasses = 11 | "group inline-flex items-center justify-center gap-x-3 rounded-lg px-4 py-3 text-center text-sm font-medium text-neutral-700 ring-zinc-500 focus-visible:ring-3 transition duration-300 outline-hidden"; 12 | const borderClasses = "border border-transparent"; 13 | const bgColorClasses = "bg-yellow-400 dark:focus:outline-hidden"; 14 | const hoverClasses = "hover:shadow-2xl hover:shadow-yellow-500"; 15 | const fontSizeClasses = "2xl:text-base"; 16 | const ringClasses = "dark:ring-zinc-200"; 17 | --- 18 | 19 | 25 | 26 | {title} 27 | 28 | -------------------------------------------------------------------------------- /src/content/docs/construction/custom-solutions.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Custom Solutions for Complex Projects 3 | description: Explore ScrewFast's comprehensive documentation for an in-depth look at our premium tools and construction services. 4 | sidebar: 5 | label: Custom Solutions 6 | order: 4 7 | --- 8 | 9 | import { 10 | Card 11 | } from "@astrojs/starlight/components"; 12 | 13 | Challenging projects demand innovative solutions. ScrewFast excels in delivering custom solutions engineered to address the most intricate and demanding construction requirements. 14 | 15 | 16 | - Expert analysis of unconventional project demands 17 | - Tailored construction methods for unique structures 18 | - Specialized materials and equipment sourcing 19 | - Collaboration with specialized subcontractors and consultants 20 | 21 | 22 | No matter the complexity, our bespoke services ensure that your specialized project is not just completed, but mastered. -------------------------------------------------------------------------------- /src/images/icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/components/ui/forms/input/EmailContactInput.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const { label = Astro.currentLocale === "fr" ? "E-mail" : "Email", id } = Astro.props; 3 | 4 | interface Props { 5 | label?: string; 6 | id: string; 7 | } 8 | --- 9 | 10 | 11 |
    12 | 13 | 14 | 15 | 23 |
    24 | -------------------------------------------------------------------------------- /src/components/ui/stars/HalfStar.astro: -------------------------------------------------------------------------------- 1 | 8 | 11 | 14 | 15 | -------------------------------------------------------------------------------- /src/data_files/features.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "heading": "Dedicated Teams", 4 | "content": "Benefit from our committed teams who ensure your success is personal. Count on expert guidance and exceptional results throughout your project journey.", 5 | "svg": "groups" 6 | }, 7 | { 8 | "heading": "Simplicity and Affordability", 9 | "content": "Find easy-to-use, affordable solutions with ScrewFast's line of tools and equipment. Our products make procurement simple and keep projects within budget.", 10 | "svg": "verified" 11 | }, 12 | { 13 | "heading": "Comprehensive Documentation", 14 | "content": "Integrate with ease using ScrewFast's exhaustive guides and libraries. Achieve seamless product adoption with our full suite of documentation designed for your success.", 15 | "svg": "books" 16 | }, 17 | { 18 | "heading": "User-Centric Design", 19 | "content": "Experience the difference with ScrewFast's user-focused design — where functionality meets practicality for an enhanced work experience.", 20 | "svg": "frame" 21 | } 22 | ] -------------------------------------------------------------------------------- /src/components/ui/starlight/Head.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import type { Props } from "@astrojs/starlight/props"; 3 | import StarlightHead from "@astrojs/starlight/components/Head.astro"; 4 | import VtbotStarlight from "astro-vtbot/components/starlight/Base.astro"; 5 | --- 6 | 7 | 8 | 9 | 12 | 13 | 14 | 25 | 26 | 36 | -------------------------------------------------------------------------------- /src/components/ui/starlight/MobileMenuFooter.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import LanguageSelect from "@astrojs/starlight/components/LanguageSelect.astro"; 3 | import SocialIcons from "@astrojs/starlight/components/SocialIcons.astro"; 4 | import ThemeSelect from "src/components/ui/starlight/ThemeSelectMobile.astro"; 5 | import type { Props } from "@astrojs/starlight/props"; 6 | --- 7 | 8 |
    9 | 12 | 13 | 14 |
    15 | 16 | 35 | -------------------------------------------------------------------------------- /src/components/ui/buttons/AuthBtn.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Destructure the properties from Astro.props 3 | const { title } = Astro.props; 4 | 5 | // Define TypeScript interface for the properties 6 | interface Props { 7 | title: string; 8 | } 9 | // Define CSS classes for styling the button 10 | const baseClasses = 11 | "inline-flex w-full items-center justify-center gap-x-2 rounded-lg px-4 py-3 text-sm font-bold text-neutral-700 focus-visible:ring-3 outline-hidden transition duration-300"; 12 | const borderClasses = "border border-transparent"; 13 | const bgColorClasses = "bg-yellow-400 dark:focus:outline-hidden"; 14 | const hoverClasses = "hover:bg-yellow-500"; 15 | const fontSizeClasses = "2xl:text-base"; 16 | const disabledClasses = "disabled:pointer-events-none disabled:opacity-50"; 17 | const ringClasses = "ring-zinc-500 dark:ring-zinc-200"; 18 | --- 19 | 20 | 21 | 26 | -------------------------------------------------------------------------------- /src/utils/fr/navigation.ts: -------------------------------------------------------------------------------- 1 | 2 | const navBarLinks = [ 3 | { name: "Accueil", url: "/fr" }, 4 | { name: "Produits", url: "/fr/products" }, 5 | { name: "Services", url: "/fr/services" }, 6 | { name: "Blog", url: "/fr/blog" }, 7 | { name: "Contact", url: "/fr/contact" }, 8 | ]; 9 | 10 | const footerLinks = [ 11 | { 12 | section: "Écosystème", 13 | links: [ 14 | { name: "Documentation", url: "/fr/welcome-to-docs/" }, 15 | { name: "Outils et Équipements", url: "/fr/products" }, 16 | { name: "Services de Construction", url: "/fr/services" }, 17 | ], 18 | }, 19 | { 20 | section: "Société", 21 | links: [ 22 | { name: "À propos de nous", url: "#" }, 23 | { name: "Blog", url: "/fr/blog" }, 24 | { name: "Carrières", url: "#" }, 25 | { name: "Clients", url: "#" }, 26 | ], 27 | }, 28 | ]; 29 | 30 | const socialLinks = { 31 | facebook: "#", 32 | x: "#", 33 | github: "https://github.com/mearashadowfax/ScrewFast", 34 | google: "#", 35 | slack: "#", 36 | }; 37 | 38 | export default { 39 | navBarLinks, 40 | footerLinks, 41 | socialLinks, 42 | }; -------------------------------------------------------------------------------- /src/content/docs/ja/guides/intro.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: はじめに 3 | description: ScrewFastの包括的なドキュメントを探索して、プレミアムツールと建設サービスを詳しく見てください。 4 | sidebar: 5 | label: Introduction to Services 6 | order: 2 7 | --- 8 | 9 | import { 10 | Tabs, 11 | TabItem, 12 | } from "@astrojs/starlight/components"; 13 | 14 | 私たちの建設およびハードウェアニーズに対するエンドツーエンドのソリューションを提供することへの取り組みの一環として、ScrewFastは、プロフェッショナルなサービスの包括的なスイートを提供することを誇りに思っています。初回の相談から最終検査まで、私たちの多面的なサービスは、あなたのプロジェクト全体を包括し、品質の結果と顧客満足を保証します。このドキュメントのこのセクションでは、私たちの専門知識を最大限に活用するために知っておく必要があるすべてのことを案内します。 15 | 16 | ## サービスの概要 17 | 18 | 19 | 20 | 各建設プロジェクトには独自の課題と要求があります。ScrewFastでは、サービスをカスタマイズして、プロジェクトのスケールや複雑さに関係なく、チームが正確かつプロフェッショナルに対応できるようにします。 21 | 22 | 23 | 私たちの知識豊富なスタッフ、建築家からエンジニアまで、各々が専門知識を活かし、あなたのビジョンを実現します。 24 | 25 | 26 | 品質は私たちのすべての活動の中心にあります。私たちは厳格な品質管理策を採用して、提供する作業が業界基準を満たし、それを上回ることを保証します。 27 | 28 | 29 | プロジェクトが完了したら、私たちとの関係は終わりません。問題を解決し、あなたの投資に対する持続的な満足を保証するために、継続的なサポートを提供します。 30 | 31 | 32 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Emil Gulamov 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/content/docs/construction/safety.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Safety Protocols and Procedures 3 | description: Explore ScrewFast's comprehensive documentation for an in-depth look at our premium tools and construction services. 4 | sidebar: 5 | label: Safety Protocols 6 | order: 3 7 | --- 8 | 9 | import { Card, CardGrid, LinkCard } from "@astrojs/starlight/components"; 10 | 11 | Safety is at the core of everything we do at ScrewFast. Our comprehensive safety protocols and procedures are designed to protect our team, clients, and the integrity of your project. 12 | 13 | 14 | 15 | 19 | 20 | 21 | 25 | 29 | 30 | 31 | By integrating safety into our daily operations, we create a secure working environment without compromising on quality and productivity. 32 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "screwfast-template", 3 | "type": "module", 4 | "version": "0.0.1", 5 | "scripts": { 6 | "dev": "astro dev", 7 | "start": "astro dev", 8 | "build": "astro check && astro build && node process-html.mjs", 9 | "preview": "astro preview", 10 | "astro": "astro" 11 | }, 12 | "dependencies": { 13 | "@astrojs/check": "^0.9.6", 14 | "@astrojs/mdx": "^4.3.13", 15 | "@astrojs/sitemap": "^3.6.0", 16 | "@astrojs/starlight": "^0.37.1", 17 | "@tailwindcss/vite": "^4.1.18", 18 | "astro": "^5.16.6", 19 | "astro-compressor": "^1.2.0", 20 | "clipboard": "^2.0.11", 21 | "globby": "^16.1.0", 22 | "gsap": "^3.14.2", 23 | "html-minifier-terser": "^7.2.0", 24 | "lenis": "^1.3.16", 25 | "preline": "^3.2.3", 26 | "rimraf": "^6.1.2", 27 | "sharp": "^0.34.5", 28 | "sharp-ico": "^0.1.5", 29 | "tailwindcss": "^4.1.17" 30 | }, 31 | "devDependencies": { 32 | "@tailwindcss/forms": "^0.5.11", 33 | "astro-vtbot": "^2.1.9", 34 | "prettier": "^3.7.4", 35 | "prettier-plugin-astro": "^0.14.1", 36 | "prettier-plugin-tailwindcss": "^0.7.2", 37 | "typescript": "^5.9.3" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/components/sections/testimonials/TestimonialItem.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Image } from "astro:assets"; 3 | import Icon from "../../ui/icons/Icon.astro"; 4 | 5 | const { content, author, role, avatarSrc } = Astro.props; 6 | 7 | interface Props { 8 | content: string; 9 | author: string; 10 | role: string; 11 | avatarSrc: string; 12 | } 13 | --- 14 | 15 |
    16 | 17 | 18 |
    19 |

    20 | {content} 21 |

    22 |
    23 | 24 |
    25 |
    26 |
    27 | Avatar Description 34 |
    35 |
    36 |
    37 | {author} 38 |
    39 |
    {role}
    40 |
    41 |
    42 |
    43 |
    44 | -------------------------------------------------------------------------------- /src/data_files/pricing.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Simple, Transparent Pricing", 3 | "subTitle": "Boost efficiency with ScrewFast's clear, value-driven plans.", 4 | "badge": "Best value", 5 | "thirdOption": "Enterprise Solutions?", 6 | "btnText": "Get a Custom Quote", 7 | 8 | "starterKit": { 9 | "name": "Starter Kit", 10 | "description": "Best option for DIY projects", 11 | "price": "49", 12 | "cents": ".00", 13 | "billingFrequency": "USD / monthly", 14 | "features": [ 15 | "Key hardware tools", 16 | "Access to guides & tutorials", 17 | "Standard support" 18 | ], 19 | "purchaseBtnTitle": "Get the Starter Kit", 20 | "purchaseLink": "#" 21 | }, 22 | 23 | "professionalToolbox": { 24 | "name": "Professional Toolbox", 25 | "description": "Best for large scale uses", 26 | "price": "89", 27 | "cents": ".00", 28 | "billingFrequency": "USD / monthly", 29 | "features": [ 30 | "Premium tool selection", 31 | "Priority support", 32 | "Exclusive content & deals", 33 | "Bulk order discounts" 34 | ], 35 | "purchaseBtnTitle": "Get the Professional Toolbox", 36 | "purchaseLink": "#" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/components/ui/buttons/ProductTabBtn.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Destructure the properties from Astro.props 3 | const { id, dataTab, title, first } = Astro.props; 4 | 5 | // Define TypeScript interface for the properties 6 | interface Props { 7 | id: string; 8 | dataTab: string; 9 | title: string; 10 | first?: boolean; 11 | } 12 | // Define constants for styling classes 13 | const BUTTON_CLASS = 14 | "flex w-full justify-center rounded-xl border border-transparent p-3 outline-hidden ring-zinc-500 transition duration-300 hover:bg-neutral-100 focus-visible:ring-3 dark:ring-zinc-200 dark:hover:bg-neutral-700 dark:focus:outline-hidden md:p-5"; 15 | 16 | const HEADING_CLASS = "block text-center font-bold"; 17 | const INACTIVE_HEADING_CLASS = "text-neutral-800 dark:text-neutral-200"; 18 | --- 19 | 20 | 21 | 35 | -------------------------------------------------------------------------------- /src/data_files/fr/features.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "heading": "Équipes dédiées", 4 | "content": "Bénéficiez de nos équipes engagées qui veillent à ce que votre réussite soit personnelle. Comptez sur un accompagnement expert et des résultats exceptionnels tout au long de votre parcours de projet.", 5 | "svg": "groups" 6 | }, 7 | { 8 | "heading": "Simplicité et accessibilité", 9 | "content": "Trouvez des solutions faciles à utiliser et abordables avec la gamme d'outils et d'équipements de ScrewFast. Nos produits simplifient l'approvisionnement et permettent de respecter les budgets de projet.", 10 | "svg": "verified" 11 | }, 12 | { 13 | "heading": "Documentation complète", 14 | "content": "Intégrez facilement grâce aux guides exhaustifs et aux bibliothèques de ScrewFast. Réalisez une adoption de produit sans faille avec notre ensemble complet de documentation conçu pour votre succès.", 15 | "svg": "books" 16 | }, 17 | { 18 | "heading": "Conception centrée sur l'utilisateur", 19 | "content": "Faites l'expérience de la différence avec la conception axée sur l'utilisateur de ScrewFast, où la fonctionnalité rencontre la praticité pour une expérience de travail améliorée.", 20 | "svg": "frame" 21 | } 22 | ] -------------------------------------------------------------------------------- /src/utils/navigation.ts: -------------------------------------------------------------------------------- 1 | // An array of links for navigation bar 2 | const navBarLinks = [ 3 | { name: "Home", url: "/" }, 4 | { name: "Products", url: "/products" }, 5 | { name: "Services", url: "/services" }, 6 | { name: "Blog", url: "/blog" }, 7 | { name: "Contact", url: "/contact" }, 8 | ]; 9 | // An array of links for footer 10 | const footerLinks = [ 11 | { 12 | section: "Ecosystem", 13 | links: [ 14 | { name: "Documentation", url: "/welcome-to-docs/" }, 15 | { name: "Tools & Equipment", url: "/products" }, 16 | { name: "Construction Services", url: "/services" }, 17 | ], 18 | }, 19 | { 20 | section: "Company", 21 | links: [ 22 | { name: "About us", url: "#" }, 23 | { name: "Blog", url: "/blog" }, 24 | { name: "Careers", url: "#" }, 25 | { name: "Customers", url: "#" }, 26 | ], 27 | }, 28 | ]; 29 | // An object of links for social icons 30 | const socialLinks = { 31 | facebook: "https://www.facebook.com/", 32 | x: "https://twitter.com/", 33 | github: "https://github.com/mearashadowfax/ScrewFast", 34 | google: "https://www.google.com/", 35 | slack: "https://slack.com/", 36 | }; 37 | 38 | export default { 39 | navBarLinks, 40 | footerLinks, 41 | socialLinks, 42 | }; -------------------------------------------------------------------------------- /src/components/ui/buttons/Btn404.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Icon from "@components/ui/icons/Icon.astro"; 3 | // Destructure the properties from Astro.props 4 | const { title, id, noArrow } = Astro.props; 5 | // Define TypeScript interface for the properties 6 | interface Props { 7 | title?: string; 8 | id?: string; 9 | noArrow?: boolean; 10 | } 11 | // Define CSS classes for styling the button 12 | const baseClasses = 13 | "group inline-flex items-center justify-center gap-x-2 rounded-lg px-4 py-3 text-sm font-bold text-neutral-50 ring-zinc-500 transition duration-300 focus-visible:ring-3 outline-hidden"; 14 | const borderClasses = "border border-transparent"; 15 | const bgColorClasses = 16 | "bg-orange-400 hover:bg-orange-500 active:bg-orange-500 dark:focus:outline-hidden"; 17 | const disableClasses = "disabled:pointer-events-none disabled:opacity-50"; 18 | const fontSizeClasses = "2xl:text-base"; 19 | const ringClasses = "dark:ring-zinc-200"; 20 | --- 21 | 22 | 23 | 31 | -------------------------------------------------------------------------------- /src/components/ui/buttons/SecondaryCTA.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Destructure the properties from Astro.props 3 | const { title, url } = Astro.props; 4 | 5 | // Define TypeScript interface for the properties 6 | interface Props { 7 | title?: string; 8 | url?: string; 9 | } 10 | // Define CSS classes for the hyperlink button 11 | const baseClasses = 12 | "inline-flex items-center justify-center gap-x-2 rounded-lg px-4 py-3 text-center text-sm font-medium text-neutral-600 shadow-xs outline-hidden ring-zinc-500 focus-visible:ring-3 transition duration-300"; 13 | const borderClasses = "border border-neutral-200"; 14 | const bgColorClasses = "bg-neutral-300"; 15 | const hoverClasses = 16 | "hover:bg-neutral-400/50 hover:text-neutral-600 active:text-neutral-700"; 17 | const disableClasses = "disabled:pointer-events-none disabled:opacity-50"; 18 | const fontSizeClasses = "2xl:text-base"; 19 | const ringClasses = "ring-zinc-500"; 20 | 21 | const darkClasses = 22 | "dark:border-neutral-700 dark:bg-zinc-700 dark:text-neutral-300 dark:ring-zinc-200 dark:hover:bg-zinc-600 dark:focus:outline-hidden"; 23 | --- 24 | 25 | 26 | 30 | {title} 31 | 32 | -------------------------------------------------------------------------------- /src/components/ui/buttons/PrimaryCTA.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Icon from "@components/ui/icons/Icon.astro"; 3 | // Destructure the properties from Astro.props 4 | const { title, url, noArrow } = Astro.props; 5 | // Define TypeScript interface for the properties 6 | interface Props { 7 | title?: string; 8 | url?: string; 9 | noArrow?: boolean; 10 | } 11 | // Define CSS classes for styling the button 12 | const baseClasses = 13 | "group inline-flex items-center justify-center gap-x-2 rounded-lg px-4 py-3 text-sm font-bold text-neutral-50 ring-zinc-500 transition duration-300 focus-visible:ring-3 outline-hidden"; 14 | const borderClasses = "border border-transparent"; 15 | const bgColorClasses = 16 | "bg-orange-400 hover:bg-orange-500 active:bg-orange-500 dark:focus:outline-hidden"; 17 | const disableClasses = "disabled:pointer-events-none disabled:opacity-50"; 18 | const fontSizeClasses = "2xl:text-base"; 19 | const ringClasses = "dark:ring-zinc-200"; 20 | --- 21 | 22 | 23 | 27 | {title} 28 | 29 | 30 | {noArrow ? null : } 31 | 32 | -------------------------------------------------------------------------------- /src/data_files/fr/pricing.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Tarification Simple et Transparente", 3 | "subTitle": "Augmentez l'efficacité avec les plans clairs et axés sur la valeur de ScrewFast.", 4 | "badge": "Meilleure valeur", 5 | "thirdOption": "Solutions Entreprise?", 6 | "btnText": "Obtenez un Devis Personnalisé", 7 | 8 | "starterKit": { 9 | "name": "Kit de Démarrage", 10 | "description": "Meilleure option pour les projets de bricolage", 11 | "price": "$49", 12 | "cents": ".00", 13 | "billingFrequency": "USD / mensuel", 14 | "features": [ 15 | "Outils matériels essentiels", 16 | "Accès aux guides et tutoriels", 17 | "Support standard" 18 | ], 19 | "purchaseBtnTitle": "Obtenez le Kit de Démarrage", 20 | "purchaseLink": "#" 21 | }, 22 | 23 | "professionalToolbox": { 24 | "name": "Boîte à Outils Professionnelle", 25 | "description": "Idéale pour les utilisations à grande échelle", 26 | "price": "$89", 27 | "cents": ".00", 28 | "billingFrequency": "USD / mensuel", 29 | "features": [ 30 | "Sélection d'outils premium", 31 | "Support prioritaire", 32 | "Contenu et offres exclusifs", 33 | "Remises sur les commandes en gros" 34 | ], 35 | "purchaseBtnTitle": "Obtenez la Boîte à Outils Professionnelle", 36 | "purchaseLink": "#" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/components/ui/starlight/SiteTitle.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import mainLogo from "@images/starlight/screwfast_logo_dark.svg?raw"; 3 | import docsLogo from "@images/starlight/docs_logo.svg?raw"; 4 | import type { Props } from "@astrojs/starlight/props"; 5 | 6 | 7 | const main = "/"; 8 | const locale = Astro.props.locale ? Astro.props.locale + "/" : ""; 9 | const docs = "/" + locale + "welcome-to-docs/"; 10 | --- 11 | 12 | 13 |
    50 | -------------------------------------------------------------------------------- /src/content/docs/tools/tool-guides.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Tool Guides 3 | description: Explore ScrewFast's comprehensive documentation for an in-depth look at our premium tools and construction services. 4 | sidebar: 5 | label: Tool Guides 6 | order: 1 7 | --- 8 | 9 | ScrewFast prides itself on a comprehensive range of high-grade tools and equipment. These resources are not just about delivering the performance you expect but ensuring they stand the test of time. Below, you will find a curated selection of guides geared towards helping you get the most out of our products. 10 | 11 | ### Tool Guides 12 | 13 | **Machine Screws Manual** 14 | - Detailed specifications and applications for ScrewFast's variety of machine screws 15 | - Visual guide for identifying screw types and choosing the right one for your project 16 | 17 | **Assorted Screw Set Handbook** 18 | - Instructions on usage and selection from the assorted screw set 19 | - Tips on organizing and storing your screw set for easy access 20 | 21 | **Tap Bolts and Nuts Catalog** 22 | - Exploring the diverse range of tap bolts and nuts suitable for various construction environments 23 | - Guidelines for selecting the correct bolt size and nut pairing for secure fastening 24 | 25 | **Hex Bolts Instructions** 26 | - Comprehensive procedures on the use of hex bolts in your projects 27 | - Strength ratings, threading information, and torque recommendations -------------------------------------------------------------------------------- /src/components/ui/buttons/LoginBtn.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const { title = "Log in" } = Astro.props; 3 | 4 | interface Props { 5 | title?: string; 6 | } 7 | 8 | const baseClasses = 9 | "flex items-center gap-x-2 text-base md:text-sm font-medium text-neutral-600 ring-zinc-500 transition duration-300 focus-visible:ring-3 outline-hidden"; 10 | const hoverClasses = "hover:text-orange-400 dark:hover:text-orange-300"; 11 | const darkClasses = 12 | "dark:border-neutral-700 dark:text-neutral-400 dark:ring-zinc-200 dark:focus:outline-hidden"; 13 | const mdClasses = "md:my-6 md:border-s md:border-neutral-300 md:ps-6"; 14 | const txtSizeClasses = "2xl:text-base"; 15 | const userSVG = ` 26 | 27 | 28 | `; 29 | --- 30 | 31 | 41 | -------------------------------------------------------------------------------- /src/components/ui/blocks/MainSection.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import PrimaryCTA component 3 | import PrimaryCTA from "@components/ui/buttons/PrimaryCTA.astro"; 4 | 5 | // Destructure the props passed to the Astro component 6 | const { title, subTitle, btnExists, btnTitle, btnURL } = Astro.props; 7 | // Define TypeScript interface for props 8 | interface Props { 9 | title: string; 10 | subTitle: string; 11 | btnExists?: boolean; 12 | btnTitle?: string; 13 | btnURL?: string; 14 | } 15 | --- 16 | 17 | 18 |
    21 |
    22 | 23 |

    26 | {title} 27 |

    28 | 29 |

    32 | {subTitle} 33 |

    34 | 35 | { 36 | btnExists ? ( 37 |
    38 | 39 |
    40 | ) : null 41 | } 42 |
    43 |
    44 | -------------------------------------------------------------------------------- /vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "headers": [ 3 | { 4 | "source": "/(.*)", 5 | "headers": [ 6 | { 7 | "key": "Content-Security-Policy", 8 | "value": "default-src 'self'; base-uri 'self'; form-action 'self'; frame-src 'self'; frame-ancestors 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https://images.unsplash.com; connect-src 'self'; object-src 'none'; upgrade-insecure-requests; block-all-mixed-content" 9 | }, 10 | { 11 | "key": "Permissions-Policy", 12 | "value": "interest-cohort=()" 13 | }, 14 | { 15 | "key": "Referrer-Policy", 16 | "value": "no-referrer-when-downgrade" 17 | }, 18 | { 19 | "key": "X-Content-Type-Options", 20 | "value": "nosniff" 21 | }, 22 | { 23 | "key": "X-Frame-Options", 24 | "value": "SAMEORIGIN" 25 | }, 26 | { 27 | "key": "X-XSS-Protection", 28 | "value": "1; mode=block" 29 | }, 30 | { 31 | "key": "Cache-Control", 32 | "value": "public, max-age=0, must-revalidate" 33 | }, 34 | { 35 | "key": "Strict-Transport-Security", 36 | "value": "max-age=31536000; includeSubDomains; preload" 37 | } 38 | ] 39 | } 40 | ] 41 | } -------------------------------------------------------------------------------- /src/content/docs/zh-cn/guides/first-project-checklist.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 第一个项目清单 3 | description: 探索 ScrewFast 的全面文档,深入了解我们的优质工具和建筑服务。 4 | sidebar: 5 | label: First Project Checklist 6 | order: 3 7 | --- 8 | 9 | import { 10 | Card, 11 | CardGrid, 12 | LinkCard, 13 | Steps, 14 | Aside, 15 | Tabs, 16 | TabItem, 17 | } from "@astrojs/starlight/components"; 18 | 19 | 开始新项目既令人兴奋又具有挑战性。通过正确的准备和指导,您的冒险将更有成功的可能性。ScrewFast 第一个项目清单旨在提供清晰和结构化的方法,以确保您在每一步都做好了充分的准备。 20 | 21 | ## 项目准备 22 | 23 | 24 | 25 | - 确保项目的范围、交付内容和期望结果清晰明确 26 | - 为项目完成明确定义清晰的目标和成功标准 27 | 28 | 29 | - 列出所有需要的 ScrewFast 工具和设备 30 | - 在开始之前确认库存的可用性和状态 31 | 32 | 33 | - 如果需要额外的专业知识或人力,请提前安排 ScrewFast 建筑服务 34 | - 与您的 ScrewFast 代表明确服务级别协议和时间表 35 | 36 | 37 | 38 | ## 项目执行 39 | ### 初始阶段 40 | 41 | 1. 根据 ScrewFast 设置指南设置项目现场 42 | 43 | 2. 召开初始团队会议,就项目目标和 ScrewFast 方法达成一致 44 | 45 | 3. 建立项目检查点和里程碑,定期进行评估 46 | 47 | 48 | 49 | ## 额外资源 50 | 51 | 56 | 61 | 66 | 67 | -------------------------------------------------------------------------------- /src/pages/fr/contact.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import the necessary components 3 | import MainLayout from "@/layouts/MainLayout.astro"; 4 | import ContactSection from "@components/sections/fr/ContactSection_fr.astro"; 5 | import { SITE } from "@data/constants"; 6 | 7 | const pageTitle: string = `Nous Contacter | ${SITE.title}`; 8 | const metaDescription = 9 | "Vous avez des questions ou souhaitez discuter d'un projet ? Contactez-nous et élaborons ensemble la solution parfaite avec nos outils et services."; 10 | const ogTitle = "Nous Contacter | ScrewFast"; 11 | --- 12 | 13 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /src/content/docs/zh-cn/welcome-to-docs.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ScrewFast docs 3 | head: 4 | - tag: title 5 | content: ScrewFast docs 6 | description: Explore ScrewFast's comprehensive documentation for an in-depth look at our premium tools and construction services. 7 | template: splash 8 | editUrl: false 9 | lastUpdated: false 10 | next: false 11 | hero: 12 | title: 文档中心 13 | tagline: 您的集中式工具指南、详细服务文档和项目支持中心。 14 | image: 15 | alt: A ScrewFast's Logo 16 | dark: ../../../images/starlight/screwfast_hero.svg 17 | light: ../../../images/starlight/screwfast_hero_dark.svg 18 | actions: 19 | - text: Get started 20 | icon: right-arrow 21 | variant: primary 22 | link: /zh-cn/guides/getting-started/ 23 | - text: View on GitHub 24 | icon: external 25 | variant: minimal 26 | link: https://github.com/mearashadowfax/ScrewFast 27 | --- 28 | import "@styles/starlight_main.css"; 29 | import { Card, CardGrid } from '@astrojs/starlight/components'; 30 | 31 | 32 | 33 | 通过我们简明扼要的指南,快速掌握使用技巧,适用于新手和老手用户。 34 | 35 | 36 | 37 | 探索 ScrewFast 的全面工具和设备系列。每个子部分提供详细的规格、使用说明和维护技巧。 38 | 39 | 40 | 41 | 探索 ScrewFast 的全面工具和设备系列。每个子部分提供详细的规格、使用说明和维护技巧。 42 | 43 | 44 | 45 | 探索 ScrewFast 的全面工具和设备系列。每个子部分提供详细的规格、使用说明和维护技巧。 46 | 47 | 48 | -------------------------------------------------------------------------------- /src/components/ui/cards/CardRelated.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import necessary modules and utilities 3 | import { Image } from "astro:assets"; 4 | import { formatDate } from "@utils/utils"; 5 | import type { CollectionEntry } from "astro:content"; 6 | 7 | const { blogEntry, recentBlogLocale = "" } = Astro.props; 8 | 9 | interface Props { 10 | blogEntry: CollectionEntry<"blog">; 11 | recentBlogLocale?: string; 12 | } 13 | --- 14 | 15 | 22 |
    23 | {blogEntry.data.cardImageAlt} 30 | 31 |

    34 | {blogEntry.data.title} 35 |

    36 | 37 |

    38 | {formatDate(blogEntry.data.pubDate)} 39 |

    40 |
    42 | -------------------------------------------------------------------------------- /src/pages/manifest.json.ts: -------------------------------------------------------------------------------- 1 | import type { APIRoute, ImageMetadata } from "astro"; 2 | import { getImage } from "astro:assets"; 3 | import icon from "@images/icon.png"; 4 | import maskableIcon from "@images/icon-maskable.png"; 5 | 6 | interface Favicon { 7 | purpose: 'any' | 'maskable' | 'monochrome'; 8 | src: ImageMetadata; 9 | sizes: number[]; 10 | } 11 | 12 | const sizes = [192, 512]; 13 | const favicons: Favicon[] = [ 14 | { 15 | purpose: 'any', 16 | src: icon, 17 | sizes, 18 | }, 19 | { 20 | purpose: 'maskable', 21 | src: maskableIcon, 22 | sizes, 23 | }, 24 | ]; 25 | 26 | export const GET: APIRoute = async () => { 27 | const icons = await Promise.all( 28 | favicons.flatMap((favicon) => 29 | favicon.sizes.map(async (size) => { 30 | const image = await getImage({ 31 | src: favicon.src, 32 | width: size, 33 | height: size, 34 | format: "png", 35 | }); 36 | return { 37 | src: image.src, 38 | sizes: `${image.options.width}x${image.options.height}`, 39 | type: `image/${image.options.format}`, 40 | purpose: favicon.purpose, 41 | }; 42 | }), 43 | ), 44 | ); 45 | 46 | const manifest = { 47 | short_name: "ScrewFast", 48 | name: "ScrewFast", 49 | icons, 50 | display: "minimal-ui", 51 | id: "/", 52 | start_url: "/", 53 | theme_color: "#FFEDD5", 54 | background_color: "#262626", 55 | }; 56 | 57 | return new Response(JSON.stringify(manifest)); 58 | }; 59 | -------------------------------------------------------------------------------- /src/content/blog/en/post-3.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Simplify Procurement and Stay Within Budget with ScrewFast" 3 | description: "Affordable, durable tools for efficient construction projects" 4 | author: "Olga Zabegina" 5 | role: "Strategic Marketing Manager" 6 | authorImage: "@/images/blog/anna.avif" 7 | authorImageAlt: "Avatar Description" 8 | pubDate: 2024-02-18 9 | cardImage: "@/images/blog/post-3.avif" 10 | cardImageAlt: "Side view worker wearing gloves" 11 | readTime: 3 12 | tags: ["procurement", "affordable", "efficiency" ] 13 | contents: [ 14 | "Managing a construction project can be overwhelming, especially when it comes to procurement. That's why ScrewFast is committed to simplifying the process and keeping your projects within budget.", 15 | "With our line of affordable tools and equipment, you can find everything you need without breaking the bank. Our user-centric design ensures that our products are easy to use, saving you time and frustration on the job site.", 16 | "But affordability doesn't mean sacrificing quality. ScrewFast products are built to last, providing reliable performance and durability when you need it most. And with our comprehensive documentation and tutorials, you can integrate our products seamlessly into your workflow, maximizing efficiency and productivity.", 17 | "Whether you're a DIY enthusiast or a seasoned contractor, ScrewFast has the solutions you need to succeed. Experience the difference for yourself and see why ScrewFast is the trusted choice for hardware and construction needs." 18 | ] 19 | --- 20 | -------------------------------------------------------------------------------- /src/components/ui/forms/input/EmailFooterInput.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const { 3 | label = "Search", 4 | title = Astro.currentLocale === "fr" ? "S'abonner" : "Subscribe", 5 | id = "footer-input", 6 | } = Astro.props; 7 | 8 | interface Props { 9 | label?: string; 10 | title?: string; 11 | id?: string; 12 | } 13 | 14 | const placeholder = Astro.currentLocale === "fr" ? "Entrez votre email" : "Enter your email"; 15 | --- 16 | 17 |
    20 |
    21 | 22 | 29 |
    30 | 34 | {title} 35 | 36 |
    37 | -------------------------------------------------------------------------------- /src/components/ui/links/NavLink.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Destructure the properties from Astro.props 3 | const { url, name } = Astro.props; 4 | 5 | // Define TypeScript interface for the properties 6 | interface Props { 7 | url: string; 8 | name: string; 9 | } 10 | --- 11 | 12 | 18 | 24 | {name} 25 | 26 | 27 | 52 | -------------------------------------------------------------------------------- /src/content/docs/ja/welcome-to-docs.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ScrewFast docs 3 | head: 4 | - tag: title 5 | content: ScrewFast docs 6 | description: Explore ScrewFast's comprehensive documentation for an in-depth look at our premium tools and construction services. 7 | template: splash 8 | editUrl: false 9 | lastUpdated: false 10 | next: false 11 | hero: 12 | title: ドキュメンテーションハブ 13 | tagline: 効率的なツールのガイド、詳細なサービス文書、およびプロジェクトのサポートのための中心的なハブ。 14 | image: 15 | alt: A ScrewFast's Logo 16 | dark: ../../../images/starlight/screwfast_hero.svg 17 | light: ../../../images/starlight/screwfast_hero_dark.svg 18 | actions: 19 | - text: Get started 20 | icon: right-arrow 21 | variant: primary 22 | link: /ja/guides/getting-started/ 23 | - text: View on GitHub 24 | icon: external 25 | variant: minimal 26 | link: https://github.com/mearashadowfax/ScrewFast 27 | --- 28 | import "@styles/starlight_main.css"; 29 | import { Card, CardGrid } from '@astrojs/starlight/components'; 30 | 31 | 32 | 33 | 34 | 当社のわかりやすく簡潔なガイドで迅速に立ち上がり、新規ユーザーと熟練した専門家の両方に適したものを利用してください。 35 | 36 | 37 | 38 | ScrewFastの優れた品質の完全なツールと装備を発見してください。各サブセクションには詳細な仕様、使用方法の説明、およびメンテナンスのヒントが提供されています。 39 | 40 | 41 | 42 | ScrewFastの優れた品質の完全なツールと装備を発見してください。各サブセクションには詳細な仕様、使用方法の説明、およびメンテナンスのヒントが提供されています。 43 | 44 | 45 | 46 | ScrewFastの優れた品質の完全なツールと装備を発見してください。各サブセクションには詳細な仕様、使用方法の説明、およびメンテナンスのヒントが提供されています。 47 | 48 | 49 | -------------------------------------------------------------------------------- /src/content/docs/ja/guides/first-project-checklist.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ファーストプロジェクトチェックリスト 3 | description: ScrewFastの包括的なドキュメントを探索して、プレミアムツールと建設サービスを詳しく見てください。 4 | sidebar: 5 | label: First Project Checklist 6 | order: 3 7 | --- 8 | import { 9 | Card, 10 | CardGrid, 11 | LinkCard, 12 | Steps, 13 | Aside, 14 | Tabs, 15 | TabItem, 16 | } from "@astrojs/starlight/components"; 17 | 18 | 新しいプロジェクトに着手することは、興奮と挑戦の両方が同じ程度であり得ます。適切な準備とガイダンスがあれば、貴社の事業は成功する準備が整っています。ScrewFastのファーストプロジェクトチェックリストは、段階を踏んだ明確で構造化されたアプローチを提供するよう設計されています。 19 | 20 | ## プロジェクト準備 21 | 22 | 23 | 24 | - プロジェクトのスコープ、成果物、および希望される成果の明確さを確保する 25 | - プロジェクト完了のための明確な目標と成功基準を定義する 26 | 27 | 28 | - 必要なすべてのScrewFastツールと機器のリストを作成する 29 | - 開始前に在庫の可用性と状態を確認する 30 | 31 | 32 | - 追加の専門知識や労働力が必要な場合は、事前にScrewFast建設サービスを手配する 33 | - あなたのScrewFast代表者とのサービスレベル契約とタイムラインを明確にする 34 | 35 | 36 | 37 | ## プロジェクトの実行 38 | ### 初期フェーズ 39 | 40 | 1. ScrewFastの設定ガイドラインに従ってプロジェクトサイトを設定する 41 | 42 | 2. プロジェクトの目標とScrewFastの方法論を合わせるための初期チームミーティングを実施する 43 | 44 | 3. 定期的な評価のためのプロジェクトのチェックポイントとマイルストーンを設定する 45 | 46 | 47 | 48 | ## その他のリソース 49 | 50 | 55 | 60 | 65 | 66 | -------------------------------------------------------------------------------- /src/components/ui/blocks/LeftSection.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import the necessary modules 3 | import { Image } from "astro:assets"; 4 | import PrimaryCTA from "@components/ui/buttons/PrimaryCTA.astro"; 5 | // Destructure the props passed to the Astro component 6 | const { title, subTitle, btnExists, btnTitle, btnURL, img, imgAlt } = 7 | Astro.props; 8 | // Define TypeScript interface for props 9 | interface Props { 10 | title: string; 11 | subTitle: string; 12 | btnExists?: boolean; 13 | btnTitle?: string; 14 | btnURL?: string; 15 | img: any; 16 | imgAlt: any; 17 | } 18 | --- 19 | 20 | 21 |
    24 | 25 | {imgAlt} 32 | 33 |
    34 | 35 |

    38 | {title} 39 |

    40 | 41 |

    44 | {subTitle} 45 |

    46 | 47 | {btnExists ? : null} 48 |
    49 |
    50 | -------------------------------------------------------------------------------- /src/content/blog/fr/post-3.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Simplifiez l'Approvisionnement et Restez dans les Limites du Budget avec ScrewFast" 3 | description: "Outils abordables et durables pour des projets de construction efficaces" 4 | author: "Olga Zabegina" 5 | role: "Directrice Marketing Stratégique" 6 | authorImage: "@/images/blog/anna.avif" 7 | authorImageAlt: "Avatar Description" 8 | pubDate: 2024-02-18 9 | cardImage: "@/images/blog/post-3.avif" 10 | cardImageAlt: "Side view worker wearing gloves" 11 | readTime: 3 12 | tags: ["approvisionnement", "abordable", "efficacité"] 13 | contents: [ 14 | "Gérer un projet de construction peut être écrasant, surtout en ce qui concerne l'approvisionnement. C'est pourquoi ScrewFast s'engage à simplifier le processus et à maintenir vos projets dans les limites du budget.", 15 | "Avec notre gamme d'outils et d'équipements abordables, vous pouvez trouver tout ce dont vous avez besoin sans vous ruiner. Notre design centré sur l'utilisateur garantit que nos produits sont faciles à utiliser, vous faisant gagner du temps et de la frustration sur le chantier.", 16 | "Mais abordable ne signifie pas sacrifier la qualité. Les produits ScrewFast sont conçus pour durer, offrant des performances fiables et une durabilité lorsque vous en avez le plus besoin. Et avec notre documentation complète et nos tutoriels, vous pouvez intégrer nos produits de manière transparente dans votre flux de travail, maximisant ainsi l'efficacité et la productivité.", 17 | "Que vous soyez un passionné du bricolage ou un entrepreneur expérimenté, ScrewFast a les solutions dont vous avez besoin pour réussir. Découvrez la différence par vous-même et voyez pourquoi ScrewFast est le choix de confiance pour les besoins en matériel et en construction." 18 | ] 19 | --- 20 | -------------------------------------------------------------------------------- /src/content/docs/construction/service-overview.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Comprehensive Service Overview 3 | description: Explore ScrewFast's comprehensive documentation for an in-depth look at our premium tools and construction services. 4 | sidebar: 5 | label: Service Overview 6 | order: 1 7 | --- 8 | 9 | import { 10 | Card, 11 | CardGrid, 12 | LinkCard, 13 | Aside 14 | } from "@astrojs/starlight/components"; 15 | 16 | Welcome to ScrewFast Construction Services – your trusted partner in bringing complex construction visions to life. Our dedicated team is equipped with state-of-the-art tools and extensive industry knowledge to ensure your projects are completed with precision and efficiency. 17 | 18 | At ScrewFast, we specialize in providing a range of services tailored to meet your unique construction needs. From the initial concept to the final touches, our services encompass: 19 | 20 | 21 | 22 | 23 | A thorough assessment to understand your project requirements, site conditions, and to provide a clear roadmap for your project. 24 | 25 | 26 | 27 | Leveraging innovative software and expertise to craft bespoke solutions that bring your structural vision to life with accuracy and innovation. 28 | 29 | 30 | 31 | Dedicated on-site leadership to ensure that your project runs smoothly, on time, and within budget. 32 | 33 | 34 | 35 | Employing the latest tools and technologies along with skilled craftsmanship to execute your project to the highest standard. 36 | 37 | -------------------------------------------------------------------------------- /src/content/docs/fa/guides/intro.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: معرفی به خدمات اسکروفست 3 | description: مستندات جامع اسکروفست را برای بررسی دقیق‌تر ابزارها و خدمات ساخت و ساز بررسی کنید. 4 | sidebar: 5 | label: Introduction to Services 6 | order: 2 7 | --- 8 | 9 | import { 10 | Tabs, 11 | TabItem, 12 | } from "@astrojs/starlight/components"; 13 | 14 | به عنوان بخشی از تعهد ما به ارائه یک راه‌حل از ابتدا تا انتها برای همه نیازهای ساخت و ساز و سخت‌افزار شما، ما در اسکروفست به افتخار یک سری خدمات حرفه‌ای جامع ارائه می‌دهیم. از مشاوره‌های ابتدایی تا بازرسی‌های نهایی، خدمات چند‌گانه ما شامل کلیه جنبه‌های پروژه شما را در بر می‌گیرد و اطمینان از نتایج با کیفیت و رضایت مشتری را فراهم می‌کند. این بخش از مستندات شما را از همه چیزی که باید بدانید برای بهره‌گیری از تخصص ما به حداکثر برساند. 15 | 16 | ## مروری بر خدمات 17 | 18 | 19 | 20 | هر پروژه ساخت و ساز چالش‌ها و اقتضاهای منحصربه‌فرد خود را دارد. در اسکروفست، ما خدمات خود را به منظور تطبیق با نیازهای خاص شما سفارشی‌سازی می‌کنیم، تضمین می‌کنیم که مهمانه مقیاس یا پیچیدگی پروژه شما با دقت و حرفه‌ایترین نیروهای ما مدیریت شود. 21 | 22 | 23 | از مهارت‌های کارکنان ما با تجربه استفاده کنید، از معماران و مهندسان تا کارگران ماهر، هر کدام به تجربه خود به منظور برگرداندن دیدگاه شما به واقعیت کمک می‌کنند. 24 | 25 | 26 | کیفیت در مرکز تمام اعمال ما قرار دارد. ما اقدامات سختگیرانه کنترل کیفیت را برای اطمینان از اینکه کاری که ارائه می‌دهیم با استانداردهای صنعتی مطابقت دارد و آن را بیشتر می‌کند. 27 | 28 | 29 | رابطه ما با مشتریان ما پس از اتمام پروژه به پایان نمی‌رسد. ما پشتیبانی مداوم را برای حل هرگونه مشکل و اطمینان از رضایت دائمی از سرمایه‌اینستمان فراهم می‌کنیم. 30 | 31 | -------------------------------------------------------------------------------- /src/content/docs/tools/equipment-care.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Equipment Care & Maintenance 3 | description: Explore ScrewFast's comprehensive documentation for an in-depth look at our premium tools and construction services. 4 | sidebar: 5 | label: Equipment Care 6 | order: 2 7 | --- 8 | 9 | import { 10 | Card, 11 | CardGrid, 12 | LinkCard, 13 | Aside 14 | } from "@astrojs/starlight/components"; 15 | 16 | 17 | 21 | 25 | 26 | 27 | 28 | 29 | 30 | - Strategies for extending the life of your tools and equipment through proper use and handling 31 | - A preventative maintenance schedule that will help avoid common wear and tear 32 | 33 | 34 | 35 | - Solutions for frequently encountered issues with ScrewFast equipment 36 | - Advice on when to seek professional repair services versus performing DIY fixes 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /src/data_files/mega_link.ts: -------------------------------------------------------------------------------- 1 | // Define data structures for services and success stories 2 | export const servicesData = [ 3 | { 4 | title: "Explore Advice and Explanations", 5 | description: 6 | "Dive deep into helpful guides and explanations for all of ScrewFast's features", 7 | icon: "guides", 8 | url: "#", 9 | }, 10 | { 11 | title: "Discover Integrations", 12 | description: 13 | "Supercharge Your Workflow. Seamless integrations with all your favorite tools", 14 | icon: "puzzle", 15 | url: "#", 16 | }, 17 | { 18 | title: "Expert Services", 19 | description: "Go beyond tools with ScrewFast's expert services", 20 | icon: "rocket", 21 | url: "#", 22 | }, 23 | { 24 | title: "Cutting-Edge Tools", 25 | description: 26 | "Build Smarter, Faster. Experience next-level efficiency with ScrewFast's cutting-edge construction tools", 27 | icon: "hammer", 28 | url: "#", 29 | }, 30 | { 31 | title: "Simple Plans", 32 | description: 33 | "Boost your efficiency with ScrewFast's straightforward, value-driven plans", 34 | icon: "sparks", 35 | url: "#", 36 | }, 37 | { 38 | title: "Community Forum", 39 | description: "Learn, share, and connect with other ScrewFast users", 40 | icon: "community", 41 | url: "#", 42 | }, 43 | ]; 44 | 45 | export const successStoriesData = [ 46 | { 47 | image: 48 | "https://images.unsplash.com/photo-1544005313-94ddf0286df2?q=80&w=1376&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D8&auto=format&fit=facearea&facepad=2&w=320&h=320&q=80", 49 | alt: "Image Description", 50 | description: 51 | "See how ScrewFast has empowered businesses of all sizes to achieve outstanding results.", 52 | learnMoreUrl: "#", 53 | }, 54 | ]; 55 | -------------------------------------------------------------------------------- /src/content/docs/zh-cn/guides/getting-started.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 入门指南 3 | description: 探索 ScrewFast 的全面文档,深入了解我们的优质工具和建筑服务。 4 | sidebar: 5 | label: Getting Started 6 | order: 1 7 | --- 8 | 9 | import { 10 | Card, 11 | CardGrid, 12 | LinkCard, 13 | Steps, 14 | Aside, 15 | Tabs, 16 | TabItem, 17 | } from "@astrojs/starlight/components"; 18 | 19 | 欢迎来到 ScrewFast 文档!我们很高兴能帮助您开始使用我们的优质工具。本指南旨在介绍我们的工具范围,帮助您了解基础知识,并为您的第一个项目做好准备。让我们立即进入高质量、可靠的工艺世界,与 ScrewFast 一起。 20 | 21 | ## 工具概述 22 | 23 | 24 | 25 | 多功能且符合人体工程学设计,适用于各种螺丝类型。 26 | 27 | 28 | 29 | 强大的钻孔和冲击驱动性能。 30 | 31 | 32 | 33 | 可调节设置,精准切割各种材料。 34 | 35 | 36 | 37 | 38 | ## 设置说明 39 | 40 | 41 | 42 | 1. 解包图标 打开 ScrewFast 工具包 43 | 小心打开包装,并确认所有零件齐全。熟悉工具及任何附件。 44 | 45 | 2. 安全检查图标 初始设置和安全检查 46 | 在处理工具之前阅读安全手册。检查工具是否有运输损坏,并确保安全保护装置已安装到位。 47 | 48 | 3. 校准图标 校准和准备首次使用 49 | 按照制造商的说明校准您的工具。确保电池已充电或电气连接安全可靠。 50 | 51 | 52 | 53 | 54 | ## 清洁和维护 55 | 56 | 59 | 60 | 定期维护可确保工具的长期使用和安全性。每次使用后清洁工具,检查磨损,并按照工具手册中规定的方式润滑移动部件。 61 | 62 | ## 额外资源 63 | 64 | 69 | 70 | 75 | 76 | 81 | -------------------------------------------------------------------------------- /src/content/docs/fa/welcome-to-docs.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ScrewFast docs 3 | head: 4 | - tag: title 5 | content: ScrewFast docs 6 | description: Explore ScrewFast's comprehensive documentation for an in-depth look at our premium tools and construction services. 7 | template: splash 8 | editUrl: false 9 | lastUpdated: false 10 | next: false 11 | hero: 12 | title: مرکز اسناد 13 | tagline: مرکز مرکزی شما برای راهنمایی ساده‌سازی شده ابزار، اسناد خدمات تفصیلی و پشتیبانی پروژه. 14 | image: 15 | alt: A ScrewFast's Logo 16 | dark: ../../../images/starlight/screwfast_hero.svg 17 | light: ../../../images/starlight/screwfast_hero_dark.svg 18 | actions: 19 | - text: Get started 20 | icon: right-arrow 21 | variant: primary 22 | link: /fa/guides/getting-started/ 23 | - text: View on GitHub 24 | icon: external 25 | variant: minimal 26 | link: https://github.com/mearashadowfax/ScrewFast 27 | --- 28 | import "@styles/starlight_main.css"; 29 | import { Card, CardGrid } from '@astrojs/starlight/components'; 30 | 31 | 32 | 33 | با راهنماهای مستقیم و مختصر ما، برای کاربران جدید و کارشناسان تجربه‌یافته، به سرعت به راه بیافتید. 34 | 35 | 36 | تمامی ابزارها و تجهیزات با کیفیت برتر شرکت ScrewFast را کشف کنید. هر بخش شامل مشخصات دقیق، راهنمای استفاده و نکات نگهداری است. 37 | 38 | 39 | تمامی ابزارها و تجهیزات با کیفیت برتر شرکت ScrewFast را کشف کنید. هر بخش شامل مشخصات دقیق، راهنمای استفاده و نکات نگهداری است. 40 | 41 | 42 | تمامی ابزارها و تجهیزات با کیفیت برتر شرکت ScrewFast را کشف کنید. هر بخش شامل مشخصات دقیق، راهنمای استفاده و نکات نگهداری است. 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/content/blog/en/post-1.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Maximizing Efficiency with ScrewFast's Cutting-Edge Tools" 3 | description: "Innovating Construction Efficiency with Precision Tools & Support" 4 | author: "Jacob" 5 | authorImage: "@/images/blog/jacob.avif" 6 | authorImageAlt: "Avatar Description" 7 | pubDate: 2024-02-06 8 | cardImage: "@/images/blog/post-1.avif" 9 | cardImageAlt: "Top view mechanical tools arrangement" 10 | readTime: 4 11 | tags: ["tools", "construction", "workflow" ] 12 | contents: [ 13 | "In today's fast-paced construction industry, efficiency is key to success. At ScrewFast, we understand the importance of optimizing your project workflow to meet deadlines and stay within budget. That's why we're thrilled to introduce our cutting-edge tools designed to empower your projects like never before.", 14 | "Our range of hardware tools combines precision engineering with user-centric design, ensuring maximum productivity on every job site. From power drills to advanced fastening solutions, ScrewFast's tools are built to withstand the rigors of construction while streamlining your workflow.", 15 | "One of our standout offerings is our intuitive dashboards, which provide real-time insights into project progress, resource allocation, and more. With user-friendly interfaces, navigating and overseeing your projects has never been easier.", 16 | "But efficiency isn't just about the tools you use—it's also about the support you receive. That's why ScrewFast offers comprehensive documentation and expert guidance every step of the way. Our dedicated teams are committed to your success, providing personalized assistance to ensure you get the most out of our products.", 17 | "Join the countless industry leaders who have already experienced the difference ScrewFast tools can make. With our cutting-edge solutions, you can fast-track your projects to success and stay ahead of the competition." 18 | ] 19 | --- 20 | -------------------------------------------------------------------------------- /src/components/ui/cards/CardSmall.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import necessary modules and utilities 3 | import { Image } from "astro:assets"; 4 | import Icon from "@components/ui/icons/Icon.astro"; 5 | import type { CollectionEntry } from "astro:content"; 6 | 7 | const { product, productLocale = "" } = Astro.props; 8 | 9 | interface Props { 10 | product: CollectionEntry<"products">; 11 | productLocale?: string; 12 | } 13 | 14 | // Define classes to be used with the Image component 15 | const imageClass = 16 | "absolute inset-0 h-full w-full object-cover object-center transition duration-[600ms] ease-[cubic-bezier(0.45,0,0.55,1)] group-hover:scale-110"; 17 | --- 18 | 19 | 20 | 27 | 28 | {product.data.main.imgAlt} 35 | 36 |
    39 |
    40 | 41 | {product.data.description} 44 | 45 |
    46 | -------------------------------------------------------------------------------- /src/components/ui/forms/input/EmailInput.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const { label = Astro.currentLocale === "fr" ? "Adresse e-mail" : "Email address", id, errorId } = Astro.props; 3 | 4 | interface Props { 5 | label?: string; 6 | id: string; 7 | errorId: string; 8 | } 9 | --- 10 | 11 | 12 |
    13 | 14 | 19 | 20 |
    21 | 22 | 31 | 32 | 46 |
    47 | 48 | 51 |
    52 | -------------------------------------------------------------------------------- /src/content/docs/guides/intro.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Introduction to ScrewFast Services 3 | description: Explore ScrewFast's comprehensive documentation for an in-depth look at our premium tools and construction services. 4 | sidebar: 5 | label: Introduction to Services 6 | order: 2 7 | --- 8 | 9 | import { 10 | Tabs, 11 | TabItem, 12 | } from "@astrojs/starlight/components"; 13 | 14 | As part of our commitment to providing an end-to-end solution for all your construction and hardware needs, we at ScrewFast are proud to offer a comprehensive suite of professional services. From initial consultations to final inspections, our multifaceted services encompass the entirety of your project, ensuring quality results and client satisfaction. This section of the documentation will guide you through everything you need to know to leverage our expertise to its fullest potential. 15 | 16 | ## Overview of Services 17 | 18 | 19 | 20 | Each construction project carries its unique challenges and demands. At ScrewFast, we customize our services to match your specific needs, ensuring that no matter the scale or complexity of your project, our team is equipped to handle it with precision and professionalism. 21 | 22 | 23 | Leverage the skills of our knowledgeable staff, from architects and engineers to skilled laborers, each contributing their expertise to bring your vision to life. 24 | 25 | 26 | Quality is at the heart of everything we do. We employ stringent quality control measures to assure that the work we deliver meets and exceeds industry standards. 27 | 28 | 29 | Our relationship with our clients doesn't end once the project is completed. We provide continuous support to address any issues and ensure lasting satisfaction with your investment. 30 | 31 | -------------------------------------------------------------------------------- /src/components/ui/cards/CardWide.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import necessary modules and utilities 3 | import { Image } from "astro:assets"; 4 | import Icon from "@components/ui/icons/Icon.astro"; 5 | import type { CollectionEntry } from "astro:content"; 6 | 7 | const { product, productLocale = "" } = Astro.props; 8 | 9 | interface Props { 10 | product: CollectionEntry<"products">; 11 | productLocale?: string; 12 | } 13 | 14 | // Define classes to be used with the Image component 15 | const imageClass = 16 | "absolute inset-0 h-full w-full object-cover object-center transition duration-[600ms] ease-[cubic-bezier(0.45,0,0.55,1)] group-hover:scale-110"; 17 | --- 18 | 19 | 20 | 27 | 28 | {product.data.main.imgAlt} 35 | 36 |
    39 |
    40 | 41 | {product.data.description} 45 |
    46 | -------------------------------------------------------------------------------- /src/content/blog/en/post-2.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Enhancing Safety and Workmanship with ScrewFast Construction Services" 3 | description: "Quality construction services for lasting results" 4 | author: "Brad" 5 | authorImage: "@/images/blog/brad.avif" 6 | authorImageAlt: "Avatar Description" 7 | pubDate: 2024-02-10 8 | cardImage: "@/images/blog/post-2.avif" 9 | cardImageAlt: "Man in black sweatpants using DEWALT circular saw and cutting a wood plank" 10 | readTime: 5 11 | tags: ["safety", "craftsmanship", "management" ] 12 | contents: [ 13 | "When it comes to construction, safety and quality workmanship are non-negotiable. At ScrewFast, we're proud to offer a range of construction services that prioritize both, ensuring your projects are built to last.", 14 | "Our team of skilled craftsmen brings precision and expertise to every job, from minor installations to large-scale structural work. With top-quality tools and materials from our extensive inventory, we guarantee the highest standards of safety and craftsmanship on every project.", 15 | "But our commitment to excellence doesn't end there. We also provide thorough project management services to keep your build on track and within budget. From workflow coordination to stakeholder communication, ScrewFast handles the complexities so you can focus on your vision.", 16 | "What sets ScrewFast apart is our dedication to ongoing support. We don't just finish the job and walk away—we're here for the long haul. Our maintenance services ensure that your construction remains in optimal condition, providing peace of mind for years to come.", 17 | "For larger enterprise clients, we offer custom solutions tailored to your unique challenges. By understanding your specific needs, we engineer strategies aimed at maximizing efficiency and driving your business forward.", 18 | "With ScrewFast construction services, you can trust that your projects are in good hands. Experience the difference today and see why so many clients choose ScrewFast for their construction needs." 19 | ] 20 | --- 21 | -------------------------------------------------------------------------------- /src/content/docs/welcome-to-docs.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ScrewFast Docs 3 | head: 4 | - tag: title 5 | content: ScrewFast Docs 6 | description: Explore ScrewFast's comprehensive documentation for an in-depth look at our premium tools and construction services. 7 | template: splash 8 | editUrl: false 9 | lastUpdated: false 10 | next: false 11 | hero: 12 | title: Documentation Hub 13 | tagline: Your central hub for streamlined tool guidance, detailed service docs, and project support. 14 | image: 15 | alt: A ScrewFast's Logo 16 | dark: ../../images/starlight/screwfast_hero.svg 17 | light: ../../images/starlight/screwfast_hero_dark.svg 18 | actions: 19 | - text: Get started 20 | icon: right-arrow 21 | variant: primary 22 | link: /guides/getting-started/ 23 | - text: View on GitHub 24 | icon: external 25 | variant: minimal 26 | link: https://github.com/mearashadowfax/ScrewFast 27 | --- 28 | import "@styles/starlight_main.css"; 29 | import { Card, CardGrid } from '@astrojs/starlight/components'; 30 | 31 | 32 | 33 | 34 | Get up and running swiftly with our straightforward and concise guides, tailored for new users and seasoned experts alike. 35 | 36 | 37 | 38 | Discover the complete lineup of ScrewFast's superior quality tools and equipment. Each subsection offers detailed specifications, usage instructions, and maintenance tips. 39 | 40 | 41 | 42 | Discover the complete lineup of ScrewFast's superior quality tools and equipment. Each subsection offers detailed specifications, usage instructions, and maintenance tips. 43 | 44 | 45 | 46 | Discover the complete lineup of ScrewFast's superior quality tools and equipment. Each subsection offers detailed specifications, usage instructions, and maintenance tips. 47 | 48 | 49 | -------------------------------------------------------------------------------- /src/content/docs/ja/guides/getting-started.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 入門 3 | description: ScrewFastの包括的なドキュメントを探索して、プレミアムツールと建設サービスを詳しく見てください。 4 | sidebar: 5 | label: Getting Started 6 | order: 1 7 | --- 8 | 9 | import { 10 | Card, 11 | CardGrid, 12 | LinkCard, 13 | Steps, 14 | Aside, 15 | Tabs, 16 | TabItem, 17 | } from "@astrojs/starlight/components"; 18 | 19 | ScrewFast Docsへようこそ!私たちは、プレミアムツールでのスタートをお手伝いできることを楽しみにしています。このガイドは、私たちのツールの範囲を紹介し、基本を理解し、最初のプロジェクトに備えるための設計されています。ScrewFastとともに、高品質で信頼性の高い技術の世界に飛び込みましょう。 20 | 21 | ## ツールの概要 22 | 23 | 24 | 25 | 多目的でエルゴノミックで、すべてのねじに適しています。 26 | 27 | 28 | 29 | ドリルとインパクトドライブのためのパワフルな性能。 30 | 31 | 32 | 33 | 各種材料に対応した可変設定での精密な切断。 34 | 35 | 36 | 37 | 38 | ## 設定手順 39 | 40 | 41 | 42 | 1. アンボックスアイコン ScrewFastのツールをアンボックスする 43 | 慎重にパッケージを開封し、すべてのコンポーネントが揃っていることを確認してください。ツールとアクセサリーに慣れてください。 44 | 45 | 2. セーフティチェックアイコン 初期設定と安全チェック 46 | ツールを取り扱う前に安全マニュアルを読みます。ツールに配送時の損傷がないか確認し、安全ガードが取り付けられていることを確認してください。 47 | 48 | 3. キャリブレーションアイコン キャリブレーションと初使用の準備 49 | 必要に応じて、製造元の指示に従ってツールのキャリブレーションを行います。バッテリーが充電されているか、電気接続が確実に接続されているか確認してください。 50 | 51 | 52 | 53 | 54 | ## 清掃とメンテナンス 55 | 56 | 59 | 60 | 定期的なメンテナンスは、寿命と安全性を確保します。各使用後にツールを清掃し、摩耗のチェックを行い、ツールのマニュアルで指定された通りに動く部品に潤滑油を塗布してください。 61 | 62 | ## その他のリソース 63 | 64 | 69 | 70 | 75 | 76 | 81 | -------------------------------------------------------------------------------- /src/components/ui/blocks/AccordionItem.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Icon from "@components/ui/icons/Icon.astro"; 3 | // Define props from Astro 4 | const { id, collapseId, question, answer, first } = Astro.props; 5 | // Define TypeScript interface for props 6 | interface Props { 7 | id: string; 8 | collapseId: string; 9 | question: string; 10 | answer: string; 11 | first?: boolean; 12 | } 13 | // Define class names for the accordion and its content 14 | const ACCORDION_CLASS_DEFAULT = "hs-accordion pb-3 active"; 15 | const ACCORDION_CLASS_COLLAPSED = "hs-accordion pt-6 pb-3"; 16 | const ACCORDION_CONTENT_CLASS = 17 | "hs-accordion-content w-full overflow-hidden transition-[height] duration-300"; 18 | // Helper function to return the correct class for the accordion 19 | function getAccordionClass(first: boolean = false) { 20 | return first ? ACCORDION_CLASS_DEFAULT : ACCORDION_CLASS_COLLAPSED; 21 | } 22 | --- 23 | 24 | 25 |
    26 | 27 | 38 | 39 |
    44 | 45 |

    46 | {answer} 47 |

    48 |
    49 |
    50 | -------------------------------------------------------------------------------- /src/content/docs/fr/guides/intro.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Introduction aux Services ScrewFast 3 | description: Explorez la documentation complète de ScrewFast pour un examen approfondi de nos outils haut de gamme et services de construction. 4 | sidebar: 5 | label: Introduction to Services 6 | order: 2 7 | --- 8 | 9 | import { 10 | Tabs, 11 | TabItem, 12 | } from "@astrojs/starlight/components"; 13 | 14 | Dans le cadre de notre engagement à fournir une solution de bout en bout pour tous vos besoins en construction et matériel, nous, chez ScrewFast, sommes fiers de proposer une suite complète de services professionnels. Des consultations initiales aux inspections finales, nos services polyvalents englobent l'intégralité de votre projet, garantissant des résultats de qualité et la satisfaction du client. Cette section de la documentation vous guidera à travers tout ce que vous devez savoir pour exploiter pleinement notre expertise. 15 | 16 | ## Aperçu des Services 17 | 18 | 19 | 20 | Chaque projet de construction comporte ses propres défis et exigences. Chez ScrewFast, nous personnalisons nos services pour correspondre à vos besoins spécifiques, garantissant que, quelle que soit l'échelle ou la complexité de votre projet, notre équipe est équipée pour le gérer avec précision et professionnalisme. 21 | 22 | 23 | Tire parti des compétences de notre personnel qualifié, des architectes et ingénieurs aux ouvriers qualifiés, chacun contribuant à apporter leur expertise pour donner vie à votre vision. 24 | 25 | 26 | La qualité est au cœur de tout ce que nous faisons. Nous mettons en œuvre des mesures rigoureuses de contrôle de qualité pour garantir que le travail que nous livrons répond et dépasse les normes de l'industrie. 27 | 28 | 29 | Notre relation avec nos clients ne se termine pas une fois le projet terminé. Nous fournissons un support continu pour résoudre tout problème et garantir une satisfaction durable avec votre investissement. 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/content/docs/es/guides/intro.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Introducción a los Servicios de ScrewFast 3 | description: Explora la documentación completa de ScrewFast para obtener una visión detallada de nuestras herramientas premium y servicios de construcción. 4 | sidebar: 5 | label: Introduction to Services 6 | order: 2 7 | --- 8 | 9 | import { 10 | Tabs, 11 | TabItem, 12 | } from "@astrojs/starlight/components"; 13 | 14 | Como parte de nuestro compromiso de proporcionar una solución integral para todas sus necesidades de construcción y hardware, en ScrewFast nos enorgullecemos de ofrecer una amplia gama de servicios profesionales. Desde consultas iniciales hasta inspecciones finales, nuestros servicios multifacéticos abarcan la totalidad de su proyecto, garantizando resultados de calidad y satisfacción del cliente. Esta sección de la documentación le guiará a través de todo lo que necesita saber para aprovechar al máximo nuestra experiencia. 15 | 16 | ## Visión general de los Servicios 17 | 18 | 19 | 20 | Cada proyecto de construcción conlleva sus desafíos y demandas únicas. En ScrewFast, personalizamos nuestros servicios para satisfacer sus necesidades específicas, asegurando que, independientemente de la escala o complejidad de su proyecto, nuestro equipo esté equipado para manejarlo con precisión y profesionalismo. 21 | 22 | 23 | Aproveche las habilidades de nuestro personal experimentado, desde arquitectos e ingenieros hasta obreros calificados, cada uno contribuyendo con su experiencia para dar vida a su visión. 24 | 25 | 26 | La calidad está en el corazón de todo lo que hacemos. Implementamos rigurosas medidas de control de calidad para asegurar que el trabajo que entregamos cumpla y supere los estándares de la industria. 27 | 28 | 29 | Nuestra relación con nuestros clientes no termina una vez que se completa el proyecto. Brindamos apoyo continuo para abordar cualquier problema y garantizar una satisfacción duradera con su inversión. 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/components/ui/forms/input/PasswordInput.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const { 3 | label = "Password", 4 | forgot, 5 | id, 6 | errorId, 7 | content 8 | } = Astro.props; 9 | 10 | interface Props { 11 | label?: string; 12 | forgot?: boolean; 13 | id?: string; 14 | errorId?: string; 15 | content?: string; 16 | } 17 | --- 18 | 19 |
    20 |
    21 | 26 | { 27 | forgot ? ( 28 | 34 | ) : ( 35 | "" 36 | ) 37 | } 38 |
    39 |
    40 | 48 | 62 |
    63 | 66 |
    67 | -------------------------------------------------------------------------------- /src/content/docs/es/welcome-to-docs.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ScrewFast docs 3 | head: 4 | - tag: title 5 | content: ScrewFast docs 6 | description: Explore ScrewFast's comprehensive documentation for an in-depth look at our premium tools and construction services. 7 | template: splash 8 | editUrl: false 9 | lastUpdated: false 10 | next: false 11 | hero: 12 | title: Centro de Documentación 13 | tagline: Tu centro central para orientación de herramientas simplificada, documentos de servicio detallados y apoyo al proyecto. 14 | image: 15 | alt: A ScrewFast's Logo 16 | dark: ../../../images/starlight/screwfast_hero.svg 17 | light: ../../../images/starlight/screwfast_hero_dark.svg 18 | actions: 19 | - text: Get started 20 | icon: right-arrow 21 | variant: primary 22 | link: /es/guides/getting-started/ 23 | - text: View on GitHub 24 | icon: external 25 | variant: minimal 26 | link: https://github.com/mearashadowfax/ScrewFast 27 | --- 28 | import "@styles/starlight_main.css"; 29 | import { Card, CardGrid } from '@astrojs/starlight/components'; 30 | 31 | 32 | 33 | 34 | Levántate y comienza rápidamente con nuestras guías directas y concisas, diseñadas para nuevos usuarios y expertos experimentados por igual. 35 | 36 | 37 | 38 | Descubre la línea completa de herramientas y equipos de calidad superior de ScrewFast. Cada subsección ofrece especificaciones detalladas, instrucciones de uso y consejos de mantenimiento. 39 | 40 | 41 | 42 | Descubre la línea completa de herramientas y equipos de calidad superior de ScrewFast. Cada subsección ofrece especificaciones detalladas, instrucciones de uso y consejos de mantenimiento. 43 | 44 | 45 | 46 | Descubre la línea completa de herramientas y equipos de calidad superior de ScrewFast. Cada subsección ofrece especificaciones detalladas, instrucciones de uso y consejos de mantenimiento. 47 | 48 | 49 | -------------------------------------------------------------------------------- /src/content/docs/de/welcome-to-docs.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ScrewFast docs 3 | head: 4 | - tag: title 5 | content: ScrewFast docs 6 | description: Explore ScrewFast's comprehensive documentation for an in-depth look at our premium tools and construction services. 7 | template: splash 8 | editUrl: false 9 | lastUpdated: false 10 | next: false 11 | hero: 12 | title: Dokumentationshub 13 | tagline: Ihr zentraler Anlaufpunkt für vereinfachte Werkzeuganleitungen, detaillierte Service-Dokumentationen und Projektunterstützung. 14 | image: 15 | alt: A ScrewFast's Logo 16 | dark: ../../../images/starlight/screwfast_hero.svg 17 | light: ../../../images/starlight/screwfast_hero_dark.svg 18 | actions: 19 | - text: Get started 20 | icon: right-arrow 21 | variant: primary 22 | link: /de/guides/getting-started/ 23 | - text: View on GitHub 24 | icon: external 25 | variant: minimal 26 | link: https://github.com/mearashadowfax/ScrewFast 27 | --- 28 | import "@styles/starlight_main.css"; 29 | import { Card, CardGrid } from '@astrojs/starlight/components'; 30 | 31 | 32 | 33 | 34 | Starten Sie schnell und einfach mit unseren klaren und prägnanten Anleitungen, die für neue Benutzer und erfahrene Experten gleichermaßen geeignet sind. 35 | 36 | 37 | 38 | Entdecken Sie die vollständige Palette hochwertiger Werkzeuge und Ausrüstungen von ScrewFast. Jeder Unterabschnitt bietet detaillierte Spezifikationen, Gebrauchsanweisungen und Wartungstipps. 39 | 40 | 41 | 42 | Entdecken Sie die vollständige Palette hochwertiger Werkzeuge und Ausrüstungen von ScrewFast. Jeder Unterabschnitt bietet detaillierte Spezifikationen, Gebrauchsanweisungen und Wartungstipps. 43 | 44 | 45 | 46 | Entdecken Sie die vollständige Palette hochwertiger Werkzeuge und Ausrüstungen von ScrewFast. Jeder Unterabschnitt bietet detaillierte Spezifikationen, Gebrauchsanweisungen und Wartungstipps. 47 | 48 | 49 | -------------------------------------------------------------------------------- /src/content/blog/fr/post-1.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Optimisation de l'efficacité avec les outils de pointe de ScrewFast" 3 | description: "Innovation de l'efficacité de la construction avec des outils de précision et un soutien." 4 | author: "Jacob" 5 | authorImage: "@/images/blog/jacob.avif" 6 | authorImageAlt: "Avatar Description" 7 | pubDate: 2024-02-06 8 | cardImage: "@/images/blog/post-1.avif" 9 | cardImageAlt: "Top view mechanical tools arrangement" 10 | readTime: 4 11 | tags: ["outils", "construction", "flux de travail"] 12 | contents: [ 13 | "Dans l'industrie de la construction d'aujourd'hui, où tout va vite, l'efficacité est la clé du succès. Chez ScrewFast, nous comprenons l'importance d'optimiser le flux de votre projet pour respecter les délais et rester dans les limites du budget. C'est pourquoi nous sommes ravis de vous présenter nos outils de pointe conçus pour donner à vos projets une puissance inégalée.", 14 | "Notre gamme d'outils matériels associe ingénierie de précision et design centré sur l'utilisateur, garantissant une productivité maximale sur chaque chantier. Des perceuses électriques aux solutions de fixation avancées, les outils de ScrewFast sont conçus pour résister aux rigueurs de la construction tout en rationalisant votre flux de travail.", 15 | "L'un de nos atouts majeurs est nos tableaux de bord intuitifs, qui fournissent des informations en temps réel sur l'avancement du projet, l'allocation des ressources, et plus encore. Avec des interfaces conviviales, naviguer et superviser vos projets n'a jamais été aussi simple.", 16 | "Mais l'efficacité ne dépend pas seulement des outils que vous utilisez, elle dépend également du soutien que vous recevez. C'est pourquoi ScrewFast propose une documentation complète et un accompagnement d'experts à chaque étape. Nos équipes dévouées sont engagées dans votre succès, fournissant une assistance personnalisée pour vous assurer de tirer le meilleur parti de nos produits.", 17 | "Rejoignez les nombreux leaders de l'industrie qui ont déjà constaté la différence que peuvent faire les outils ScrewFast. Avec nos solutions de pointe, vous pouvez accélérer vos projets vers le succès et rester en tête de la concurrence." 18 | ] 19 | --- 20 | -------------------------------------------------------------------------------- /src/content/docs/fr/welcome-to-docs.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ScrewFast docs 3 | head: 4 | - tag: title 5 | content: ScrewFast docs 6 | description: Explore ScrewFast's comprehensive documentation for an in-depth look at our premium tools and construction services. 7 | template: splash 8 | editUrl: false 9 | lastUpdated: false 10 | next: false 11 | hero: 12 | title: Hub de Documentation 13 | tagline: Votre centre central pour l'orientation simplifiée des outils, les documents de service détaillés et le soutien aux projets. 14 | image: 15 | alt: A ScrewFast's Logo 16 | dark: ../../../images/starlight/screwfast_hero.svg 17 | light: ../../../images/starlight/screwfast_hero_dark.svg 18 | actions: 19 | - text: Get started 20 | icon: right-arrow 21 | variant: primary 22 | link: /fr/guides/getting-started/ 23 | - text: View on GitHub 24 | icon: external 25 | variant: minimal 26 | link: https://github.com/mearashadowfax/ScrewFast 27 | --- 28 | import "@styles/starlight_main.css"; 29 | import { Card, CardGrid } from '@astrojs/starlight/components'; 30 | 31 | 32 | 33 | 34 | Mettez-vous en route rapidement avec nos guides clairs et concis, adaptés aux nouveaux utilisateurs et aux experts chevronnés. 35 | 36 | 37 | 38 | Découvrez la gamme complète d'outils et d'équipements de qualité supérieure de ScrewFast. Chaque sous-section offre des spécifications détaillées, des instructions d'utilisation et des conseils de maintenance. 39 | 40 | 41 | 42 | Découvrez la gamme complète d'outils et d'équipements de qualité supérieure de ScrewFast. Chaque sous-section offre des spécifications détaillées, des instructions d'utilisation et des conseils de maintenance. 43 | 44 | 45 | 46 | Découvrez la gamme complète d'outils et d'équipements de qualité supérieure de ScrewFast. Chaque sous-section offre des spécifications détaillées, des instructions d'utilisation et des conseils de maintenance. 47 | 48 | 49 | -------------------------------------------------------------------------------- /src/content/docs/de/guides/intro.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Einführung in die ScrewFast-Dienstleistungen 3 | description: Entdecken Sie die umfassende Dokumentation von ScrewFast für einen eingehenden Einblick in unsere erstklassigen Werkzeuge und Bauleistungen. 4 | sidebar: 5 | label: Introduction to Services 6 | order: 2 7 | --- 8 | 9 | import { 10 | Tabs, 11 | TabItem, 12 | } from "@astrojs/starlight/components"; 13 | 14 | Als Teil unseres Engagements, eine Komplettlösung für alle Ihre Bau- und Hardware-Bedürfnisse bereitzustellen, sind wir bei ScrewFast stolz darauf, eine umfassende Palette professioneller Dienstleistungen anzubieten. Von den ersten Beratungsgesprächen bis hin zu abschließenden Inspektionen umfassen unsere vielseitigen Dienstleistungen die gesamte Projektarbeit und gewährleisten qualitativ hochwertige Ergebnisse und Kundenzufriedenheit. Dieser Abschnitt der Dokumentation wird Sie durch alles führen, was Sie wissen müssen, um unser Fachwissen optimal zu nutzen. 15 | 16 | ## Übersicht über die Dienstleistungen 17 | 18 | 19 | 20 | Jedes Bauprojekt birgt seine eigenen Herausforderungen und Anforderungen. Bei ScrewFast passen wir unsere Dienstleistungen an Ihre spezifischen Bedürfnisse an, um sicherzustellen, dass unser Team unabhängig von der Größe oder Komplexität Ihres Projekts damit präzise und professionell umgehen kann. 21 | 22 | 23 | Nutzen Sie das Know-how unseres kompetenten Personals, von Architekten und Ingenieuren bis hin zu qualifizierten Arbeitern, die jeweils ihr Fachwissen einbringen, um Ihre Vision zum Leben zu erwecken. 24 | 25 | 26 | Qualität steht im Mittelpunkt unseres Handelns. Wir setzen strenge Qualitätskontrollmaßnahmen ein, um sicherzustellen, dass die von uns gelieferte Arbeit den Branchenstandards entspricht und diese sogar übertrifft. 27 | 28 | 29 | Unsere Beziehung zu unseren Kunden endet nicht, sobald das Projekt abgeschlossen ist. Wir bieten kontinuierliche Unterstützung, um Probleme zu lösen und eine dauerhafte Zufriedenheit mit Ihrer Investition sicherzustellen. 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/components/sections/features/FeaturesStatsAlt.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Image } from "astro:assets"; 3 | import product5 from "@images/features-image.avif"; 4 | 5 | // Define props from Astro 6 | const { title, subTitle, benefits } = Astro.props; 7 | 8 | // Define TypeScript interface for props 9 | interface Props { 10 | title: string; 11 | subTitle?: string; 12 | benefits?: Array; 13 | } 14 | 15 | // Define SVG marker to be used in the component 16 | const ListItemMarker: string = ``; 17 | --- 18 | 19 |
    22 | 23 |
    24 |
    25 | Mockup of floating boxes 26 |
    27 |
    28 |
    29 |
    30 |

    33 | {title} 34 |

    35 | { 36 | subTitle && ( 37 |

    38 | {subTitle} 39 |

    40 | ) 41 | } 42 |
    43 | { 44 | benefits && ( 45 |
      46 | {benefits.map((item) => ( 47 |
    • 48 | 49 | 50 | {item} 51 | 52 |
    • 53 | ))} 54 |
    55 | ) 56 | } 57 |
    58 |
    59 |
    60 |
    61 | -------------------------------------------------------------------------------- /src/content/docs/fa/guides/first-project-checklist.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: چک لیست اولین پروژه 3 | description: مستندات جامع ScrewFast را بررسی کنید تا به طور کامل به ابزارها و خدمات ساخت و ساز ویژه ما نگاه کنید. 4 | sidebar: 5 | label: First Project Checklist 6 | order: 3 7 | --- 8 | import { 9 | Card, 10 | CardGrid, 11 | LinkCard, 12 | Steps, 13 | Aside, 14 | Tabs, 15 | TabItem, 16 | } from "@astrojs/starlight/components"; 17 | 18 | شروع یک پروژه جدید ممکن است هم به اندازه‌ای هیجان‌انگیز و هم چالش برانگیز باشد. با آماده‌سازی و هدایت مناسب، پروژه شما برای موفقیت آماده است. چک لیست اولین پروژه ScrewFast طراحی شده است تا یک رویکرد واضح و ساختارمند را برای اطمینان از آمادگی خود در هر مرحله ارائه دهد. 19 | 20 | ## آماده‌سازی پروژه 21 | 22 | 23 | 24 | - اطمینان از وضوح دامنه پروژه، خروجی‌ها و نتایج مورد نظر 25 | - تعریف اهداف روشن و شاخص‌های موفقیت برای اتمام پروژه 26 | 27 | 28 | - تهیه لیستی از تمامی ابزارها و تجهیزات مورد نیاز ScrewFast 29 | - بررسی دسترسی و شرایط موجودی قبل از شروع 30 | 31 | 32 | - در صورت نیاز به تخصص یا نیروی انسانی اضافی، برنامه‌ریزی خدمات ساخت و ساز ScrewFast را به صورت پیشگامانه انجام دهید 33 | - ابهامات توافق‌نامه‌های سطح خدمات و زمانبندی را با نماینده ScrewFast خود روشن کنید 34 | 35 | 36 | 37 | ## اجرای پروژه 38 | ### فاز اولیه 39 | 40 | 1. سایت پروژه را براساس راهنمای تنظیم ScrewFast راه‌اندازی کنید 41 | 42 | 2. یک جلسه اولیه تیم برگزار کنید تا در مورد اهداف پروژه و روش‌های ScrewFast هماهنگ شوید 43 | 44 | 3. نقاط کنترل و مراحل مهم پروژه را برای ارزیابی منظم تعیین کنید 45 | 46 | 47 | ## منابع اضافی 48 | 49 | 54 | 59 | 64 | 65 | -------------------------------------------------------------------------------- /src/components/sections/features/FeaturesStats.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import the necessary components 3 | import StatsBig from "@components/ui/blocks/StatsBig.astro"; 4 | import StatsSmall from "@components/ui/blocks/StatsSmall.astro"; 5 | 6 | const { title, subTitle, stats, mainStatTitle, mainStatSubTitle } = Astro.props; 7 | 8 | interface Props { 9 | title: string; 10 | subTitle?: string; 11 | mainStatTitle: string; 12 | mainStatSubTitle: string; 13 | stats?: Stat[]; 14 | } 15 | 16 | // TypeScript type for the statistics 17 | type Stat = { 18 | stat: string; 19 | description: string; 20 | }; 21 | --- 22 | 23 |
    26 |
    27 | 28 |

    31 | {title} 32 |

    33 | 34 | {subTitle && 35 |

    38 | {subTitle} 39 |

    40 | } 41 |
    42 | 43 |
    44 | 45 |
    46 | 50 |
    51 | 52 | {stats && 53 |
    56 |
    59 | 60 | { 61 | stats.map((stat) => ( 62 | 63 | )) 64 | } 65 |
    66 |
    67 | } 68 |
    69 |
    70 | -------------------------------------------------------------------------------- /src/components/ui/blocks/TabNav.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Extract properties from Astro.props 3 | const { aria, dataTab, id, heading, content, first } = Astro.props; 4 | 5 | // Define TypeScript interface for properties 6 | interface Props { 7 | dataTab: string; 8 | id: string; 9 | aria: string; 10 | heading?: string; 11 | content?: string; 12 | first?: boolean; 13 | } 14 | // Define button classes 15 | const BUTTON_CLASS = 16 | "dark:hover:bg-neutral-700 rounded-xl p-4 text-start outline-hidden ring-zinc-500 transition duration-300 hover:bg-neutral-200 focus-visible:ring-3 hs-tab-active:bg-neutral-50 hs-tab-active:shadow-md hs-tab-active:hover:border-transparent dark:ring-zinc-200 dark:focus:outline-hidden dark:hs-tab-active:bg-neutral-700/60 md:p-5"; 17 | 18 | /* 19 | first: This property should be set to true for the initial TabNav component in your list 20 | to ensure that it's visible when the page first loads. All subsequent TabNav components 21 | should omit this property or set it to false. 22 | 23 | Example: 24 | 25 | 26 | 27 | */ 28 | --- 29 | 30 | 31 | 57 | -------------------------------------------------------------------------------- /src/components/ui/blocks/ReviewComponent.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Avatar from "@components/ui/avatars/Avatar.astro"; 3 | import FullStar from "@components/ui/stars/FullStar.astro"; 4 | import HalfStar from "@components/ui/stars/HalfStar.astro"; 5 | 6 | const { avatars, starCount = 0, rating, reviews } = Astro.props; 7 | 8 | interface Props { 9 | avatars?: Array; 10 | starCount?: number; 11 | rating?: string; 12 | reviews?: string; 13 | } 14 | --- 15 | 16 |
    17 |
    18 |
    19 |
    20 | 21 |
    22 | {avatars?.map((src) => )} 23 | 26 | 7k+ 29 | 30 |
    31 |
    32 |
    35 |
    36 | 37 |
    38 |
    39 |
    40 | 41 | { 42 | Array(starCount) 43 | .fill(0) 44 | .map((_, i) => ) 45 | } 46 | 47 | 48 |
    49 |

    50 | 51 |

    52 |
    53 |
    54 |

    55 | 56 |

    57 |
    58 |
    59 |
    60 |
    61 |
    62 | -------------------------------------------------------------------------------- /src/components/ui/blocks/TabContent.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import the Image component from astro:assets 3 | import { Image } from "astro:assets"; 4 | 5 | // Destructure the component properties from Astro.props 6 | const { id, aria, src, alt, first, second } = Astro.props; 7 | 8 | // Define TypeScript interface for the properties 9 | interface Props { 10 | id: string; 11 | aria: string; 12 | src?: any; 13 | alt: string; 14 | first?: boolean; 15 | second?: boolean; 16 | } 17 | // Set class based on 'first' property 18 | // If 'first' is present, show the tab content immediately 19 | const firstClass = first ? "" : "hidden"; 20 | // Set class based on 'second' property 21 | // If 'second' is present, use an alternate style for the image 22 | const secondClass = second 23 | ? "shadow-xl aspect-5/4 bg-neutral-300 dark:bg-neutral-600 object-cover p-3 lg:aspect-auto shadow-neutral-200 rounded-xl dark:shadow-neutral-900/[.2]" 24 | : "shadow-xl aspect-3/2 object-cover lg:aspect-auto shadow-neutral-200 rounded-xl dark:shadow-neutral-900/[.2]"; 25 | 26 | /* 27 | first: This property should be set to true for the initial TabContent component 28 | in your list to ensure that it's visible when the page first loads. 29 | All subsequent TabContent components should omit this property or set it to false. 30 | 31 | second: This property allows to control changes in the look of the Image. 32 | If it is set to true, the Image will have different aspect ratio and background color. 33 | If this property is not provided or is set to false, the Image will use default styling. 34 | You can enable this for any TabContent component you want to apply these changes to. 35 | 36 | This is the full example: 37 | 38 | 39 | 40 | */ 41 | --- 42 | 43 | 44 |
    45 | 46 | {alt} 54 |
    55 | -------------------------------------------------------------------------------- /src/components/sections/misc/FAQ.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import the necessary AccordionItem component and JSON data 3 | import AccordionItem from "@components/ui/blocks/AccordionItem.astro"; 4 | 5 | // Define props from Astro 6 | const { title, faqs } = Astro.props; 7 | 8 | // Define TypeScript interface for props 9 | interface Faq { 10 | question: string; 11 | answer: string; 12 | } 13 | 14 | interface FaqGroup { 15 | subTitle?: string; 16 | faqs: Faq[]; 17 | } 18 | 19 | interface Props { 20 | title: string; 21 | faqs: FaqGroup; 22 | } 23 | // Define a helper function to generate ids dynamically. 24 | const makeId = (base: any, index: any) => `${base}${index + 1}`; 25 | --- 26 | 27 | 28 |
    31 |
    32 |
    33 |
    34 |

    37 | 38 |

    39 | 42 |
    43 |
    44 | 45 |
    46 |
    49 | { 50 | faqs.faqs.map((question, i) => { 51 | // Generate ids dynamically for each FAQ accordion item. 52 | let id = makeId( 53 | "hs-basic-with-title-and-arrow-stretched-heading-", 54 | i 55 | ); 56 | let collapseId = makeId( 57 | "hs-basic-with-title-and-arrow-stretched-collapse", 58 | i 59 | ); 60 | 61 | return ( 62 | 68 | ); 69 | }) 70 | } 71 |
    72 |
    73 |
    74 |
    -------------------------------------------------------------------------------- /src/components/ui/buttons/GoogleBtn.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const { title } = Astro.props; 3 | 4 | interface Props { 5 | title: string; 6 | } 7 | 8 | const baseClasses = 9 | "inline-flex w-full items-center justify-center gap-x-2 rounded-lg px-4 py-3 text-sm dark:text-neutral-400 font-medium text-neutral-600 shadow-xs transition duration-300 focus-visible:ring-3 outline-hidden"; 10 | const borderClasses = "border border-neutral-200 dark:border-neutral-700"; 11 | const bgColorClasses = 12 | "bg-neutral-50 dark:bg-neutral-800 hover:bg-neutral-200 dark:hover:bg-neutral-900"; 13 | const disableClasses = "disabled:pointer-events-none disabled:opacity-50"; 14 | const ringClasses = "ring-zinc-500 dark:ring-zinc-200"; 15 | const googleSVG = ` 22 | 25 | 28 | 31 | 34 | `; 35 | --- 36 | 37 | 46 | -------------------------------------------------------------------------------- /src/components/ui/cards/CardInsight.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import necessary modules and utilities 3 | import { Image } from "astro:assets"; 4 | import Icon from "@components/ui/icons/Icon.astro"; 5 | import type { CollectionEntry } from "astro:content"; 6 | 7 | const { 8 | insightEntry, 9 | insightLocale, 10 | label = Astro.currentLocale === "fr" ? "Lire plus" : "Read more", 11 | } = Astro.props; 12 | 13 | interface Props { 14 | insightEntry: CollectionEntry<"insights">; 15 | insightLocale?: string; 16 | label?: string; 17 | } 18 | --- 19 | 20 | 21 | 27 | 28 |
    29 | {insightEntry.data.cardImageAlt} 36 |
    37 | 38 |
    39 | 40 |

    43 | {insightEntry.data.title} 44 |

    45 | 46 |

    47 | {insightEntry.data.description} 48 |

    49 | 50 |

    53 | {label} 54 | 55 |

    56 |
    57 |
    58 | -------------------------------------------------------------------------------- /src/data_files/faqs.json: -------------------------------------------------------------------------------- 1 | { 2 | "subTitle": "Ask us anything about our brand and products, and get factual responses.", 3 | "faqs": [ 4 | { 5 | "question": "What types of tools are included in the Starter Kit?", 6 | "answer": "The Starter Kit features essential hand and power tools for diverse DIY projects, including hammers, drills, screwdrivers, and a variety of fasteners. It's a curated selection to help beginners and experienced DIYers alike tackle most home improvement tasks." 7 | }, 8 | { 9 | "question": "Can I upgrade from the Starter Kit to the Professional Toolbox?", 10 | "answer": "Absolutely! You can upgrade to the Professional Toolbox at any time to access a wider range of high-quality tools, enjoy priority customer support, and receive exclusive content. Contact our support team for a seamless transition." 11 | }, 12 | { 13 | "question": "What discounts are available for bulk orders through the Professional Toolbox plan?", 14 | "answer": "Professional Toolbox members are entitled to exclusive discounts on bulk orders, the percentage of which may vary depending on the order volume. Get in touch with us to discuss your needs, and we'll provide a tailored discount structure." 15 | }, 16 | { 17 | "question": "What kind of customer support can I expect?", 18 | "answer": "All our customers receive dedicated email support. With the Starter Kit, you'll receive our standard support, while the Professional Toolbox plan upgrades you to priority support, meaning faster response times and specialized assistance." 19 | }, 20 | { 21 | "question": "How current are the online resources and tutorials?", 22 | "answer": "We regularly update our online resources and tutorials to reflect the latest trends in DIY and construction, as well as introductions to new tools and techniques. Our material aims to be comprehensive and user-friendly for all skill levels." 23 | }, 24 | { 25 | "question": "Does ScrewFast offer services for large-scale construction projects?", 26 | "answer": "Yes, our Enterprise Solutions are designed for larger companies requiring comprehensive services. We provide consultation, planning, and supply of high-grade tools and materials, as well as staffing solutions for substantial construction needs. Contact us for a customized quote." 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/components/ui/blocks/ContactIconBlock.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Define props from Astro 3 | const { 4 | heading, 5 | content, 6 | isAddressVisible, 7 | addressContent, 8 | isLinkVisible, 9 | linkTitle, 10 | linkURL, 11 | isArrowVisible, 12 | } = Astro.props; 13 | 14 | // Define TypeScript interface for props 15 | interface Props { 16 | heading?: string; 17 | content?: string; 18 | isAddressVisible?: boolean; 19 | addressContent?: string; 20 | isLinkVisible?: boolean; 21 | linkTitle?: string; 22 | linkURL?: string; 23 | isArrowVisible?: boolean; 24 | } 25 | 26 | // Define SVG arrow to be used in the component 27 | const arrowSVG: string = ` 30 | `; 31 | --- 32 | 33 | 34 |
    35 | 36 | 37 |
    38 | 39 |

    40 | {heading} 41 |

    42 | 43 |

    {content}

    44 | 45 | { 46 | isAddressVisible ? ( 47 |

    {addressContent}

    48 | ) : null 49 | } 50 | 52 | { 53 | isLinkVisible ? ( 54 | 58 | {linkTitle} 59 | {isArrowVisible ? : null} 60 | 61 | ) : null 62 | } 63 |
    64 |
    65 | -------------------------------------------------------------------------------- /src/content/blog/fr/post-2.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Améliorer la Sécurité et l'Artisanat avec les Services de Construction de ScrewFast" 3 | description: "Services de construction de qualité pour des résultats durables" 4 | author: "Brad" 5 | authorImage: "@/images/blog/brad.avif" 6 | authorImageAlt: "Avatar Description" 7 | pubDate: 2024-02-10 8 | cardImage: "@/images/blog/post-2.avif" 9 | cardImageAlt: "Man in black sweatpants using DEWALT circular saw and cutting a wood plank" 10 | readTime: 5 11 | tags: ["sécurité", "artisanat", "gestion"] 12 | contents: [ 13 | "En matière de construction, la sécurité et la qualité de l'artisanat sont non négociables. Chez ScrewFast, nous sommes fiers de proposer une gamme de services de construction qui privilégient les deux, garantissant que vos projets sont construits pour durer.", 14 | "Notre équipe d'artisans qualifiés apporte précision et expertise à chaque travail, des installations mineures aux travaux structuraux à grande échelle. Avec des outils et des matériaux de haute qualité issus de notre vaste inventaire, nous garantissons les normes de sécurité et d'artisanat les plus élevées sur chaque projet.", 15 | "Mais notre engagement envers l'excellence ne s'arrête pas là. Nous fournissons également des services complets de gestion de projet pour maintenir votre construction sur la bonne voie et dans les limites du budget. De la coordination du flux de travail à la communication avec les parties prenantes, ScrewFast gère les complexités pour que vous puissiez vous concentrer sur votre vision.", 16 | "Ce qui distingue ScrewFast, c'est notre dévouement à un soutien continu. Nous ne terminons pas simplement le travail et partons - nous sommes là pour le long terme. Nos services de maintenance garantissent que votre construction reste en parfait état, offrant une tranquillité d'esprit pour les années à venir.", 17 | "Pour les clients d'entreprise de plus grande envergure, nous proposons des solutions personnalisées adaptées à vos défis uniques. En comprenant vos besoins spécifiques, nous concevons des stratégies visant à maximiser l'efficacité et à faire avancer votre entreprise.", 18 | "Avec les services de construction de ScrewFast, vous pouvez avoir confiance que vos projets sont entre de bonnes mains. Découvrez la différence dès aujourd'hui et voyez pourquoi tant de clients choisissent ScrewFast pour leurs besoins en construction." 19 | ] 20 | --- 21 | -------------------------------------------------------------------------------- /src/components/sections/features/FeaturesGeneral.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import the necessary dependencies 3 | import { Image } from "astro:assets"; 4 | import IconBlock from "@components/ui/blocks/IconBlock.astro"; 5 | import Icon from "@components/ui/icons/Icon.astro"; 6 | 7 | interface Feature { 8 | heading: string; 9 | content: string; 10 | svg: string; 11 | } 12 | 13 | interface Props { 14 | title?: string; 15 | subTitle?: string; 16 | features?: Feature[]; 17 | src?: any; 18 | alt?: string; 19 | } 20 | // Define props from Astro 21 | const { title, subTitle, src, alt, features } = Astro.props; 22 | --- 23 | 24 |
    27 | 28 |
    29 | { 30 | src && alt && ( 31 | {alt} 39 | ) 40 | } 41 |
    42 | 43 | 44 |
    45 | 46 |
    47 | 48 |

    51 | {title} 52 |

    53 | 54 | { 55 | subTitle && ( 56 |

    57 | {subTitle} 58 |

    59 | ) 60 | } 61 |
    62 | 63 | 64 |
    65 |
    66 | 67 | { features && 68 | features.map((feature) => ( 69 | 70 | 71 | 72 | )) 73 | } 74 |
    75 |
    76 |
    77 |
    78 | -------------------------------------------------------------------------------- /src/components/ThemeIcon.astro: -------------------------------------------------------------------------------- 1 | 2 | 25 | 51 | -------------------------------------------------------------------------------- /src/content/docs/guides/first-project-checklist.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: First Project Checklist 3 | description: Explore ScrewFast's comprehensive documentation for an in-depth look at our premium tools and construction services. 4 | sidebar: 5 | label: First Project Checklist 6 | order: 3 7 | --- 8 | import { 9 | Card, 10 | CardGrid, 11 | LinkCard, 12 | Steps, 13 | Aside, 14 | Tabs, 15 | TabItem, 16 | } from "@astrojs/starlight/components"; 17 | 18 | Embarking on a new project can be exciting and challenging in equal measure. With the right preparation and guidance, your venture is poised for success. The ScrewFast First Project Checklist is designed to provide a clear and structured approach to ensure you're well-prepared every step of the way. 19 | 20 | ## Project Preparation 21 | 22 | 23 | 24 | - Ensure clarity of the project's scope, deliverables, and desired outcomes 25 | - Define clear objectives and success criteria for project completion 26 | 27 | 28 | - Make a list of all required ScrewFast tools and equipment 29 | - Verify inventory availability and condition before starting 30 | 31 | 32 | - If additional expertise or manpower is needed, arrange for ScrewFast construction services in advance 33 | - Clarify service level agreements and timelines with your ScrewFast representative 34 | 35 | 36 | 37 | ## Project Execution 38 | ### Initial Phase 39 | 40 | 1. Set up the project site according to ScrewFast setup guidelines 41 | 42 | 2. Conduct an initial team meeting to align on project goals and ScrewFast methodologies 43 | 44 | 3. Establish project checkpoints and milestones for regular assessment 45 | 46 | 47 | 48 | ## Additional Resources 49 | 50 | 55 | 60 | 65 | -------------------------------------------------------------------------------- /src/components/sections/testimonials/TestimonialsSection.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import TestimonialItem from "./TestimonialItem.astro"; 3 | import StatsGrid from "../../ui/blocks/StatsGrid.astro"; 4 | 5 | const { 6 | title, 7 | subTitle, 8 | testimonials, 9 | statistics 10 | } = Astro.props; 11 | 12 | interface Props { 13 | title: string; 14 | subTitle?: string; 15 | testimonials?: Testimonial[]; 16 | statistics?: StatProps[]; 17 | } 18 | 19 | // TypeScript type for testimonials 20 | type Testimonial = { 21 | content: string; 22 | author: string; 23 | role: string; 24 | avatarSrc: string; 25 | }; 26 | 27 | // TypeScript type for stats. 28 | type StatProps = { 29 | count: string; 30 | description: string; 31 | }; 32 | --- 33 | 34 |
    37 | 38 |
    41 |
    42 | 43 |
    44 |

    47 | {title} 48 |

    49 | {subTitle && 50 |

    51 | {subTitle} 52 |

    53 | } 54 |
    55 | 56 | 57 | { testimonials && 58 | testimonials.map((testimonial) => ( 59 | 60 | )) 61 | } 62 |
    63 | { statistics && 64 |
    65 |
    66 |
      69 | 70 | { 71 | statistics.map((stat, index) => ( 72 | 73 | )) 74 | } 75 |
    76 |
    77 |
    78 | } 79 |
    80 |
    81 | -------------------------------------------------------------------------------- /src/components/ui/blocks/RightSection.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import the required modules 3 | import { Image } from "astro:assets"; 4 | import PrimaryCTA from "@components/ui/buttons/PrimaryCTA.astro"; 5 | // Extract properties from Astro.props 6 | const { 7 | title, 8 | subTitle, 9 | btnExists, 10 | btnTitle, 11 | btnURL, 12 | single, 13 | imgOne, 14 | imgOneAlt, 15 | imgTwo, 16 | imgTwoAlt, 17 | } = Astro.props; 18 | // Define TypeScript interface for the properties 19 | interface Props { 20 | title: string; 21 | subTitle: string; 22 | btnExists?: boolean; 23 | btnTitle?: string; 24 | btnURL?: string; 25 | single?: boolean; 26 | imgOne?: any; 27 | imgOneAlt?: any; 28 | imgTwo?: any; 29 | imgTwoAlt?: any; 30 | } 31 | --- 32 | 33 |
    36 |
    37 | 38 |

    41 | {title} 42 |

    43 | 44 |

    47 | {subTitle} 48 |

    49 | 50 | {btnExists ? : null} 51 |
    52 | 53 | { 54 | single ? ( 55 |
    56 | 57 | {imgOneAlt} 63 |
    64 | ) : ( 65 |
    66 | 67 | {imgOneAlt} 74 | 75 | {imgTwoAlt} 82 |
    83 | ) 84 | } 85 |
    86 | -------------------------------------------------------------------------------- /src/components/ui/feedback/PostFeedback.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Define props from Astro 3 | const { title, firstChoice, secondChoice } = Astro.props; 4 | 5 | // Define TypeScript interface for props 6 | interface Props { 7 | title: string; 8 | firstChoice: string; 9 | secondChoice: string; 10 | } 11 | --- 12 | 13 |
    14 |

    {title}

    15 | 35 | 55 |
    56 | -------------------------------------------------------------------------------- /src/components/sections/testimonials/TestimonialsSectionAlt.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import AvatarTestimonialSection component for use in this module 3 | import AvatarTestimonialSection from "../../ui/avatars/AvatarTestimonialSection.astro"; 4 | 5 | // Define props from Astro 6 | const { title, testimonials } = Astro.props; 7 | 8 | // Define TypeScript interface for Testimonial 9 | interface Testimonial { 10 | content: string; 11 | author: string; 12 | role: string; 13 | avatarSrc: string; 14 | avatarAlt: string; 15 | } 16 | 17 | // Define TypeScript interface for props 18 | interface Props { 19 | title: string; 20 | testimonials: Testimonial[]; 21 | } 22 | --- 23 | 24 |
    28 | 29 |
    30 |

    33 | {title} 34 |

    35 |
    36 | 37 |
    38 | 39 | { 40 | testimonials.map((testimonial) => ( 41 |
    42 |
    43 |
    44 | 45 |

    46 | {testimonial.content} 47 |

    48 |
    49 | 50 |
    51 |
    52 | 56 | 57 |
    58 |

    59 | {testimonial.author} 60 |

    61 |

    62 | {testimonial.role} 63 |

    64 |
    65 |
    66 |
    67 |
    68 |
    69 | )) 70 | } 71 |
    72 |
    73 | -------------------------------------------------------------------------------- /src/content/docs/advanced/technical-specifications.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Technical Specifications 3 | description: Explore ScrewFast's comprehensive documentation for an in-depth look at our premium tools and construction services. 4 | sidebar: 5 | label: Technical Specifications 6 | order: 1 7 | --- 8 | import { 9 | Card, 10 | CardGrid, 11 | LinkCard, 12 | Steps 13 | } from "@astrojs/starlight/components"; 14 | 15 | Dive deep into the technicalities of our product offerings with ScrewFast's comprehensive technical specifications documentation. Our detailed data sheets provide you with all the information you need on: 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | Understanding these specifications will help you select and use our products with confidence, ensuring optimal performance and longevity. 25 | 26 | 27 | 1. **Material Specifications** 28 | Insight into the materials used and their properties to assist you with informed decision-making. 29 | 30 | 2. **Performance Metrics** 31 | Documented performance metrics that detail what you can expect from our products under various conditions. 32 | 33 | 3. **Compliance Standards** 34 | Information about industry standards and regulatory compliance ensures your project adheres to necessary codes and practices. 35 | 36 | 37 | ## Product Integration Techniques 38 | 39 | Unlock the full potential of ScrewFast products with our set of specialized integration techniques. 40 | 41 | Leverage our in-depth knowledge to enhance the efficiency and durability of your constructions by correctly incorporating our products. 42 | 43 | ## Advanced Use Cases 44 | 45 | Explore the possibilities with ScrewFast through real-world scenarios. Our catalog of advanced use cases demonstrates how our products can solve complex challenges and push the boundaries of conventional construction. 46 | 47 | See how ScrewFast products have been instrumental in: 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | These case studies serve as an inspiration and a learning tool, showcasing what can be achieved with the right expertise and ScrewFast's superior product range. -------------------------------------------------------------------------------- /src/content/products/en/item-a765.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "SF-AB A765" 3 | description: "Assorted Screw Set" 4 | main: 5 | id: 2 6 | content: | 7 | Introducing the SF-AB A765 Assorted Screw Set – the ultimate solution for your screw fastening needs. This comprehensive set includes a wide variety of screws meticulously curated to tackle various projects with ease and precision. 8 | imgCard: "@/images/product-image-2.avif" 9 | imgMain: "@/images/product-image-main-2.avif" 10 | imgAlt: "Mockup boxes of assorted screw set" 11 | tabs: 12 | - id: "tabs-with-card-item-1" 13 | dataTab: "#tabs-with-card-1" 14 | title: "Description" 15 | - id: "tabs-with-card-item-2" 16 | dataTab: "#tabs-with-card-2" 17 | title: "Specifications" 18 | - id: "tabs-with-card-item-3" 19 | dataTab: "#tabs-with-card-3" 20 | title: "Blueprints" 21 | longDescription: 22 | title: "Versatile Screw Fastening Solutions" 23 | subTitle: | 24 | The SF-AB A765 Assorted Screw Set offers unmatched versatility and convenience, making it the perfect choice for DIY enthusiasts and professionals alike. With a comprehensive selection of screws, you'll always have the right fastener for the job. 25 | btnTitle: "Contact sales to learn more" 26 | btnURL: "#" 27 | descriptionList: 28 | - title: "Wide Variety" 29 | subTitle: "Includes a diverse range of screw types and sizes to accommodate various applications and materials." 30 | - title: "Ease of Use" 31 | subTitle: "Each screw is designed for effortless installation, ensuring hassle-free fastening every time." 32 | - title: "Convenience" 33 | subTitle: "Eliminates the need for multiple trips to the hardware store, saving time and effort on your projects." 34 | specificationsLeft: 35 | - title: "Material" 36 | subTitle: "Constructed from high-quality materials such as stainless steel, ensuring durability and corrosion resistance." 37 | - title: "Assortment" 38 | subTitle: "Contains a generous assortment of screws, including wood screws, machine screws, and sheet metal screws." 39 | - title: "Quantity" 40 | subTitle: "Each set includes a sufficient quantity of screws to handle a wide range of projects and tasks." 41 | - title: "Sizes" 42 | subTitle: "Available in various sizes to suit different project requirements, ensuring compatibility and versatility." 43 | tableData: 44 | - feature: ["Specification", "Value"] 45 | description: 46 | - ["Length (mm)", "Various"] 47 | - ["Weight (g)", "N/A"] 48 | - ["Material", "Stainless Steel"] 49 | - ["Finish", "Assorted"] 50 | - ["Package Contents", "Various screws in a set"] 51 | blueprints: 52 | first: "@/images/blueprint-1.avif" 53 | second: "@/images/blueprint-2.avif" 54 | --- 55 | -------------------------------------------------------------------------------- /src/content/docs/es/guides/first-project-checklist.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lista de Verificación del Primer Proyecto 3 | description: Explora la documentación completa de ScrewFast para obtener una visión detallada de nuestras herramientas premium y servicios de construcción. 4 | sidebar: 5 | label: First Project Checklist 6 | order: 3 7 | --- 8 | import { 9 | Card, 10 | CardGrid, 11 | LinkCard, 12 | Steps, 13 | Aside, 14 | Tabs, 15 | TabItem, 16 | } from "@astrojs/starlight/components"; 17 | 18 | Comenzar un nuevo proyecto puede ser emocionante y desafiante en igual medida. Con la preparación adecuada y orientación, tu empresa está lista para el éxito. La Lista de Verificación del Primer Proyecto de ScrewFast está diseñada para proporcionar un enfoque claro y estructurado para garantizar que estés bien preparado en cada paso del camino. 19 | 20 | ## Preparación del Proyecto 21 | 22 | 23 | 24 | - Asegurar claridad sobre el alcance del proyecto, entregables y resultados deseados. 25 | - Definir objetivos claros y criterios de éxito para la finalización del proyecto. 26 | 27 | 28 | - Hacer una lista de todas las herramientas y equipos de ScrewFast necesarios. 29 | - Verificar la disponibilidad y condición del inventario antes de comenzar. 30 | 31 | 32 | - Si se necesita experiencia adicional o mano de obra, organiza los servicios de construcción de ScrewFast con anticipación. 33 | - Aclarar los acuerdos de nivel de servicio y los plazos con tu representante de ScrewFast. 34 | 35 | 36 | 37 | ## Ejecución del Proyecto 38 | ### Fase Inicial 39 | 40 | 1. Configurar el sitio del proyecto según las pautas de configuración de ScrewFast. 41 | 42 | 2. Realizar una reunión inicial de equipo para alinear los objetivos del proyecto y las metodologías de ScrewFast. 43 | 44 | 3. Establecer puntos de control y hitos del proyecto para evaluaciones regulares. 45 | 46 | 47 | ## Recursos Adicionales 48 | 49 | 54 | 59 | 64 | 65 | -------------------------------------------------------------------------------- /src/content/docs/fr/guides/first-project-checklist.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Liste de vérification du premier projet 3 | description: Explorez la documentation complète de ScrewFast pour un examen approfondi de nos outils haut de gamme et services de construction. 4 | sidebar: 5 | label: First Project Checklist 6 | order: 3 7 | --- 8 | import { 9 | Card, 10 | CardGrid, 11 | LinkCard, 12 | Steps, 13 | Aside, 14 | Tabs, 15 | TabItem, 16 | } from "@astrojs/starlight/components"; 17 | 18 | Se lancer dans un nouveau projet peut être à la fois excitant et stimulant. Avec la bonne préparation et orientation, votre entreprise est prête pour le succès. La Liste de vérification du premier projet de ScrewFast est conçue pour fournir une approche claire et structurée afin de vous assurer que vous êtes bien préparé à chaque étape du processus. 19 | 20 | ## Préparation du projet 21 | 22 | 23 | 24 | - Assurez-vous de la clarté de la portée du projet, des livrables et des résultats souhaités 25 | - Définissez des objectifs clairs et des critères de réussite pour l'achèvement du projet 26 | 27 | 28 | - Faites une liste de tous les outils et équipements ScrewFast nécessaires 29 | - Vérifiez la disponibilité de l'inventaire et son état avant de commencer 30 | 31 | 32 | - Si une expertise supplémentaire ou une main-d'œuvre est nécessaire, organisez les services de construction ScrewFast à l'avance 33 | - Clarifiez les accords de niveau de service et les délais avec votre représentant ScrewFast 34 | 35 | 36 | 37 | ## Exécution du projet 38 | ### Phase initiale 39 | 40 | 1. Configurez le site du projet selon les directives de configuration de ScrewFast 41 | 42 | 2. Organisez une réunion initiale d'équipe pour aligner les objectifs du projet et les méthodologies ScrewFast 43 | 44 | 3. Établissez des points de contrôle et des jalons du projet pour des évaluations régulières 45 | 46 | 47 | 48 | ## Ressources supplémentaires 49 | 50 | 55 | 60 | 65 | 66 | -------------------------------------------------------------------------------- /src/content/docs/de/guides/first-project-checklist.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Erste Projekt-Checkliste 3 | description: Entdecken Sie die umfassende Dokumentation von ScrewFast für einen eingehenden Einblick in unsere erstklassigen Werkzeuge und Bauleistungen. 4 | sidebar: 5 | label: First Project Checklist 6 | order: 3 7 | --- 8 | import { 9 | Card, 10 | CardGrid, 11 | LinkCard, 12 | Steps, 13 | Aside, 14 | Tabs, 15 | TabItem, 16 | } from "@astrojs/starlight/components"; 17 | 18 | Den Beginn eines neuen Projekts anzugehen kann gleichermaßen aufregend und herausfordernd sein. Mit der richtigen Vorbereitung und Anleitung ist Ihr Vorhaben auf Erfolgskurs. Die ScrewFast First Project Checklist wurde entwickelt, um einen klaren und strukturierten Ansatz zu bieten und sicherzustellen, dass Sie bei jedem Schritt des Weges gut vorbereitet sind. 19 | 20 | ## Projektvorbereitung 21 | 22 | 23 | 24 | - Stellen Sie sicher, dass der Umfang des Projekts, die Liefergegenstände und die angestrebten Ergebnisse klar definiert sind. 25 | - Legen Sie klare Ziele und Erfolgskriterien für den Abschluss des Projekts fest. 26 | 27 | 28 | - Erstellen Sie eine Liste aller benötigten ScrewFast Werkzeuge und Ausrüstungen. 29 | - Überprüfen Sie die Verfügbarkeit und den Zustand des Inventars vor Beginn. 30 | 31 | 32 | - Wenn zusätzliche Expertise oder Arbeitskräfte benötigt werden, vereinbaren Sie rechtzeitig ScrewFast Bauarbeiten. 33 | - Klären Sie Service Level Agreements und Zeitpläne mit Ihrem ScrewFast Vertreter. 34 | 35 | 36 | 37 | ## Projektumsetzung 38 | ### Erste Phase 39 | 40 | 1. Richten Sie den Projektstandort gemäß den ScrewFast Einrichtungsrichtlinien ein. 41 | 42 | 2. Führen Sie ein erstes Teammeeting durch, um sich auf die Projektziele und ScrewFast Methodologien abzustimmen. 43 | 44 | 3. Legen Sie Projektprüfpunkte und Meilensteine für regelmäßige Bewertungen fest. 45 | 46 | 47 | ## Zusätzliche Ressourcen 48 | 49 | 54 | 59 | 64 | -------------------------------------------------------------------------------- /src/layouts/MainLayout.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Importing necessary components 3 | import Meta from "@components/Meta.astro"; 4 | import Navbar from "@components/sections/navbar&footer/Navbar.astro"; 5 | import FooterSection from "@components/sections/navbar&footer/FooterSection.astro"; 6 | import { SITE } from "@data/constants"; 7 | import "@styles/global.css"; 8 | 9 | // Setting expected props 10 | const { 11 | title = SITE.title, 12 | meta, 13 | structuredData, 14 | lang = "en", 15 | customDescription = null, 16 | customOgTitle = null, 17 | } = Astro.props; 18 | 19 | // Interface to type-check the properties 20 | interface Props { 21 | title?: string; 22 | meta?: string; 23 | structuredData?: object; 24 | lang?: string; 25 | customDescription?: string | null; 26 | customOgTitle?: string | null; 27 | } 28 | --- 29 | 30 | 31 | 32 | {/* Adding metadata to the HTML document */} 33 | 39 | {/* Define the title of the page */} 40 | {title} 41 | 53 | 56 | 57 | 60 | {/* 61 | Setting up the main structure of the page. 62 | The Navbar is placed at the top, with a slot for the main content and FooterSection at the bottom. 63 | */} 64 |
    65 | 66 |
    67 | 68 |
    69 |
    70 | 71 | 75 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /src/data_files/fr/faqs.json: -------------------------------------------------------------------------------- 1 | { 2 | "subTitle": "Posez-nous toutes vos questions sur notre marque et nos produits, et obtenez des réponses factuelles.", 3 | "faqs": [ 4 | { 5 | "question": "Quels types d'outils sont inclus dans le Kit de Démarrage?", 6 | "answer": "Le Kit de Démarrage comprend des outils à main et électriques essentiels pour différents projets de bricolage, notamment des marteaux, des perceuses, des tournevis et une variété de fixations. C'est une sélection soigneusement élaborée pour aider les débutants et les bricoleurs expérimentés à aborder la plupart des tâches d'amélioration de l'habitat." 7 | }, 8 | { 9 | "question": "Puis-je passer du Kit de Démarrage à la Boîte à Outils Professionnelle?", 10 | "answer": "Absolument ! Vous pouvez passer à la Boîte à Outils Professionnelle à tout moment pour accéder à une gamme plus large d'outils de haute qualité, bénéficier d'un support client prioritaire et recevoir un contenu exclusif. Contactez notre équipe de support pour une transition sans problème." 11 | }, 12 | { 13 | "question": "Quels sont les rabais disponibles pour les commandes en gros via le plan Boîte à Outils Professionnelle?", 14 | "answer": "Les membres de la Boîte à Outils Professionnelle ont droit à des rabais exclusifs sur les commandes en gros, dont le pourcentage peut varier en fonction du volume de la commande. Contactez-nous pour discuter de vos besoins, et nous vous fournirons une structure de rabais personnalisée." 15 | }, 16 | { 17 | "question": "À quoi puis-je m'attendre en termes de support client?", 18 | "answer": "Tous nos clients bénéficient d'un support par e-mail dédié. Avec le Kit de Démarrage, vous recevrez notre support standard, tandis que le plan Boîte à Outils Professionnelle vous mettra à niveau vers un support prioritaire, ce qui signifie des temps de réponse plus rapides et une assistance spécialisée." 19 | }, 20 | { 21 | "question": "À quelle fréquence sont mises à jour les ressources en ligne et les tutoriels?", 22 | "answer": "Nous mettons régulièrement à jour nos ressources en ligne et nos tutoriels pour refléter les dernières tendances en matière de bricolage et de construction, ainsi que les introductions de nouveaux outils et techniques. Notre matériel vise à être complet et convivial pour tous les niveaux de compétence." 23 | }, 24 | { 25 | "question": "ScrewFast propose-t-il des services pour les grands projets de construction?", 26 | "answer": "Oui, nos Solutions Entreprise sont conçues pour les grandes entreprises ayant besoin de services complets. Nous fournissons des consultations, de la planification et de l'approvisionnement en outils et matériaux de haute qualité, ainsi que des solutions de personnel pour des besoins de construction importants. Contactez-nous pour un devis personnalisé." 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/pages/404.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import section components 3 | import MainLayout from "@/layouts/MainLayout.astro"; 4 | import Btn404 from "@components/ui/buttons/Btn404.astro"; 5 | import { SITE } from "@data/constants"; 6 | 7 | // Define types for translations 8 | type TranslationKeys = "en" | "fr"; 9 | type Translations = { 10 | [key in TranslationKeys]: { 11 | pageTitle: string; 12 | subTitle: string; 13 | content: string; 14 | btnTitle: string; 15 | }; 16 | }; 17 | 18 | // Define variables for page content 19 | const defaultLang: TranslationKeys = "en"; 20 | const translations: Translations = { 21 | en: { 22 | pageTitle: `Page Not Found | ${SITE.title}`, 23 | subTitle: "Oops, this isn't the tool you were looking for!", 24 | content: 25 | "Don't let this hiccup slow you down. Let's get you back to building your masterpiece.", 26 | btnTitle: "Go Back", 27 | }, 28 | fr: { 29 | pageTitle: `Page Non Trouvée | ${SITE.title}`, 30 | subTitle: "Oops, ce n'est pas l'outil que vous recherchiez!", 31 | content: 32 | "Ne laissez pas ce contretemps vous ralentir. Revenons à la construction de votre chef-d'œuvre.", 33 | btnTitle: "Retournez", 34 | }, 35 | }; 36 | 37 | // Determine language from the URL 38 | const urlPath = Astro.url.pathname; 39 | const langCodeMatch = urlPath.match(/^\/(en|fr)\//); 40 | const lang: TranslationKeys = langCodeMatch 41 | ? (langCodeMatch[1] as TranslationKeys) 42 | : defaultLang; 43 | 44 | const { pageTitle, subTitle, content, btnTitle } = translations[lang]; 45 | --- 46 | 47 | 48 |
    49 |
    50 |
    51 |

    54 | 404 55 |

    56 |

    60 | {subTitle} 61 |

    62 |

    66 | {content} 67 |

    68 | 69 | 70 |
    71 |
    72 |
    73 |
    74 | 75 | 76 | 83 | -------------------------------------------------------------------------------- /src/content/products/fr/item-a765.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "SF-AB A765" 3 | description: "Ensemble de Vis Assorties" 4 | main: 5 | id: 2 6 | content: | 7 | Découvrez l'ensemble de vis assorties SF-AB A765 – la solution ultime pour vos besoins de fixation. Ce set complet comprend une grande variété de vis soigneusement sélectionnées pour aborder divers projets avec facilité et précision. 8 | imgCard: "@/images/product-image-2.avif" 9 | imgMain: "@/images/product-image-main-2.avif" 10 | imgAlt: "Boîtes factices de l'ensemble de vis assorties" 11 | tabs: 12 | - id: "tabs-with-card-item-1" 13 | dataTab: "#tabs-with-card-1" 14 | title: "Description" 15 | - id: "tabs-with-card-item-2" 16 | dataTab: "#tabs-with-card-2" 17 | title: "Spécifications" 18 | - id: "tabs-with-card-item-3" 19 | dataTab: "#tabs-with-card-3" 20 | title: "Plans" 21 | longDescription: 22 | title: "Solutions Polyvalentes de Fixation" 23 | subTitle: | 24 | L'ensemble de vis assorties SF-AB A765 offre une polyvalence et une commodité inégalées, ce qui en fait le choix idéal pour les amateurs de bricolage et les professionnels. Avec une sélection complète de vis, vous aurez toujours le bon élément de fixation pour chaque tâche. 25 | btnTitle: "Contactez les ventes pour en savoir plus" 26 | btnURL: "#" 27 | descriptionList: 28 | - title: "Grande Variété" 29 | subTitle: "Comprend une gamme diversifiée de types et de tailles de vis pour s'adapter à diverses applications et matériaux." 30 | - title: "Facilité d'Utilisation" 31 | subTitle: "Chaque vis est conçue pour une installation facile, garantissant une fixation sans tracas à chaque fois." 32 | - title: "Commodité" 33 | subTitle: "Élimine le besoin de multiples déplacements au magasin de bricolage, économisant temps et effort sur vos projets." 34 | specificationsLeft: 35 | - title: "Matériau" 36 | subTitle: "Fabriqué à partir de matériaux de haute qualité tels que l'acier inoxydable, assurant durabilité et résistance à la corrosion." 37 | - title: "Assortiment" 38 | subTitle: "Contient un assortiment généreux de vis, incluant des vis à bois, des vis mécaniques, et des vis pour tôle." 39 | - title: "Quantité" 40 | subTitle: "Chaque set comprend une quantité suffisante de vis pour gérer une large gamme de projets et de tâches." 41 | - title: "Tailles" 42 | subTitle: "Disponible en différentes tailles pour s'adapter aux exigences de divers projets, assurant compatibilité et polyvalence." 43 | tableData: 44 | - feature: ["Spécification", "Valeur"] 45 | description: 46 | - ["Longueur (mm)", "Divers"] 47 | - ["Poids (g)", "N/A"] 48 | - ["Matériau", "Acier Inoxydable"] 49 | - ["Finition", "Assortie"] 50 | - ["Contenu du Pack", "Diverses vis dans un ensemble"] 51 | blueprints: 52 | first: "@/images/blueprint-1.avif" 53 | second: "@/images/blueprint-2.avif" 54 | --- 55 | -------------------------------------------------------------------------------- /src/content.config.ts: -------------------------------------------------------------------------------- 1 | // https://docs.astro.build/en/guides/content-collections/#defining-collections 2 | 3 | import { z, defineCollection } from 'astro:content'; 4 | import { docsSchema } from '@astrojs/starlight/schema'; 5 | import { glob } from 'astro/loaders'; 6 | 7 | const productsCollection = defineCollection({ 8 | loader: glob({ pattern: '**/[^_]*.{md,mdx}', base: "./src/content/products" }), 9 | schema: ({ image }) => z.object({ 10 | title: z.string(), 11 | description: z.string(), 12 | main: z.object({ 13 | id: z.number(), 14 | content: z.string(), 15 | imgCard: image(), 16 | imgMain: image(), 17 | imgAlt: z.string(), 18 | }), 19 | tabs: z.array( 20 | z.object({ 21 | id: z.string(), 22 | dataTab: z.string(), 23 | title: z.string(), 24 | }) 25 | ), 26 | longDescription: z.object({ 27 | title: z.string(), 28 | subTitle: z.string(), 29 | btnTitle: z.string(), 30 | btnURL: z.string(), 31 | }), 32 | descriptionList: z.array( 33 | z.object({ 34 | title: z.string(), 35 | subTitle: z.string(), 36 | }) 37 | ), 38 | specificationsLeft: z.array( 39 | z.object({ 40 | title: z.string(), 41 | subTitle: z.string(), 42 | }) 43 | ), 44 | specificationsRight: z.array( 45 | z.object({ 46 | title: z.string(), 47 | subTitle: z.string(), 48 | }) 49 | ).optional(), 50 | tableData: z.array( 51 | z.object({ 52 | feature: z.array(z.string()), 53 | description: z.array(z.array(z.string())), 54 | }) 55 | ).optional(), 56 | blueprints: z.object({ 57 | first: image().optional(), 58 | second: image().optional(), 59 | }), 60 | }), 61 | }); 62 | 63 | const blogCollection = defineCollection({ 64 | loader: glob({ pattern: '**/[^_]*.{md,mdx}', base: "./src/content/blog" }), 65 | schema: ({ image }) => z.object ({ 66 | title: z.string(), 67 | description: z.string(), 68 | contents: z.array(z.string()), 69 | author: z.string(), 70 | role: z.string().optional(), 71 | authorImage: image(), 72 | authorImageAlt: z.string(), 73 | pubDate: z.date(), 74 | cardImage: image(), 75 | cardImageAlt: z.string(), 76 | readTime: z.number(), 77 | tags: z.array(z.string()).optional(), 78 | }), 79 | }); 80 | 81 | const insightsCollection = defineCollection({ 82 | loader: glob({ pattern: '**/[^_]*.{md,mdx}', base: "./src/content/insights" }), 83 | schema: ({ image }) => z.object ({ 84 | title: z.string(), 85 | description: z.string(), 86 | // contents: z.array(z.string()), 87 | cardImage: image(), 88 | cardImageAlt: z.string(), 89 | }), 90 | }); 91 | 92 | export const collections = { 93 | docs: defineCollection({ schema: docsSchema() }), 94 | 'products': productsCollection, 95 | 'blog': blogCollection, 96 | 'insights': insightsCollection, 97 | }; -------------------------------------------------------------------------------- /src/components/ui/cards/CardBlog.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import necessary components and utilities 3 | import AvatarBlog from "@components/ui/avatars/AvatarBlog.astro"; 4 | import { Image } from "astro:assets"; 5 | import { formatDate } from "@utils/utils"; 6 | import type { CollectionEntry } from "astro:content"; 7 | 8 | const { blogEntry, blogLocale = "" } = Astro.props; 9 | 10 | interface Props { 11 | blogEntry: CollectionEntry<"blog">; 12 | blogLocale?: string; 13 | } 14 | --- 15 | 16 | 20 | 27 | 28 |
    31 | {blogEntry.data.cardImageAlt} 39 |
    40 | 41 |
    42 |
    43 |
    44 | 45 | 46 |
    47 |

    48 | {blogEntry.data.author} 49 |

    50 |

    51 | {formatDate(blogEntry.data.pubDate)} 52 |

    53 |
    54 |
    55 |
    56 |
    57 | 58 |
    59 |
    60 |

    63 | {blogEntry.data.title} 64 |

    65 |

    66 | {blogEntry.data.description} 67 |

    68 |
    69 |
    70 |
    71 | -------------------------------------------------------------------------------- /src/components/ui/cards/CardBlogRecent.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import all required components and utilities 3 | import { Image } from "astro:assets"; 4 | import type { CollectionEntry } from "astro:content"; 5 | import AvatarBlogLarge from "@components/ui/avatars/AvatarBlogLarge.astro"; 6 | import PrimaryCTA from "@components/ui/buttons/PrimaryCTA.astro"; 7 | 8 | const { blogEntry, recentBlogLocale = "" } = Astro.props; 9 | 10 | interface Props { 11 | blogEntry: CollectionEntry<"blog">; 12 | recentBlogLocale?: string; 13 | } 14 | --- 15 | 16 | 17 |
    18 | 19 |
    20 |
    21 | {blogEntry.data.cardImageAlt} 29 |
    30 |
    31 | 32 |
    33 | 34 |

    37 | 41 | {blogEntry.data.description} 42 | 43 |

    44 | 45 |
    46 | 47 | 48 |
    49 |

    50 | {blogEntry.data.author} 51 |

    52 |

    53 | {blogEntry.data.role} 54 |

    55 |
    56 |
    57 | 58 |
    59 | 64 |
    65 |
    66 |
    67 | -------------------------------------------------------------------------------- /src/components/ui/forms/RecoverModal.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import necessary components from individual files 3 | import EmailInput from "./input/EmailInput.astro"; 4 | import AuthBtn from "@components/ui/buttons/AuthBtn.astro"; 5 | 6 | // Config object for customization of the component 7 | const config = { 8 | id: "hs-toggle-between-modals-recover-modal", // Modal identifier 9 | title: "Forgot password?", // Main heading 10 | subTitle: "Remember your password?", // Sub-heading text 11 | loginBtn: "Sign in here", // Text for login button 12 | loginBtnDataHS: "#hs-toggle-between-modals-login-modal", // Target link for login button 13 | }; 14 | --- 15 | 16 | 17 | 68 | -------------------------------------------------------------------------------- /src/components/sections/landing/HeroSection.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Import the necessary dependencies 3 | import { Image } from "astro:assets"; 4 | import PrimaryCTA from "@components/ui/buttons/PrimaryCTA.astro"; 5 | import SecondaryCTA from "@components/ui/buttons/SecondaryCTA.astro"; 6 | import ReviewComponent from "@components/ui/blocks/ReviewComponent.astro"; 7 | 8 | // Define props from Astro 9 | const { 10 | title, 11 | subTitle, 12 | primaryBtn, 13 | primaryBtnURL, 14 | secondaryBtn, 15 | secondaryBtnURL, 16 | withReview, 17 | avatars, 18 | starCount, 19 | rating, 20 | reviews, 21 | src, 22 | alt 23 | } = Astro.props; 24 | 25 | // Define TypeScript interface for props 26 | interface Props { 27 | title: string; 28 | subTitle?: string; 29 | primaryBtn?: string; 30 | primaryBtnURL?: string; 31 | secondaryBtn?: string; 32 | secondaryBtnURL?: string; 33 | withReview?: boolean; 34 | avatars?: Array; 35 | starCount?: number; 36 | rating?: string; 37 | reviews?: string; 38 | src?: any; 39 | alt?: string; 40 | } 41 | --- 42 | 43 | 44 |
    47 | 48 |
    49 | 50 |

    53 | 54 | 55 |

    56 | {subTitle && 57 |

    60 | {subTitle} 61 |

    62 | } 63 | 64 |
    65 | {primaryBtn && 66 | 67 | } 68 | {secondaryBtn && 69 | 70 | } 71 |
    72 | 73 | 74 | { withReview ? ( 75 | 76 | ) : "" } 77 | 78 |
    79 | 80 |
    81 |
    82 | {src && alt && 83 | {alt} 91 | } 92 |
    93 |
    94 |
    95 | --------------------------------------------------------------------------------