Javis OS
Javis OS is an Agentic AI that assists entrepreneurs in business tasks, helping them grow their work.
AI translation
Portal de comisionistas de servicios de valuación
Translation pending
BusinessPLpgSQL · TypeScriptGitHub @xchel-pixelOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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.