World Vibe Web
The distributed app store for vibe-coded projects. Browse, discover, and install open-source apps from across GitHub.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Carga de productos · Riegos del Sur Formulario web responsive para que la CM cargue productos (fotos, SKU, categoría, descripción, envío y variantes) y los publique directo en Tiendanube.查看完整 README ↗
Formulario web responsive para que la CM cargue productos (fotos, SKU, categoría, descripción, envío y variantes) y los publique directo en Tiendanube.
index.html formulario y lista de productos cargados
js/config.js ← lo único que hay que tocar (API_BASE, categorías, reglas de fotos)
js/app.js pantalla: formulario, validaciones, lista
js/tiendanube.js convierte lo cargado al formato de la API de Tiendanube
js/imagenes.js fotos: cuadradas con fondo blanco, JPG, cualquier formato y tamaño (máx. 2048 px)
js/db.js guarda borradores y fotos en el navegador (IndexedDB)
api/ backend para Vercel que habla con Tiendanube (el token nunca llega al navegador)
Después de guardar aparece Cargar uno parecido: copia todo menos fotos, códigos y cantidad, para cargar rápido otra medida o color del mismo producto.
| Dato cargado | Campo en la API (2025-03) |
|---|---|
| Tipo + marca + modelo + medida | name, handle, seo_title |
| Para qué sirve, especificaciones, modo de uso, qué incluye | description (HTML con títulos y listas), seo_description |
| Categoría | categories (el backend busca el ID por nombre y la crea si no existe) |
| SKU | variants[].sku |
| Peso (kg) y medidas (cm) | variants[].weight/width/height/depth |
| Variantes (medida/color/capacidad) | attributes + variants[].values |
| Marca | brand |
| Fotos | POST /products/{id}/images (base64, una por pedido, en orden) |
| Proveedor | No se envía (dato interno) |
| Precio de venta y cantidad en stock | variants[].price, variants[].stock (con stock_management: true) |
| Código de barras | variants[].barcode |
Si Contabilium sincroniza precio y stock por SKU, va a pisar lo que se cargue acá.
La app pide usuario y contraseña al abrirse. Hay un solo usuario, definido en Vercel:
ADMIN_USUARIO y ADMIN_CLAVE: usuario y contraseña del administrador.SESION_SECRETO: texto aleatorio de 32 caracteres o más para firmar las sesiones. Si se cambia, se cierran todas las sesiones abiertas.La sesión dura 12 horas y se guarda en una cookie HttpOnly (el JavaScript de la página no la puede leer). Después de 5 intentos fallidos desde la misma IP, se bloquea 15 minutos. Toda la API (/api/*) exige sesión, salvo login, sesion, logout y estado.
Se usa una aplicación a medida de la propia tienda (no hace falta el Portal de Partners):
npx vercel env add TN_ACCESS_TOKEN production --sensitive.npx vercel env add TN_STORE_ID production (aparece en el código de la página de la tienda como LS.store.id).npx vercel deploy --prod.TN_USER_AGENT ya está cargado. El token no vence; deja de valer si se borra la aplicación a medida.
Alternativa (app de Partners con OAuth): los endpoints /api/tiendanube-conectar y /api/tiendanube-callback siguen disponibles con TN_APP_ID y TN_CLIENT_SECRET.
api/codigo-barras.js + api/_codigos.js: consulta el catálogo global desde el servidor (la key nunca llega al navegador), con caché de 7 días (1 día si no lo encontró) y corte a los 6 s.BARCODE_PROVEEDOR, en orden y separados por coma (por defecto upcitemdb,openfacts; también eansearch y barcodelookup, pagos, con key en BARCODE_API_KEY). Se usa el primero que encuentre el producto. upcitemdb: 100 consultas por día, fuerte en importados. Open Food Facts: gratis, tiene alimentos argentinos y pocos productos no alimenticios.escaneando → buscando_info → completado_automatico o modo_manual → guardando. Solo se completan campos vacíos y quedan marcados en azul.Cuando el código no está en ningún catálogo, la empleada saca una foto de la etiqueta y toca Completar con IA: la IA lee hasta 4 fotos del producto y completa tipo, marca, modelo, medida, categoría, descripción, especificaciones, modo de uso y qué incluye. Solo llena campos vacíos y los marca en azul. Las fotos marcadas Solo IA (etiquetas, dorsos, códigos) se leen pero nunca se suben a la tienda.
api/_ia.js), cada una se usa solo si su key está cargada: Gemini (GEMINI_API_KEY, gratis con límites), Mistral (MISTRAL_API_KEY, plan Experiment gratis sin tarjeta, modelo mistral-small-latest), ChatGPT (OPENAI_API_KEY, modelo gpt-6-luna), Grok (XAI_API_KEY, grok-4.7) y Claude (ANTHROPIC_API_KEY, claude-opus-5-5). Primero las gratis (Gemini y Mistral); si están saturadas o tardan 6 s, entran las pagas de la más barata a la más cara, en paralelo escalonado. Si todas las gratis dicen "saturada", espera 4 s y hace una segunda ronda solo con las gratis. Cada intento queda en los logs de Vercel ("IA intentos").Cada producto que se guarda en el celular se copia solo a Vercel Blob (store privado riegos-respaldo, región São Paulo), aunque todavía no se haya publicado. Si se pierde el celular o se borran los datos del navegador: Cargados → Recuperar del respaldo.
productos/<id>.json) con datos y fotos (1600 px). Al publicarse en Tiendanube se reemplaza por una versión sin fotos, para ocupar poco.node .claude/servidor.js
Abrí http://localhost:5173. En local el usuario es admin y la contraseña prueba (solo en tu compu; en Vercel se usan las variables de entorno).
Base interna: api/_registro.js está listo para conectar, falta elegir la base. Mientras tanto, se publica igual en Tiendanube.
Precio y stock vs. Contabilium: si Contabilium sincroniza por SKU, va a pisar lo que se cargue acá.
Cambiar los colores y el logo "RS" por los de la marca.
Para producción, reemplazar el Tailwind por CDN por un build (npx tailwindcss).
Si se edita un producto ya publicado, hoy se hace desde el panel de Tiendanube (acá queda en solo lectura).