尚未偵測到更新。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.