ProductQualitySection

apps/www/src/components/ProductQualitySection.astro · 109 lines · group Features & lists

Used by

Live sites: codeexpert.se.

Samples 1

codeexpert.se/

How do we ensure product quality?

Quality comes from proper processes

  • We do WELL-DESIGNED software ARCHITECTURE that ensures the scalability, maintainability, and longevity of the product
  • We hold ARCHITECTURE MEETINGS where the team finds optimal architectural solutions
  • We use coding STANDARDS: a codebase is self-documented, easy to learn and navigate
  • We provide WELL-DOCUMENTED software
  • We use almost all types of QA TESTING, both functional and non-functional
  • CONTINUOUS INTEGRATION AND DELIVERY (CI/CD) is always used without exception

We work according to our own unique software development process: the whole process is divided into two parallel streams that run simultaneously: DEVELOPMENT in the current sprint and ANALYSIS for the next sprint. This approach is based on Kanban methodology, but with some differences, and provides psychological comfort to the developers.

David HamrenCEO at Code Expert
MDX of this sample
<ProductQualitySection
  title="How do we ensure product quality?"
  description=""
  firstBtnTitle="Contact us"
  firstBtnUrl="/#contacts"
>
  <Fragment slot="article">
    ## Quality comes from proper processes

    * We do WELL-DESIGNED software ARCHITECTURE that ensures the scalability, maintainability, and longevity of the product
    * We hold ARCHITECTURE MEETINGS where the team finds optimal architectural solutions
    * We use coding STANDARDS: a codebase is self-documented, easy to learn and navigate
    * We provide WELL-DOCUMENTED software
    * We use almost all types of QA TESTING, both functional and non-functional
    * CONTINUOUS INTEGRATION AND DELIVERY (CI/CD) is always used without exception
  </Fragment>
  <Blockquote
    logoImageName="codeexpertGREY.png"
    text="We work according to our own unique software development process: the whole process is divided into two parallel streams that run simultaneously: DEVELOPMENT in the current sprint and ANALYSIS for the next sprint. This approach is based on Kanban methodology, but with some differences, and provides psychological comfort to the developers."
    avatarImageName="david.jpg"
    name="David Hamren"
    role="CEO at Code Expert"
  />
</ProductQualitySection>

Props

NameTypeRequiredDefaultDescription
titlestringyes
descriptionstringyes
articleTitlestring
articleUrlstring
firstBtnTitlestring
firstBtnUrlstring
secondBtnTitlestring
secondBtnUrlstring

Source apps/www/src/components/ProductQualitySection.astro @ gitt.one

---
interface Props {
  title: string;
  description: string;
  articleTitle?: string;
  articleUrl?: string;
  firstBtnTitle?: string;
  firstBtnUrl?: string;
  secondBtnTitle?: string;
  secondBtnUrl?: string;
}

const {
  title,
  description,
  articleTitle,
  articleUrl,
  firstBtnTitle,
  firstBtnUrl,
  secondBtnTitle,
  secondBtnUrl,
} = Astro.props;
---

<div class="py-12 bg-gray-50 overflow-hidden">
  <div class="max-w-7xl mx-auto px-4 space-y-8 sm:px-6 lg:px-8">
    <div class="text-base max-w-prose mx-auto lg:max-w-none">
      <h2 class="text-3xl text-center leading-8 font-extrabold tracking-tight text-gray-900 sm:text-4xl">
        {title}
      </h2>
    </div>
    <div class="relative z-10 text-base max-w-prose mx-auto lg:max-w-5xl lg:mx-0 lg:pr-72">
      <p class="text-lg text-center lg:text-left text-gray-500">
        {description}
      </p>
    </div>
    <div class="lg:grid lg:grid-cols-2 lg:gap-8 lg:items-start">
      <div class="relative z-10 mx-auto lg:max-w-none">
        <div
          class="prose prose-gray max-w-none [&_h2]:text-center [&_h2_a]:no-underline [&_h3]:text-center [&_h3_a]:no-underline"
        >
          <slot name="article">
            {
              articleTitle && articleUrl && (
                <p>
                  <a href={articleUrl} class="text-primary-700 hover:text-primary-800">
                    {articleTitle}
                  </a>
                </p>
              )
            }
          </slot>
        </div>
        <div class="mx-auto mt-8 flex justify-center text-base lg:max-w-none">
          {
            firstBtnTitle && (
              <div class="rounded-md shadow">
                <a
                  href={firstBtnUrl}
                  class="flex w-full items-center justify-center rounded-md border border-transparent bg-primary-700 px-5 py-3 text-base font-medium text-white no-underline hover:bg-primary-800"
                >
                  {firstBtnTitle}
                </a>
              </div>
            )
          }
          {
            secondBtnTitle && (
              <div class="ml-4 rounded-md shadow">
                <a
                  href={secondBtnUrl}
                  class="flex w-full items-center justify-center rounded-md border border-transparent bg-white px-5 py-3 text-base font-medium text-primary-700 no-underline hover:bg-gray-50"
                >
                  {secondBtnTitle}
                </a>
              </div>
            )
          }
        </div>
      </div>
      <div class="mt-12 relative text-base max-w-prose mx-auto lg:mt-0 lg:max-w-none">
        <svg
          class="absolute top-0 right-0 -mt-20 -mr-20 lg:top-auto lg:right-auto lg:bottom-1/2 lg:left-1/2 lg:mt-0 lg:mr-0 xl:top-0 xl:right-0 xl:-mt-20 xl:-mr-20"
          width="404"
          height="384"
          fill="none"
          viewBox="0 0 404 384"
          aria-hidden="true"
        >
          <defs>
            <pattern
              id="product-quality-dots"
              x="0"
              y="0"
              width="20"
              height="20"
              patternUnits="userSpaceOnUse"
            >
              <rect x="0" y="0" width="4" height="4" class="text-gray-200" fill="currentColor"></rect>
            </pattern>
          </defs>
          <rect width="404" height="384" fill="url(#product-quality-dots)"></rect>
        </svg>
        <slot />
      </div>
    </div>
  </div>
</div>

Source links point to engine-astro@e857a859. Samples are cut from the sites' own content by scripts/gallery-extract.mjs; nothing is merged or removed yet.