Vibe Coding: ideas → live in hours

Try bold storefront concepts or launch campaign sites without rewiring your stack. With Geins, you compose a new experience from Cart, Promotions, Content and the SDK—then deploy fast on our cloud‑native platform.

    Prototype at lightspeed
    Start with the SDK and drop‑in Checkout. Bring your own UI and ship something real the same day.
    On‑brand by default
    Tokens and flexible slots let you match your visual language in minutes—not weeks.
    Campaign‑ready
    Run limited‑time offers, bundles and influencer drops using Promotions—clean stacking and rounding included.
    Market aware
    Localized prices, taxes and languages out of the box. Launch for one market, scale to many.
    Cloud‑native scale
    Built on Geins’ resilient platform—autoscaling and always on, so experiments never miss a beat.
    Open and extensible
    Use the open SDK, extend GraphQL operations and connect your favorite services without lock‑in.

Spin up a campaign site this afternoon

Pick a product set, attach content blocks, hook a promotion and publish. Geins handles Cart, totals, taxes and emails so your team focuses on the story and the visuals.

    Curate fast
    Build collections with tags or queries. Schedule content in advance.
    Attach promotions
    Percent, fixed, bundles, thresholds—eligibility and stacking are taken care of.
    Out‑of‑the‑box ops
    Taxes, confirmations and capture flows are consistent with your main store.

Why Vibe Coding works on Geins

Compose with Geins building blocks and deploy anywhere. Keep what performs, iterate on the rest.

    Products & inventory
    Real‑time stock, variants and media tags to tailor the experience.
    Headless content
    Compose pages from reusable blocks with scheduling and personalization.
    Cart & Checkout
    Ready‑made flows you can drop in or customize with the SDK.
    Auth & segmentation
    Show different content and offers to different audiences or loyalty tiers.

Try our Battle Tested prompts to get you started

Steal our go‑to starters for fast experiments—flash sales, bundles, drops and market‑specific launches. Each prompt is tuned for Geins SDK, Cart and Promotions so you can scaffold pages, rules and content in minutes.

