尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 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.