Catálogo, inventario y pagos en línea, vendas ropa, café o libros. 14 días gratis, sin comisión por venta.
Translation pending
CommerceSvelte · TypeScriptGitHub @kevin-martinezeOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
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.Read the full 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.