All modules

Customer records for custom sites.

Keep visitor, buyer, lead, and client data in one Customer record so custom frontends retain useful context.

Best for

  • client portals
  • member sites
  • lead databases
  • customer history

Use it when the site needs memory: carts, conversations, form submissions, bookings, memberships, and admin notes.

What this module gives your project.

Customers

Use this capability from your custom frontend while the operational side stays manageable in Arky admin.

Sign-in codes

Use this capability from your custom frontend while the operational side stays manageable in Arky admin.

Actions

Use this capability from your custom frontend while the operational side stays manageable in Arky admin.

Customer groups

Use this capability from your custom frontend while the operational side stays manageable in Arky admin.

Admin notes

Use this capability from your custom frontend while the operational side stays manageable in Arky admin.

Custom UX with backend state managed in Arky.

  • Visitor and signed-in sessions
  • Email sign-in and email-change codes
  • Action tracking
  • The customer's own profile and addresses

A client-facing back office for the same module.

  • Customer timelines
  • Customer groups and their members
  • Conversation context
  • Email suppressions

Code the frontend. Connect Arky as the backend.

Start with the frontend stack the project deserves, then connect only the Arky modules it needs. The Admin, API, SDK, and store email stay behind the custom experience.

  1. Identify the visitor
  2. Confirm their email with a sign-in code
  3. Track important site actions
import { createOrderToken, initialize } from "arky-sdk/storefront";

const arky = initialize("arky_pk_...", {
  locale: "en",
  createVisitorIdentity: () => ({
    customer_id: crypto.randomUUID(),
    session_id: crypto.randomUUID(),
  }),
  createSessionId: () => crypto.randomUUID(),
  createId: () => crypto.randomUUID(),
  createOrderToken,
});

const website = await arky.content.load({ collection: { key: "website" } });
const {
  items: [catalog],
} = await arky.eshop.catalog.find();
const cart = arky.eshop.cart({ buyer: { type: "customer" }, catalog_id: catalog.id });
const current = await cart.ensure();
const services = await arky.eshop.bookingService.find({
  catalog_id: catalog.id,
  limit: 6,
});

await arky.actions.track({
  key: "website_action",
  data: {
    page: website.record.id,
    cart: current.id,
    services: services.items.length,
  },
});

Useful API touchpoints.

  • POST /v1/storefront/customer/identify
  • POST /v1/storefront/customer/request-code
  • POST /v1/storefront/customer/verify
Start free

Early access for custom frontend teams.