Graphic for headless CMS with headless e-commerce

3 August 2023

Headless E-Commerce Guide: caisy and Saleor

Hassan, Frontend Developer

Blazing fast, high-performing headless E-Commerce with caisy and Saleor

In this era of rapid technological evolution, understanding the challenges at hand and the anticipated outcomes is key in building a robust platform. This blog post delves into the integration of Saleor - an advanced open-source e-commerce platform, into a website leveraging the capabilities of the headless CMS caisy.

Saleor - Setting the Pace for Modern E-commerce

Saleor, a product of Python and Django, uses GraphQL for communication. This feature-rich platform includes advanced product management, efficient order processing, seamless payment gateway integration, and streamlined inventory control.

caisy - Redefining Content Management with Unparalleled Flexibility

The headless architecture of caisy decouples content management from presentation, offering an unparalleled level of customization and enabling dynamic user experiences aligned with your brand.

Fast-track Customization with caisy:

caisy allows a wide range of customizations. You can create a model called 'Page' to structure your website pages, link a different type of blueprint to this 'Page' model called 'components', and add any data to it. This process facilitates content building across all pages. Moreover, sharing data from caisy and Saleor to the same page using the same page slug is effortless.

caisy_page_sample

SEO-friendly Approach with caisy:

Boost your search engine visibility, drive conversions, and improve organic traffic with caisy's SEO-friendly features. These include URL optimization, seamless schema markup integration, and effective metadata management.

Prerequisites for Integration

To integrate Saleor with caisy successfully, ensure you meet the following requirements:

  • Data synchronization

  • User authentication

  • Product information mapping

  • Payment gateway integration

saleor_api_sample

Saleor's API makes it easy to build a cart, checkout process, and manage payments. In combination with caisy's content fetching capabilities, building the page and functionality is incredibly simple. Example:

const updateCartItem = async (productVariantId, productQuantity) => {
  if(productVariantId, productQuantity){
    const cartUpdateResponse - await updateCartItemMutation({
      variables:{ cartId, productVariantId, productQuantity }
    });
  }
}

Key Aspects of Integration

Consider the following aspects during the integration process:

  • Scalability: Evaluate the scalability options offered by both caisy and Saleor to accommodate increasing traffic and future growth.

  • Customization: Assess the customization capabilities of both platforms to align your e-commerce website precisely with your brand identity.

  • SEO Considerations: Ensure proper handling of SEO requirements, leveraging the features provided by caisy and optimizing content for search engines.

Implementation

Implementing caisy is a breeze. Start by outlining your project structure (pages, unique documents like headers and footers), then save crucial project information such as Project ID and API Key for later. We recommend saving these as environment variables from the start:

CAISY_PROJECT_ID=xxxx-xxxx-xxxx-xxxx-xxxx
CAISY_API_KEY=xxx 

Using unique documents boosts performance as they don’t duplicate. You save on fetching the same data from multiple sources, which cuts down unnecessary requests. Data only exists and is fetched once, shared across the entire platform.


Lets start by creating a simple Footer Blueprint that has a string field for the title.

footer_caisy_create

After populating it with test data, start with a simple test component within the Page model. Now, you're ready to build your GraphQL queries:

export const q_footer = gql`
  query q_footer {
    Footer {
      id
      title
    }
  }
`;

Then, set up a client with the saved caisy project information:

import { GraphQLClient } from "graphql-request";

const client = new GraphQLClient(
    `https://cloud.caisy.io/api/e/v4/${CAISY_PROJECT_ID}/graphql`,
    {
      headers: {
        "x-caisy-apikey": `${CAISY_API_KEY}`,
      },
    }
);

Saleor's built-in environment manages the entire authentication flow, making it simple to generate JWT Tokens, refresh them on expiry, logout, and edit user info using these tokens.

saleor_jwt

Frequently Asked Questions

How to create a dynamic page using caisy?

caisy offers immense customization, enabling you to build any structure for your platform. You can create a model called 'Page', provide it with a slug, and add data using different types of blueprints known as 'Components'. Fetch this content with the slug to render it on your website.

In order for the your queries to return any data, we need to fill the model with data first.

Then, we fetch this content with our provided slug and render it on the website:

query q_page($locale: String!, $slug: String) {
    allPage(locale: $locale, where: { slug: { eq: $slug } }) {
      edges {
        node {
          ...Page
        }
      }
    }
}

What APIs or webhooks are available for seamless integration?

Caisy's built-in tool UI Extension allows you to integrate external extensions, ensuring flexible data flow between any e-commerce platform and caisy.

Can caisy handle multiple languages and translations for content and product data?

Yes, indeed. To localize documents in caisy, make sure you've created multiple locales for your project. Navigate to your project settings, go to Development -> Locales, and note the API identifier of the locale for use in GraphQL queries. For each desired language, create a new locale and use it in your query:

After creating a new locale with the API identifier 'es' for Spanish for example, your locales screen should look something like this:

{
  MainNavigation(locale: "es"){
    title
  }
}

To use the newly created locale 'es' in your query, add an argument to each blueprint object and all blueprint objects to define the desired locale for the query.

{
  MainNavigation(locale: "es"){
    title
    links(locale: "es"){
      ... on Page {
        title
        slug
        id
      }
    }
  }
}

This approach lets you specify for each level whether linked documents should be translated and into which language. If you have a larger query with the same locale or want to pass it dynamically, something like the following can be useful:

query MainNavigation($locale: String) {
  MainNavigation(locale: $locale) {
    title
    links(locale: $locale) {
      ... on Page {
        title
        slug
        id
      }
    }
  }
}

In Closing

Harnessing the power of caisy and Saleor together delivers an unbeatable combination for headless e-commerce solutions. Their unmatched speed, superior flexibility, and wide-ranging capabilities allow you to drive efficient workflows, regardless of the project size or complexity. The vast array of features including the robust GraphQL API, multi-tenancy, digital asset management, and more, ensure your needs are met at every turn. Capitalize on these advanced technologies to stay ahead of the curve, saving valuable time while creating high-performing, seamless e-commerce platforms. Test the potential of caisy today, and witness firsthand how it revolutionizes your e-commerce journey.

Focus on Your Code
Let caisy Handle the Content.