尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Portal para comisionistas de servicios de valuación. Se despliega en tasa.xgplataform.com.
Estado: base de datos, migraciones por CLI y acceso por código listos. Faltan las pantallas por rol, Notion, correos y el despliegue en Vercel (este README se completa con ellos).
npm install
npm run dev
Abre http://localhost:3100 (3100 y no 3000, para no chocar con Pulso). Necesita .env.local
lleno (ver .env.example). Desde el celular, en la misma red Wi-Fi, entra por la IP de la
computadora (http://192.168.x.x:3100).
En el proyecto, en Authentication:
Sign In / Providers → Email: habilitado, con "Confirm email" activo. "Allow new users
to sign up" se queda encendido: quien decide si alguien entra es correo_en_padron(),
no esta casilla; si se apaga, nadie nuevo puede recibir su primer código.
Emails → Templates → Magic Link: el correo debe mostrar el código, no una liga. Cambia el cuerpo por algo como:
<h2>Tu código para entrar a Tasa</h2>
<p style="font-size:28px;letter-spacing:6px"><strong>{{ .Token }}</strong></p>
<p>Vence en una hora. Si pediste más de uno, solo sirve el más reciente.</p>
Emails → SMTP Settings: apunta a Resend (host smtp.resend.com, puerto 465, usuario
resend, contraseña = una API key de Resend), remitente @xgplataform.com.
URL Configuration:
| Ahora (pruebas) | Al lanzar | |
|---|---|---|
| Site URL | http://localhost:3100 | https://tasa.xgplataform.com |
| Redirect URLs | http://localhost:3100/** | https://tasa.xgplataform.com/** (y quita la de localhost) |
El acceso es por código, no por liga, así que estas URLs casi no se usan; Supabase las pide y las pone en los correos. Si algún día se agrega una liga, ya estarán bien.
npm install
npm test
Corre las migraciones, la semilla y supabase/verificaciones.sql en PGlite (un Postgres que
vive dentro de Node). No toca Supabase ni necesita internet después de instalar.
npm run humo
Entra a tasa.xgplataform.com y abre todas las rutas de app/ (una ruta nueva sin expectativa hace
fallar la prueba). Solo lectura: no llena formularios ni escribe nada. Necesita SUPABASE_SECRET_KEY
en .env.local (sin ella, se salta). Entra a dos organizaciones:
npm run demo
Qué hace cada corrida:
supabase/produccion/demo.sql).xchel+demo-admin, -finanzas, -equipo, -ana, -beto y -carla @arqosuv.com.Qué no toca:
pruebas/demo.test.ts: dos corridas seguidas dejan XG idéntico.Bloqueos (0043):
Para entrar a mano, usa uno de esos correos: el código llega a tu propio buzón por el alias.
Usa Microsoft Edge (channel: "msedge" en playwright.config.ts), el que ya trae Windows.
En esta PC la descarga del Chromium de Playwright se traba a medias, así que no hace falta
correr npx playwright install. En una computadora sin Edge, quita esa línea e instala Chromium.
Tasa usa un solo proyecto de Supabase (plan gratuito). Hoy es de pruebas, con semilla;
antes de lanzar se resetea y queda como producción, sin semilla, en ese mismo proyecto.
TASA_MODO en .env.local dice en qué etapa está.
Una sola vez por computadora:
npx supabase login
Luego copia .env.example como .env.local y llénalo (el archivo dice dónde está cada dato).
| Comando | Qué hace | Modo |
|---|---|---|
npm run db:push | Empuja las migraciones pendientes. La CLI pide confirmar | cualquiera |
npm run db:semilla | Carga la semilla de prueba (una sola vez) y la comprueba | solo pruebas |
npm run db:verificar | Corre las verificaciones; no dejan rastro | solo pruebas |
npm run db:reset-produccion | Borra todo, aplica migraciones sin semilla, pasa a producción | solo pruebas |
Cada comando vuelve a amarrar el proyecto antes de actuar. Las migraciones aplicadas quedan
registradas en el proyecto: db:push solo aplica las que falten.
npm run db:reset-produccion
tasa). Si no coincide, no hace nada.TASA_MODO a produccion en .env.local. Desde ese momento la semilla, las
verificaciones y este mismo reset se niegan a correr: ya hay datos reales.insert into personas (nombre, correo, rol)
values ('<tu nombre>', '<tu correo>', 'super_admin');
Si ya habías entrado durante las pruebas, tu usuario de autenticación sigue existiendo y se
amarra solo la próxima vez que entres.El reset no toca los usuarios de autenticación ni los archivos de Storage. Los usuarios de
prueba (@tasa.test) se pueden borrar desde Authentication → Users.
En el SQL Editor:
select table_name from information_schema.tables
where table_schema = 'public' order by 1;
Deben aparecer 17 tablas: ajustes, alertas, bitacora, cierres, comisiones, comisionistas,
cotizaciones, cuentas_receptoras, historial_estatus, mapeo_estatus, marcas,
niveles, niveles_mensuales, pagos, personas, servicios, solicitudes.
En este orden. Lo marcado como por decidir se pregunta antes de construir.
Panel de administración: pagos por confirmar primero, alertas de Notion, cotizar y emitir, alta de comisionistas, cuentas receptoras, mapeo de estatus y cierre mensual.
Aceptación de términos del comisionista
Solicitud pública por liga del comisionista (después del panel; antes de la tarjeta digital, que la reutilizará)
/s/<slug>. Slug inexistente o comisionista inactivo: "Este enlace no está
disponible", sin formulario.enlace, ligada al comisionista, estatus "Solicitada";
acuse al cliente (sin montos) y aviso al comisionista.security definer con
validación; anon sigue sin permisos sobre tablas.origen hoy acepta portal, tarjeta, referido y admin: hace falta una migración que agregue
enlace.Ya hecho de las reglas de niveles (0023): tasa de bienvenida, arranque y Élite con vencimiento.
| Variable | Dónde | Para qué |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | Vercel | Proyecto de Supabase |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Vercel | Llave pública; el RLS decide qué se ve |
SUPABASE_SERVICE_ROLE_KEY | Vercel (solo servidor) | Únicamente para /api/cron |
CRON_SECRET | Vercel y pg_cron | Protege /api/cron |
NOTION_TOKEN | Vercel | Integración de Notion. Sin ella, se usa el adaptador simulado |
NOTION_DB_TRAMITES | Vercel | Base de trámites (0bcd465f-fd85-4665-8fd7-77212ce0328b) |
RESEND_API_KEY | Vercel | Correos de cambio de estatus |
CORREO_REMITENTE | Vercel | p. ej. Tasa <[email protected]> |
El dominio xgplataform.com ya está verificado en Resend (lo usa Pulso). Si Tasa manda desde una
dirección @xgplataform.com, no hace falta ningún registro DNS nuevo: solo una API key nueva
para Tasa. Además, en Supabase → Authentication → SMTP, apunta el proyecto de Tasa a Resend para
que los códigos de acceso no salgan por el correo de fábrica.
Control de dispositivos (después del panel)
dispositivos: persona, id de dispositivo (cookie firmada de larga duración),
tipo (teléfono/computadora), navegador y sistema, primera vez, último acceso, ciudad
aproximada (sin guardar la IP completa) y estado (activo, pendiente, revocado).x-vercel-ip-city):
no hace falta un servicio externo ni guardar la IP. En la computadora local no existe.Notion (cron cada 15 min + botón "actualizar"), correos de cambio de estatus y PDF de la cotización.
Alta de comisionistas por solicitud — construida (0024): /alta/<org> pública,
RFC obligatorio y CSF, bandeja de aprobación para admin_org, correos por Resend y aviso de
privacidad en /privacidad. Ver docs/paso-a-produccion.md §4b.
Después, despliegue en tasa.xgplataform.com y paso a producción con
npm run db:reset-produccion.
Referidos (después del paso a producción). Vínculo de 12 meses desde el primer trabajo
pagado del referido, editable por vínculo con motivo; el referidor cobra solo si tuvo un
trabajo pagado en los últimos 3 meses; a los 6 meses sin trabajos pierde sus referidos
(aviso a los 4). Escalón 2–5%, un solo nivel, antifraude, tope 30%. Reglas, esquema y lo
por decidir en docs/referidos-y-herramientas.md.
Herramientas y membresías. Consulta catastral, estimación rápida y OV express; cupos
mensuales por nivel y por membresía (Básica $490, Pro $990), adicionales con cargo,
bonificación de la membresía desde Aliado. Primero como pedido que atiende el equipo; las
automáticas después, con su propio plan. Ver docs/referidos-y-herramientas.md.