Communitygithub.com

E-Commerce (YepAPI/skills)

Gerenciamento de carrinho com Zustand + persistência, variantes de produto, checkout Stripe, controle de estoque e ciclo de vida de pedidos.

O que é skills)?

Este skill fornece um conjunto de regras, padrões e práticas para construir uma funcionalidade completa de e-commerce. Ele abrange desde o estado do carrinho, usando Zustand com persistência em localStorage para resistir a recarregamentos e fechamentos de aba, até o gerenciamento de variantes de produto como SKUs independentes com preço, estoque e imagem próprios. O checkout é realizado exclusivamente no servidor com Stripe Checkout Sessions, garantindo que os preços nunca sejam enviados do cliente. O estoque é verificado no servidor antes da criação da sessão de checkout, com proteção contra condições de corrida usando transações de banco de dados, e o ciclo de vida do pedido (pending → paid → shipped → delivered) é atualizado via webhooks, não por ações do cliente. As práticas incluem também filtragem, ordenação e paginação no servidor para listagens de produtos, armazenamento de preços em centavos (inteiros) e validação de estoque a cada ação no carrinho.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/YepAPI/skills/tree/HEAD/skills/e-commerce

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

E-Commerce

Regras

  • Estado do carrinho: store Zustand com persistência em localStorage — sobrevive a recarregamentos de página e fechamento de aba
  • Variantes de produto: modelar como SKUs separados com produto pai compartilhado — cada variante tem seu próprio preço, estoque, imagem
  • Checkout: Stripe Checkout Sessions (lado do servidor) — nunca enviar preços do cliente
  • Estoque: verificar estoque no servidor antes de criar sessão de checkout — proteção contra condição de corrida com transações de banco de dados
  • Ciclo de vida do pedido: pending → paid → shipped → delivered — atualizar via eventos de webhook, não por ações do cliente
  • Listagem de produtos: filtragem/ordenação/paginação no servidor — parâmetros de URL para visualizações filtradas compartilháveis
  • Preços: armazenar em centavos (inteiros) — exibir com Intl.NumberFormat e código da moeda
  • Operações do carrinho: adicionar, remover, atualizar quantidade, limpar — validar estoque em toda ação do carrinho

Padrões

// Store de carrinho Zustand com persistência
import { create } from "zustand";
import { persist } from "zustand/middleware";

interface CartItem { productId: string; variantId: string; quantity: number; price: number; }
interface CartStore {
  items: CartItem[];
  addItem: (item: CartItem) => void;
  removeItem: (variantId: string) => void;
  updateQuantity: (variantId: string, quantity: number) => void;
  clear: () => void;
  total: () => number;
}

export const useCart = create<CartStore>()(
  persist(
    (set, get) => ({
      items: [],
      addItem: (item) => set((state) => {
        const existing = state.items.find((i) => i.variantId === item.variantId);
        if (existing) {
          return { items: state.items.map((i) =>
            i.variantId === item.variantId ? { ...i, quantity: i.quantity + item.quantity } : i
          )};
        }
        return { items: [...state.items, item] };
      }),
      removeItem: (variantId) => set((s) => ({ items: s.items.filter((i) => i.variantId !== variantId) })),
      updateQuantity: (variantId, quantity) => set((s) => ({
        items: quantity <= 0
          ? s.items.filter((i) => i.variantId !== variantId)
          : s.items.map((i) => (i.variantId === variantId ? { ...i, quantity } : i)),
      })),
      clear: () => set({ items: [] }),
      total: () => get().items.reduce((sum, i) => sum + i.price * i.quantity, 0),
    }),
    { name: "cart-storage" }
  )
);

Evitar

  • Enviar preços do cliente para criar checkout — sempre resolver preços no lado do servidor a partir do seu banco de dados
  • Armazenar carrinho apenas no estado React — usar Zustand persistido ou localStorage para que o carrinho sobreviva a recarregamentos
  • Deduzir estoque ao "adicionar ao carrinho" — reservar estoque apenas no checkout, liberar na expiração da sessão
  • Atualizar status do pedido a partir do cliente — usar webhooks do Stripe para checkout.session.completed
  • Ponto flutuante para dinheiro — armazenar como inteiros (centavos), formatar apenas para exibição

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

YepAPI/skills

WCAG 2.1 AA — semantic HTML, keyboard navigation, screen readers.

YepAPI/skills

Experiment setup, variant splitting, statistical significance, and feature flag integration.

YepAPI/skills

CRUD generators, data tables, user management, role-based access, and bulk operations.

YepAPI/skills

Monitor what ChatGPT and Gemini say about your brand using YepAPI.

YepAPI/skills

Queue workers with BullMQ/Inngest/Trigger.dev, job retries, dead letter queues, concurrency.

YepAPI/skills

Commander.js, interactive prompts with Clack, spinners, colors, config files, exit codes, and npm publishing.

YepAPI/skills

cmdk integration, Cmd+K trigger, fuzzy search, grouped actions, keyboard navigation, and dynamic action registration.

YepAPI/skills

Content planning with trend and sentiment data from YepAPI.

YepAPI/skills

Content calendar, keyword-driven planning, and content briefs.

YepAPI/skills

Theme switching with CSS variables, system preference detection, next-themes, and persistence.

YepAPI/skills

Threaded comments, @mentions, reactions, moderation queue, optimistic UI, and cursor pagination.

YepAPI/skills

Competitive analysis between domains using YepAPI.

YepAPI/skills

Layout grids, KPI cards, data tables with sorting/filtering, sidebar navigation, and responsive breakpoints.

YepAPI/skills

Data encryption — TLS everywhere, AES-256-GCM for PII, bcrypt passwords, encrypted backups.

YepAPI/skills

Chart patterns with Recharts/Nivo/D3, responsive containers, color scales, and accessibility.

YepAPI/skills

Drizzle schema definition, push vs migrate, type-safe queries, relations, transactions, and prepared statements.

YepAPI/skills

Upload handling, resize/compress, CDN delivery, blur placeholders, and next/image patterns.

YepAPI/skills

Local business and Google Maps research using YepAPI.

YepAPI/skills

Cursor-based pagination, IntersectionObserver, virtualized lists with @tanstack/react-virtual, and scroll position restoration.

YepAPI/skills

Chat UI components, streaming responses with AI SDK, context window management, and RAG patterns.

Habilidades Relacionadas