尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证MVP para Shippear 3.0: armá un plan, compartilo por WhatsApp o QR y sumá gente. Puntos canjeables en lugares aliados.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗MVP armado para Shippear 3.0 (Rosario, 24 de octubre de 2026). Publicás un plan, lo compartís por WhatsApp o con un QR y se suma gente que no conocés pero tiene ganas de lo mismo. Cuando llegás al plan y te encontrás con otra persona del grupo, ganás puntos para canjear por descuentos en negocios asociados.
/e/<código>/pantalla: QR grande y contador de gente anotada que se actualiza solo cada 3 segundos. Cuando empiezan los encuentros, muestra también cuántas personas llegaron y cuántos encuentros hubo.https://planes-mvp.vercel.app/api/mcp, sin cuenta: buscar planes, ver uno y sumarse con nombre y celular. Para crear un plan, Claude devuelve un link a /crear con el formulario completo, y ahí Tiki pide iniciar sesión. La portada tiene un botón Conectar con Claude que abre el formulario de conector de claude.ai con todo cargado. El diseño está en docs/mcp.md.Todos ven todos los planes. La identidad visual sigue el template Next.js boilerplate de v0: fondo casi negro, rojo como color principal, Montserrat en los títulos e Inter en el texto.
Hace falta Node 20 o más nuevo y Docker.
npm install
cp .env.example .env.local
docker compose up -d
npm run db:reset
npm run dev
La app queda en http://localhost:3000.
Para probar el QR con el celular, abrí la app desde la compu con su IP de la red wifi (por ejemplo http://192.168.0.15:3000): el QR y los links usan la misma dirección con la que se abrió la página, así que un celular en la misma wifi los puede abrir. El navegador solo deja usar la cámara con HTTPS o en localhost, así que con la IP de la red el escáner de Llegué no abre: para probar un encuentro así, escaneá el QR con la cámara del teléfono, o usá la versión publicada.
npm run db:reset borra todo y vuelve a cargar los negocios de ejemplo de supabase/seed.sql. Para aplicar migraciones nuevas sin borrar datos: npm run db:migrate.
Con npm run dev andando, npm run test:mcp prueba el MCP con el cliente MCP oficial contra la base local. Para usarlo desde Claude Code: claude mcp add --transport http tiki-local http://localhost:3000/api/mcp.
supabase/migrations, en un esquema app que la API de Supabase no expone: solo el servidor de Next.js accede, con la cadena de conexión. En local corre en Docker y en producción en Supabase.httpOnly y en la base queda solo su hash. El primer navegador que se anota con un número queda vinculado: desde otro navegador esa persona se puede sumar igual, pero no ve ni canjea los puntos. Así nadie usa los puntos de otra persona con solo saber su número.app.accounts), con la contraseña guardada como hash scrypt y sesiones en una cookie httpOnly (en la base, solo el hash del token). La primera vez que organiza, la cuenta se vincula con su teléfono solo si ese número es nuevo o ya se anotó desde el mismo navegador. Después, entrar con la cuenta en otro celular vincula ese celular y le da acceso a sus puntos.app.points_ledger): el saldo es la suma. La llegada a un plan se paga una sola vez (lo asegura un índice único) y cada par de personas se cuenta una sola vez por plan, en app.encounters. Si quien organiza quita a alguien del plan, se le descuenta todo lo que ganó en ese plan. El cupo, el canje y los encuentros bloquean las filas correspondientes, así dos personas no ocupan el último lugar ni gastan el mismo saldo al mismo tiempo./e/<código>/encuentro/<token>. El token tiene el id de la persona, la ventana de 30 segundos en la que se generó y una firma HMAC hecha con ENCOUNTER_SECRET, así que nadie puede armar uno a mano. El servidor acepta solo la ventana actual y la anterior, por eso una captura mandada por WhatsApp vence en menos de un minuto. El encuentro cuenta solo entre dos personas anotadas en el plan, desde 2 horas antes hasta 6 horas después del horario. La cámara se lee en el navegador con BarcodeDetector (Chrome en Android) o con jsQR (Safari en iPhone).src/app/api/mcp y src/lib/mcp), con mcp-handler y Streamable HTTP sin estado. Lee con el rol de Postgres , que solo ve las columnas públicas y no puede escribir; la única escritura es sumarse, con la misma función SQL que la web. Cada pedido queda en (sin nombres ni teléfonos) y pasa por un límite por IP.Con un proyecto de Google Cloud (facturación activada y una API key restringida al dominio de la app) se puede:
src/lib/maps.ts.src/app/api/places/route.ts. El formulario solo habla con esa ruta, así que el cambio queda acotado ahí.npx supabase link y npx supabase db push, o pegando en orden los archivos de supabase/migrations en el SQL Editor. Después, supabase/seed.sql con los negocios reales.DATABASE_URL con la cadena del pooler compartido (aws-1-sa-east-1.pooler.supabase.com:6543; el host db.<proyecto>.supabase.co solo funciona por IPv6 y Vercel no llega), ENCOUNTER_SECRET y MCP_LOG_SECRET con textos largos y aleatorios (en .env.example está el comando para generarlos) y, si hace falta, NEXT_PUBLIC_SITE_URL con la URL pública.tiki_mcp_readerapp.mcp_requests/api/places. El plan muestra un mapa embebido de Google y un botón "Cómo llegar" que abre Google Maps con el recorrido.