尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Swapit es la herramienta del intermediario regional (acopiador, agregador de residuos y subproductos), no un marketplace: digitaliza cómo capta material de su red de proveedores (portal por enlace y bot de WhatsApp), le dice si el precio que ofrece es justo (benchmark por subtipo de material) y le deja certificar la trazabilidad a sus clientes (certificados co-marcados con QR y hash). Cobro: suscripción mensual + fee por certificado; sin comisión por operación. Foco: Piura y Lambayeque.
Dos experiencias (22 oct. 2026). Tras la mentoría #6, la demo por defecto (
pnpm demo) es el intercambio entre empresas: catálogo con fotos y detalle del material (mapa como vista secundaria), oferta de precio dentro de la plataforma, contacto solo al llegar a un acuerdo, vista dual ofertante/demandante e impacto. Menú de 4 opciones; sin asistente de IA ni WhatsApp en el menú. La herramienta para acopiadores (red de proveedores, precio justo, acuerdos de temporada, destinos, certificados) sigue disponible conpnpm demo:b2b. Diseño nuevo: docs/diseno/. Publicar en un dominio público: docs/despliegue.md.Modos comprador y vendedor (27 oct. 2026). El marketplace (
pnpm demo) sigue la estructura de docs/diseno/estructura-web.md: inicio con frase y dos botones, ingreso y registro por modo, marketplace con Lista/Mapa y buscador, «Publicar» con pin en el mapa y menú de bolita (Perfil, Mis compras, Favoritos, Chats · Perfil, Mis productos, Finanzas, Chats). Una cuenta activa el segundo modo desde su Perfil.
Pivote (15 oct. 2026): el producto anterior (marketplace de personas y empresas con chat, pago en garantía y créditos) sigue en el código detrás de un interruptor. Por qué y qué queda: docs/decisiones/0001-pivote-b2b2b.md. El nombre se mantiene: Swapit.
Diseño ejecutivo y despliegue (23 oct. 2026). La interfaz es un panel sobrio (azul marino de estructura, verde de acción, Inter, tablas y franja de indicadores; sin pictogramas decorativos). Pantallas del plan de trabajo en docs/plan/: Inicio, Explorar, Ficha, Publicar en 3 pasos, Mi actividad (Propuesta → Aceptada → Cerrada), Mi empresa e Impacto. Seguridad: docs/seguridad.md (cabeceras, CORS, CSRF, límites de tasa, validación de imágenes, webhook firmado, verificación manual de empresas). Despliegue en Vercel + Supabase: docs/despliegue.md;
pnpm humoprueba la API de punta a punta. 282 pruebas de API en verde. Pagos, SUNAT y fotos de las ofertas de demo son simulados y se marcan «Demo».
Monorepo pnpm: apps/api (NestJS + Prisma), apps/web (Next.js + Tailwind + MapLibre), packages/shared (Zod, enums, benchmark, agente).
Requisitos: Node.js 22 o superior y pnpm 9 (con Node instalado: corepack enable). Necesita internet para el mapa (teselas de OpenFreeMap). No requiere Docker, base de datos ni claves.
git clone https://github.com/davidblas5000/swap-it.git # repositorio privado: pide acceso a David
cd swap-it
pnpm install
pnpm demo # intercambio entre empresas: BD embebida + migraciones + datos de demo + API + web
pnpm demo:b2b # Swapit para acopiadores (intermediarios)
Abre http://localhost:3000 (la primera vez tarda 1-2 minutos en compilar y sembrar). Ctrl+C lo detiene. pnpm demo:reset recrea los datos de demostración y muestra en consola los enlaces del portal de captación de algunos proveedores.
Cuentas de demo (botones en /login, contraseña demo1234; todos los datos son ficticios):
[email protected] — Acopios Tallanes: red de 6 proveedores, material en todos los estados, suscripción activa y 2 certificados emitidos.[email protected] — Reciclajes del Norte: otra red, aislada de la primera, sin suscripción (no puede emitir certificados)./captacion/<enlace>, pensado para el celular): reporta «bidones de PEAD azules, 600 kg, a S/ 4,50» → la IA sugiere el subtipo, ve el rango de referencia y que su precio está encima./verificar/<código> es público).En la carpeta del proyecto hay tres archivos que se abren con doble clic:
iniciar-swapit.bat: enciende todo y abre http://localhost:3000 en el navegador. Aparece una ventana negra: déjala abierta mientras uses la app.detener-swapit.bat: apaga Swapit. También se apaga al cerrar la ventana negra (o con Ctrl+C dentro de ella).reiniciar-datos-swapit.bat: borra lo que hayas probado y vuelve a crear los datos de demostración (pide confirmación).| Real (probado) | Simulado / modo demo |
|---|---|
| PostgreSQL con PostGIS (distancias) y pgvector (similitud de precios) | Base embebida PGlite en desarrollo; en producción Neon/Supabase con el mismo esquema |
| Roles intermediario/generador, aislamiento entre redes, ciclo reportado → cotizado → acopiado → despachado | Cobros: proveedor mock (suscripción y fee por certificado; Culqi/Niubiz pendientes) |
| Certificados verificables (QR + SHA-256) co-marcados, PDF, portal de captación por token con límite de tasa | KYB/SUNAT: mock determinista (RUC con «00» en las posiciones 9-10 = dado de baja) |
| Benchmark por similitud (pgvector + PostGIS + volumen + recencia), importación CSV, consentimiento para compartir | Precios de referencia de la demo: DATOS DE EJEMPLO (semilla sintética, rotulada en pantalla); no son precios de mercado |
| Webhook de WhatsApp con verificación de reto y firma, conversación guiada | WhatsApp: el envío es un mock; la integración real está en docs/whatsapp-roadmap.md |
IA: sin ANTHROPIC_API_KEY el clasificador es local por palabras clave; sin OPENAI_API_KEY, embeddings por hashing |
Para activar la IA real crea apps/api/.env con ANTHROPIC_API_KEY=… y/o OPENAI_API_KEY=…. ⚠️ Si activas OpenAI, ejecuta pnpm demo:reset para reindexar: no se pueden mezclar embeddings de proveedores distintos.
Empresa.rol = INTERMEDIARIO es la cuenta que se suscribe y paga. GENERADOR es un proveedor de su red: lo crea el intermediario, no tiene usuario y reporta por enlace (tokenCaptacion) o por WhatsApp; su RUC es opcional (hay proveedores informales).Lote es el material reportado por un proveedor; pertenece a la red de su intermediario. Ciclo: REPORTADO → COTIZADO → ACOPIADO → DESPACHADO (o RECHAZADO).PLASTICO_PET/PEAD/PP/FILM/PVC/MIXTO (familia PLASTICO); si la IA no distingue el polímero, pide revisión.packages/shared/src/benchmark.ts (pesos: material 45 %, cercanía 20 %, volumen 20 %, recencia 15 %). Otros subtipos de la familia solo se usan de respaldo; con ≥ 5 precios reales del subtipo, los datos de ejemplo dejan de usarse.transaccionId o loteId de origen; el hash cubre generador, intermediario emisor y cliente destino; los certificados del marketplace siguen verificando. Exige suscripción activa y registra un fee.SWAPIT_ACOPIADORESSWAPIT_ACOPIADORES=1 (con pnpm demo:b2b) | Intermediarios, proveedores, benchmark, certificados co-marcados, portal y WhatsApp. Lo del marketplace responde 404. |
Sin la variable (por defecto del código y de pnpm demo): marketplace comprador/vendedor | Intercambio entre empresas: personas y empresas, transacciones con chat y pago en garantía, créditos, búsqueda y alertas, modo confidencial, cumplimiento REP. pnpm demo:marketplace (o :reset). |
Las pruebas del modo anterior están en apps/api/test/marketplace/ y fijan el modo; se borrarán junto con ese código (criterio en la decisión 0001).
packages/shared/src/agente/: mini-ADK en TypeScript (agente con herramientas tipadas, sub-agentes, bucle con sesión). Usa Gemini Nano por la API Prompt de Chrome con salida JSON restringida y, si no está disponible o falla, un modelo de reglas. El del intermediario solo consulta (benchmark, material por cotizar, estado de la red): no tiene herramientas que cambien datos. Requisitos de Nano y límites: docs/investigacion-y-mejoras.md. ⚠️ Las pruebas usan un Nano simulado; Nano real no se verificó en este entorno.
pnpm demo / pnpm demo:reset | Prototipo de intercambio entre empresas (modo MARKETPLACE) con 33 ofertas ilustradas |
pnpm demo:b2b / pnpm demo:b2b:reset | Swapit para acopiadores (modo B2B2B) |
pnpm --filter @swapit/api test | 160 pruebas contra un Postgres real en memoria (PostGIS + pgvector), de los dos modos |
pnpm typecheck / pnpm build | Verificación de tipos / compilación |
Para producción: crear la BD en Neon (CREATE EXTENSION postgis; CREATE EXTENSION vector;), poner DATABASE_URL en apps/api/.env y ejecutar pnpm --filter @swapit/api prisma:deploy. La conexión ?pgbouncer=true&connection_limit=1 del .env de desarrollo es solo para la base embebida (una sola sesión).
ConfigPlataforma, packages/shared/src/factores-co2.ts). Presentarlos como estimaciones.NEXT_PUBLIC_MAPBOX_TOKEN usa Mapbox. Las teselas gratuitas no son para tráfico de producción.demo1234)[email protected], [email protected], [email protected], [email protected], [email protected] (confidencial).[email protected], [email protected], [email protected], [email protected].apps/api/src/seed/imagenes-demo.ts); se reemplazan por fotos reales cuando las empresas suban las suyas. Todos los datos son ficticios.