Saleor Store
우리 컬렉션을 쇼핑하세요
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Globerce — tiendas de ropa con checkout por WhatsApp Frontend de Globerce: el sitio que vende la plataforma, la tienda pública de cada clienta (una por subdominio), su panel de administración y la consola de la plataforma. Los cuatro salen del mismo despliegue y se reparten por host. No hay pagos online en la tienda: la clienta arma su carrito, el pedido se guarda en la API y se abre WhatsApp con el mensaje ya escrito para cerrar la venta por chat.README 전문 보기 ↗
Frontend de Globerce: el sitio que vende la plataforma, la tienda pública de cada clienta (una por subdominio), su panel de administración y la consola de la plataforma. Los cuatro salen del mismo despliegue y se reparten por host.
No hay pagos online en la tienda: la clienta arma su carrito, el pedido se guarda en la API y se abre WhatsApp con el mensaje ya escrito para cerrar la venta por chat.
Stack: SvelteKit 2 · Svelte 5 (runes) · TypeScript strict · Tailwind v4 ·
shadcn-svelte · API propia (ecommerce-api) · Cloudflare R2 · Vercel.
Los datos NO salen de Supabase: todo pasa por
ecommerce-api, que es quien habla con Postgres. Este repositorio no tiene acceso a la base. El porqué y el cómo del aislamiento entre tiendas están endocs/ARCHITECTURE.mdde ese repositorio; lo que falta, en sudocs/PENDIENTES.md.
pnpm install
Este frontend no arranca solo: necesita ecommerce-api corriendo (su README
explica cómo levantarla con Docker en un par de comandos). Por defecto escucha
en http://127.0.0.1:3000/v1.
cp .env.example .env
| Variable | Qué es |
|---|---|
API_URL | La API con su prefijo de versión. Solo se llama desde el servidor. |
API_SHARED_SECRET | El secreto que la API exige en producción (x-globerce-key). Vacío en desarrollo. |
SESSION_SECRET | Cifra la cookie del panel. Mínimo 32 caracteres; cambiarlo cierra todas las sesiones. |
PUBLIC_SITE_URL | URL pública, para los enlaces de WhatsApp y el sitemap. |
PUBLIC_STORE_ROOT_DOMAIN | Dominio de las tiendas: cada una es un subdominio suyo. |
PUBLIC_STORE_SLUG | Tienda que sirve el dominio raíz. Sin ella, el raíz muestra el sitio comercial. |
En local, boutique.localhost:5173 sirve la tienda boutique sin tocar
/etc/hosts.
pnpm dev
PUBLIC_STORE_SLUG está vacío)| Comando | Qué hace |
|---|---|
pnpm dev | Servidor de desarrollo |
pnpm build | Build de producción |
pnpm check | Tipos de TypeScript y Svelte |
pnpm lint | ESLint |
pnpm format | Prettier |
pnpm test | Tests unitarios (vitest) |
Los cinco deben pasar antes de mergear. Si un hook de pre-commit falla, arregla
la causa: nunca --no-verify.
El hook universal src/hooks.ts decide antes de enrutar:
| Host | Qué muestra |
|---|---|
globerce.store | El sitio que vende Globerce, y /registro |
boutique.globerce.store | La tienda de esa clienta |
cualquiera de los dos + /admin | El panel de la tienda del host |
.../plataforma | La consola de quien vende el software |
Los subdominios reservados (www, api, admin…) nunca son una tienda, y la
API tampoco deja registrarlos.
localStorage guarda solo variantId y
cantidad — nunca precios. Vive en src/lib/stores/cart.svelte.ts./carrito manda el carrito a la form action ?/preparar,
que recalcula precios y stock reales, valida el cupón y suma el envío.?/confirmar se lo pide a la API, que bloquea las
variantes, vuelve a verificar stock, recalcula todo desde la base, descuenta
inventario e inserta el pedido en una sola transacción./pedido/[number]?t=<token>, que arma el mensaje
y ofrece el botón para abrir el chat. El token del enlace permite compartir
el pedido sin exponer los demás.Los precios se recalculan siempre en el servidor: un carrito viejo nunca compra a precio viejo.
src/
├── lib/
│ ├── actions/ Acciones de Svelte (reveal al hacer scroll)
│ ├── components/
│ │ ├── ui/ Primitivas shadcn-svelte (no editar a mano)
│ │ ├── atoms/ Wrappers de marca — los únicos que se importan
│ │ ├── molecules/ Composiciones sin lógica de negocio
│ │ └── organisms/ Composiciones con stores y form actions
│ ├── domain/ Tipos y reglas del dominio, en snake_case
│ ├── schemas/ Validación zod, la misma en el navegador y el servidor
│ ├── server/ Todo lo que habla con la API, la sesión y el contexto
│ ├── stores/ Carrito y favoritos (runes + localStorage)
│ └── utils/ Funciones puras (dinero, WhatsApp, slugs, formularios)
└── routes/
├── (marketing)/ El sitio que vende Globerce
├── (shop)/ La tienda pública
├── (admin)/admin/ El panel (login fuera del guard, resto dentro)
└── (platform)/ La consola de la plataforma
src/app.css, bajo [data-storefront-template], y el catálogo en
src/lib/domain/templates.ts.adapter-vercel; en local, adapter-node,
porque el de Vercel crea symlinks y Windows los bloquea sin modo desarrollador..npmrc del proyecto apunta al registro público, para no
heredar el CodeArtifact privado configurado a nivel de usuario.