# Cuentas de usuario y perfiles

OfferHub separa **identidad de usuario**, **cuentas financieras**, y **aplicación de escrow** en sistemas distintos.

Esta separación es intencional y requerida para:

* minimizar el riesgo de custodia,
* evitar almacenar datos financieros sensibles,
* mantener compatibilidad con el alcance de la API de Airtm,
* mantener Trustless Work enfocado en la aplicación.

***

### Responsabilidades del Sistema

#### OfferHub + Supabase (Identidad y Perfil)

Manejado por **Supabase**.

Responsabilidades:

* registro e inicio de sesión de usuarios
* autenticación y sesiones
* datos de perfil del marketplace
* roles de usuario (comprador / vendedor)
* vinculación de cuentas externas (referencia Airtm)

Se recomienda Supabase porque proporciona:

* auth (correo electrónico, OAuth, magic links)
* seguridad a nivel de fila
* auditabilidad
* fácil integración con servicios backend

***

#### Airtm (Cuenta Financiera y KYC)

Manejado íntegramente por **Airtm**.

Responsabilidades:

* KYC y cumplimiento
* creación de cuentas financieras
* saldos
* depósitos (recargas)
* retiros (pagos)
* cuentas bancarias virtuales y pasarelas locales

OfferHub no **no** almacena:

* documentos de identidad
* detalles bancarios
* saldos

***

#### Trustless Work (Escrow y Aplicación)

Manejado por **Trustless Work en Stellar**.

Responsabilidades:

* creación de escrow por orden
* seguimiento de hitos
* estados de disputa
* aplicación de liberaciones y reembolsos

Trustless Work nunca gestiona a los usuarios directamente. Solo aplica **roles y firmas**.

***

### Flujo de Creación de Usuario (Referencia)

#### Paso 1 — Registro e Inicio de Sesión

```
Usuario → UI de OfferHub
UI de OfferHub → Supabase Auth
Supabase → Sesión de usuario establecida
```

En este punto:

* el usuario existe en OfferHub
* el usuario tiene un registro de perfil
* aún no se permiten acciones financieras

#### Paso 2 — Vinculación de Cuenta Airtm (KYC)

Cuando el usuario intenta una acción financiera (recarga, venta, retiro):

```
OfferHub → Verificar: ¿Airtm vinculada?
Si NO:
  → Redirigir al usuario al onboarding alojado por Airtm
```

El usuario completa en Airtm:

* registro o inicio de sesión
* verificación de identidad (KYC)
* preparación de la cuenta

***

#### Paso 3 — Callback y Vinculación de Airtm

```
Airtm → redirección/callback a OfferHub
OfferHub recibe:
  - airtm_user_id (o referencia)
```

OfferHub almacena la referencia en Supabase:

```json
{
  "user_id": "offerhub_user_123",
  "airtm_user_id": "airtm_user_abc"
}
```

No se almacenan credenciales ni saldos.

***

#### Paso 4 — Usuario Habilitado Financieramente

Después de la vinculación:

* el usuario puede recargar saldo
* el usuario puede financiar escrows
* el usuario puede recibir pagos

Todas las acciones financieras se orquestan a través de las APIs de Airtm usando la identidad vinculada.

***

### Por qué se usa este modelo

#### Por qué Supabase maneja los perfiles

* La identidad del marketplace ≠ identidad financiera
* Control de acceso más limpio
* Gestión de roles más sencilla (comprador / vendedor)
* Evita la expansión del alcance de cumplimiento

#### Por qué Airtm maneja KYC

* Entidad regulada
* Diseñado específicamente para el cumplimiento financiero
* Evita duplicar los flujos de KYC

#### Por qué OfferHub solo orquesta

* Reduce el riesgo legal y técnico
* Mantiene la arquitectura modular
* Hace que la plantilla sea reutilizable con otros proveedores

***

### Diagrama de Secuencia (Simplificado)

```
Usuario → UI → Supabase (registro/inicio de sesión)
Usuario → UI → Airtm (onboarding KYC)
Airtm → OfferHub (referencia del usuario)
OfferHub → Supabase (vinculación almacenada)
```

***

### Restricción de Diseño (Importante)

OfferHub **no debe**:

* crear usuarios de Airtm vía API
* almacenar documentos KYC
* actuar como custodio

Si una plataforma requiere control custodial completo, OfferHub no es el patrón correcto.

***

### Resumen

OfferHub trata:

* **Supabase** como el sistema de registro para usuarios
* **Airtm** como el sistema de registro para el dinero
* **Trustless Work** como el sistema de registro para la aplicación de escrow

OfferHub en sí permanece como una capa de orquestación.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.trustlesswork.com/trustless-work/v1-es/dapps-oss/offerhub-marketplace/flujos-principales/cuentas-de-usuario-y-perfiles.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