bolt.new.md

  Generate a fully-featured e-commerce landing page using React, TypeScript, and Tailwind CSS. The page should showcase a single product fetched from the Geins API and allow users to purchase the product via a Geins-powered checkout.

    ## Specifications:
    - Image gallery showing different images of the product
    - Specification section that is well-structured and easy to read and always visible
    - Price and a USP 
    - A clear Call to Action button that will send user to an external checkout page

    ## Special Instructions:
    1.  **Design Aesthetic:** The landing page should have a beautiful, unique, and production-ready design. Avoid cookie-cutter templates.
    2.  **UI Library:** Utilize the `shadcn/ui` library for UI components. Do not install other UI theme packages unless explicitly requested.
    3.  **Iconography:** Use icons from `lucide-react` for visual elements, including logos.
    4.  **Images:** Use stock photos from Unsplash where appropriate, ensuring the URLs are valid and reliable.
    5.  **Geins Integration:**
        *   Use the `@geins/core` and `@geins/oms` packages for interacting with the Geins API, version 0.5.
        *   Fetch product data using the following gql `PRODUCT_QUERY` GraphQL query:

            ```typescript
            import { gql } from '@geins/core';
            export const PRODUCT_QUERY = gql`
                query product($productId: Int!, $channelId: String, $languageId: String, $marketId: String) {
                product(productId: $productId, channelId: $channelId, languageId: $languageId, marketId: $marketId) {
                    name
                    brand {
                    name
                    }
                    productImages {
                    fileName
                    }
                    primaryCategory {
                    name
                    }
                    categories {
                    name
                    }
                    unitPrice {
                    sellingPriceIncVatFormatted
                    }
                    texts {
                    text1
                    }
                    parameterGroups {
                    name
                    parameterGroupId
                    parameters {
                        name
                        value
                        show
                        identifier
                    }
                    }
                    skus {
                    skuId
                    }
                }
                }
            `;
        ```

            The product ID should be configurable via the `VITE_GEINS_PRODUCT_ID` environment variable.
        *   Implement a "Buy Now" button that adds the product to the Geins cart and redirects the user to the Geins checkout.
        *   Generate a checkout token using `geinsOMS.createCheckoutToken`.
        *   Use `window.location.assign(checkoutUrl)` for redirection after generating the checkout token.
    6.  **Environment Variables:**
        *   Configure the Geins API key, account name, channel, TLD, locale, market, and environment using environment variables (e.g., `VITE_GEINS_API_KEY`, `VITE_GEINS_ACCOUNT_NAME`, etc.).
        *   Define the product image URL using the `VITE_GEINS_IMAGE_URL` environment variable.
        *   Define the checkout title and logo URL using the `VITE_CHECKOUT_TITLE` and `VITE_CHECKOUT_LOGO` environment variables, respectively. The logo URL should be a direct link to the image.
    7.  **Data Handling:**
        *   Sanitize HTML content from product name, texts, and parameter values using the `stripHtml` utility function to prevent XSS vulnerabilities.
    8.  **Error Handling:**
        *   Display user-friendly error messages using the `sonner` library for toast notifications.
        *   Implement loading states to indicate when data is being fetched or processed.
    9.  **Product Display:**
        *   Showcase the product name, brand, price, and a brief description.
        *   Include a product gallery with multiple images.  The images should use the `VITE_GEINS_IMAGE_URL` to construct the image URLs.
        *   Display product specifications and key features in a structured format.
    10. **Styling:**
        *   Use Tailwind CSS for styling.
        *   Ensure the page is responsive and visually appealing on different screen sizes.
        *   Implement a dark mode toggle using `next-themes`.
    11. **Logo URL:**
        *   In `src/App.tsx`, the `checkoutTokenOptions` should use the `VITE_CHECKOUT_LOGO` environment variable directly as the logo URL, without prepending `window.location.origin`.


    ## Code Structure:
    *   Use a modular file structure with components organized in the `src/components` directory.
    *   Implement Geins API interactions in `src/lib/geins.ts`.
    *   Define GraphQL queries in `src/lib/queries.ts`.
    *   Create utility functions in `src/lib/utils.ts`.
    *   Configure the Vite build process in `vite.config.ts`.

    Ensure the generated code adheres to best practices for React development, including proper state management, component composition, and error handling. The final result should be a polished and functional e-commerce landing page ready for deployment.


    ## Geins SDK Specifics

    To redirect user to the external checkout the product needs to be added to a cart in Geins:

    **Required packages:**
    - @geins/core
    - @geins/oms

    **Documentation:**
    - Adding items to cart: http://sdk.geins.dev/packages/oms/cart/items.html#adding-items
    - Generate checkout token: https://sdk.geins.dev/guide/examples/generate-checkout-token.html

    **Geins settings:**

    The settings are passed to GeinsCore like this:


    ```typescript
    import { GeinsCore } from '@geins/core';
    const geinsSettings = {
    apiKey: 'your-api-key',
    accountName: 'your-account-name',
    channel: 'your-channel-id',
    tld: 'your-tld',
    locale: 'your-locale',
    market: 'your-market',
    };
    const geinsCore = new GeinsCore(geinsSettings);
    ```

    To use the Geins OMS package, you need to import it and create an instance of GeinsOMS with the geinsCore instance:

    ```typescript
    import { GeinsCore } from '@geins/core';
    import { GeinsOMS } from '@geins/oms';

    const geinsCore = new GeinsCore(geinsSettings);
    const geinsOMS = new GeinsOMS(geinsCore);
    await geinsOMS.cart.items.add({ skuId: SKU_FROM_PRODUCT_DATA });
    ```

    **This is how you send a user to the external checkout:**

    ```typescript
    // Add item to cart using GeinsOMS
    const cart = await geinsOMS.cart.items.add({
    skuId: product.skus[0].skuId
    });

    // Setup checkout token options
    const checkoutTokenOptions = {
    cartId: cart.id,
    selectedPaymentMethodId: 23,
    selectedShippingMethodId: 1,
    branding: {
        title: import.meta.env.VITE_CHECKOUT_TITLE,
        logo: import.meta.env.VITE_CHECKOUT_LOGO,
        styles: {
        logoSize: '2.5rem',
        radius: '5px',
        accent: '#646cff',
        accentForeground: '#ffffff',
        },
    },
    };

    // Generate checkout token
    const token = await geinsOMS.createCheckoutToken(checkoutTokenOptions);
    // Compile URL for external checkout
    const redirectUrl = `${import.meta.env.VITE_CHECKOUT_URL}/${token}`;
    ```



    ## Environment Variables

    Add these to your `.env` file:

    ```env
    VITE_GEINS_API_KEY=your-api-key
    VITE_GEINS_ACCOUNT_NAME=your-account-name
    VITE_GEINS_CHANNEL=your-channel-id
    VITE_GEINS_TLD=your-tld
    VITE_GEINS_LOCALE=your-locale
    VITE_GEINS_MARKET=your-market
    VITE_GEINS_ENVIRONMENT=production
    VITE_GEINS_PRODUCT_ID=your-product-id
    VITE_GEINS_IMAGE_URL=your-image-base-url
    VITE_CHECKOUT_TITLE=Your Store Name
    VITE_CHECKOUT_LOGO=your-logo-url
    VITE_CHECKOUT_URL=your-checkout-url
    ```

    **Important:** Add this file at the end of project creation and ask me for the values.

    ## Super Important

    Make sure `@geins/core` and `@geins/oms` are in package.json and installed:

    ```bash
    npm install @geins/core @geins/oms
    ```

    **Creating Geins Clients:**

    ```typescript
    // Geins Core Client
    const geinsCore = new GeinsCore(geinsSettings);
    ```
    Reference: https://sdk.geins.dev/packages/core/

    ```typescript
    // Geins OMS Client
    const geinsOMS = new GeinsOMS(geinsCore);
    ```
    Reference: https://sdk.geins.dev/packages/oms/

    **Using the GraphQL client:**

    ```typescript
    const variables = {
        productId: Number(import.meta.env.VITE_GEINS_PRODUCT_ID)
    };

    const data = await geinsCore.graphql.query({
        query: PRODUCT_QUERY,
        variables,
    });
    ```

    **IMPORTANT:** Don't destructure the return value like this:

    ```typescript
    // ❌ This will throw an error
    const { data } = await geinsCore.graphql.query({
        query: PRODUCT_QUERY,
        variables,
    });
    ```

    The return of data is not destructible, it will throw an error.
    Reference: https://sdk.geins.dev/packages/core/graphql-client.html
    ```

Start vibing on new ideas today

From micro‑sites to seasonal drops, Geins lets you test, learn and scale—without slowing your main roadmap.