Prompts listos para copiar y pegar en tu herramienta de IA generativa favorita. Cada uno construye, desde cero, una app funcional ya conectada a la API de SatGo.
Elige una plantilla y copia el texto completo con un clic.
Crea un proyecto nuevo en Lovable y pega el prompt tal cual.
Genera tu API key en SatGo y úsala dentro de la app generada.
App con login propio, bóveda de RFCs (FIEL cifrada) y descarga masiva de Constancias de Situación Fiscal contra la API de SatGo, empacadas en un ZIP.
Crea una aplicación web con TanStack Start (React + TypeScript + Tailwind CSS) que sirva como herramienta para descargar constancias de situación fiscal (CSF) del SAT en batch mediante la API externa de SAT-GO.
Requisitos funcionales:
Autenticación: Implementa login y registro con email/contraseña usando Lovable Cloud (Supabase Auth). Las rutas protegidas deben estar bajo /_authenticated/, con un layout que redirija a /auth si no hay sesión. La página /auth debe tener formulario toggle entre login y registro.
Para el login muestra validaciones de usuario incorrecto, contraseña incorrecta, no registrado, etc.
Debe existir una forma tambien de recuperar la contraseña enviando un correo de verificacion y poder resetearla.
API externa: La app consume el endpoint POST https://api.sat-go.com/api/v2/Consultar/csffiel?api-version=2.0. Requiere headers RFC y Authorization (Bearer token). El body es multipart/form-data con campos: Certificado (archivo .cer), llavePrivada (archivo .key) y Contrasena. La respuesta es un PDF. El token SAT lo pega el usuario manualmente en la UI.
Proxy server: Dado que la API externa no permite CORS desde el navegador, implementa un proxy usando server functions (createServerFn) y/o server routes (createFileRoute con bloque server.handlers.POST) que reciba los datos del cliente, haga el forwarding al SAT-GO API, y devuelva el PDF o el error.
Almacenamiento seguro de credenciales: Los usuarios deben poder guardar múltiples RFCs con sus archivos .cer, .key y contraseña, correo electronico y alias Para ello:
Crea una tabla saved_rfcs en la base de datos con: id, user_id, rfc, label, cer_path, key_path, password_encrypted, created_at,email,alias
Usa un bucket privado de storage llamado csf-files para guardar los archivos .cer y .key.
La contraseña debe cifrarse con AES-GCM en el servidor usando una clave CSF_ENCRYPTION_KEY (generada como secreto del proyecto). Descifrarse solo cuando se vaya a hacer la petición a SAT-GO.
Aplica RLS (Row Level Security) para que cada usuario solo vea/modifique sus propios RFCs y archivos.
Agregar seccion llamada Credenciales con una opcion para agregar el JWT, aqui la primera vez que se ingrese el JWT, debe ejecutarse el endpoint de https://api.sat-go.com/swagger/index.html#/Users/post_api_v_version__Users_CreateKey
Aqui va un ejemplo de como se genera la key
Request:
POST /api/v1/Users/Createkey HTTP/1.1
Authorization: Bearer {TOKEN}
Reponse:
{
"key": "asdasd4fa="
}
Esto devolvera una llave que se debe guardar en una tabla protegida, esta llave al iniciar sesion debe ejecutar el endpoint> https://api.sat-go.com/swagger/index.html#/Auth/post_api_Auth_token_json que devolverá el jWT que será usado en la sesión actual.
este token deberás utilizarlo durante la sesión. Ejemplo decomo se hace:
POST /api/Auth/token-json HTTP/1.1
Content-Type: application/json
Host: api.sat-go.com
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 62
{
"key":"{KEY}"
}
Response:
{
"mode": "live",
"message": "OK",
"sessionId": "ec0945c8-94c5-45ce-8b9c-20e5f2813c42",
"tokens": {
"access": {
"value": "eyJhbGciOiJIUzI1NiIsI",
"cookieOptions": {
"secure": true,
"sameSite": "Lax",
"path": "/",
"expires": 1
}
},
"id": {
"value": "eyJhbGciOiJIUz0",
"cookieOptions": {
"secure": true,
"sameSite": "Lax",
"path": "/",
"expires": 1
}
},
"refresh": {
"value": "eyJhbGciOiJIUzI1",
"cookieOptions": {
"secure": true,
"sameSite": "Strict",
"path": "/",
"expires": 30
}
}
},
"nonce": "261acbc1-8709-47e4-b888-585c1a8615a5",
"redirectTo": ""
}
En la parte de login que vas a generar, debe ser descriptivo, mostras los erroes de validacion, como correo incorrecto, usuario no encontrado, contraseña incorrecta, etc, todas las validaciones deben ser visibles.
Agrega un menu con la opcion de mis rfcs:
a) Listar RFCs, buscar por RFC que contenga, no debe ser el RFC exacto
b) Una sección para agregar nuevos RFCs (input RFC, label opcional, upload .cer, upload .key, input contraseña, botón guardar).
c Permitir editar y eliminar RFCs
Funcionalidad batch de descarga:
En la página principal autenticada, muestra:
a) Una lista de RFCs guardados con checkboxes para seleccionar cuáles procesar.
Permite también agregar RFCs "ad-hoc" (sin guardar) para descargas puntuales.
Al iniciar el procesamiento, recorre todos los RFCs seleccionados (guardados y ad-hoc) y va consumiendo la API uno por uno.
Cada fila debe mostrar su estado: idle, processing, done, error.
Si alguna descarga falla, mostrar un botón de "Reintentar" individual para esa fila, sin reiniciar todo el batch.
Al finalizar, permite descargar un ZIP que contenga todos los PDFs exitosos. Usa jszip en el cliente para armar el ZIP a partir de los PDFs recibidos (base64 o blobs).
UI/UX: Diseño limpio y funcional con Tailwind. No uses colores hardcodeados; respeta el tema del proyecto. Usa componentes de shadcn/ui disponibles (button, input, card, checkbox, table, etc.). Incluye un botón de "Cerrar sesión" en el header de la página principal.
Seguridad: Nunca expongas SUPABASE_SERVICE_ROLE_KEY ni la clave de cifrado al cliente. Las operaciones de storage y cifrado deben hacerse en server functions protegidas con requireSupabaseAuth. El bucket csf-files debe ser privado.
Metadatos: En src/routes/__root.tsx y en la ruta /auth configura títulos y descripciones apropiados (ej. "Constancias SAT", "Iniciar sesión — Constancias SAT").
Stack: TanStack Start v1, React 19, Tailwind CSS v4, Supabase/Lovable Cloud para auth y base de datos, jszip para generar ZIPs en el cliente. Usa createServerFn con requireSupabaseAuth para todas las operaciones protegidas. Asegúrate de que src/start.ts registre el middleware attachSupabaseAuth para que las server functions reciban el bearer token del cliente.
Parte 2 Opcional (batch programado):
Agregar una sección llamada Admin, donde el usuario con el rol admin (necesitamos roles) pueda configurar un Cron Job que pueda configurar una tarea programada (cron diario, semanal o mensual)
que ejecute lógica de negocio en el backend, junto con un sistema de roles para que solo administradores puedan configurarla desde la UI.
El usuario puede configurar el dia de la semana, dia del mes y la hora y minuto UTC en que se puede ejecutar
Esta tarea debe generar un token con la key generada y consumir csffiel, debe mostrarse en una sección aparte de historial y permitir la descarga del PDF y/o mostrar el error.
El historial es visible para usuarios en sesión, no se requiere ser admin.
La descarga de esos PDFs haz que pasen por el server y se entregue como blob local, evitando el bloqueo.
Se debe permitir el reintento en el historial, en caso de algún error.