# Aplicaciones de citas

La compatibilidad astrológica es un *retention-driver* en aplicaciones de citas como Bumble, Hinge, Tinder, Tantan y en apps *astro-first* como NUiT o Struck. La API de AstroWay proporciona una puntuación de sinastría de 0–100 con una sola llamada, sin necesidad de un motor de efemérides propio ni de una licencia de Solar Fire ($495).

## ¿Cómo funciona?

1. El usuario introduce su fecha, hora y lugar de nacimiento al registrarse.
2. Al hacer *match*, tu backend invoca `/v1/synastry` con los datos de ambas personas.
3. La API devuelve `compatibility.score` (0–100) y `label` (harmonious/balanced/mixed/challenging).
4. La puntuación se usa como uno de los factores de ranking.

```
Algoritmo de matching
  ├── Proximidad geográfica         (40%)
  ├── Intereses comunes             (30%)
  ├── Compatibilidad astrológica    (20%)  ← API AstroWay
  └── Otras señales                 (10%)
```

## Endpoints clave

| Endpoint | Créditos | Respuesta |
|---|---|---|
| `/v1/synastry` | 50 | Aspectos cruzados + puntuación 0–100 |
| `/v1/human-design/compatibility` | 100 | Compatibilidad HD (tipo + estrategia) |
| `/v1/horoscope/compatibility` | 50 | Análisis textual de compatibilidad |

## Patrón de integración

```ts
// Al hacer match, calcular sinastría
async function getCompatibility(userA: UserProfile, userB: UserProfile) {
  const result = await astrowayClient.synastry({
    chart1: {
      date: userA.birthDate,
      time: userA.birthTime || '12:00:00', // valor por defecto al mediodía si es desconocido
      timezoneOffset: userA.tzOffset,
      latitude: userA.birthLat,
      longitude: userA.birthLng,
    },
    chart2: {
      date: userB.birthDate,
      time: userB.birthTime || '12:00:00',
      timezoneOffset: userB.tzOffset,
      latitude: userB.birthLat,
      longitude: userB.birthLng,
    },
  });

  return {
    score: result.compatibility.score,      // 0-100
    label: result.compatibility.label,      // "harmonious"
    harmony: result.compatibility.harmony,  // suma ponderada
    tension: result.compatibility.tension,
  };
}
```

<Aside type="tip">
El resultado de la sinastría es inmutable (depende solo de las fechas de nacimiento). Guarda el par `(userA_id, userB_id) → puntuación` en tu base de datos. Una sola llamada a la API y ya no necesitarás recalcular.
</Aside>

## Estimación de presupuesto

### Escenario: 1.000 nuevos *matches* al día

| Métrica | Valor |
|---|---|
| *Matches*/día | 1.000 |
| Créditos/*match* | 50 (sinastría) |
| Créditos/día | 50.000 |
| Créditos/mes | ~1.500.000 |
| Tarifa | **Business ($199/mes, 3.500.000 créditos)** |

### Escenario: 50 *matches* al día (startup)

| Métrica | Valor |
|---|---|
| *Matches*/día | 50 |
| Créditos/día | 2.500 |
| Créditos/mes | ~75.000 |
| Tarifa | **Starter ($19/mes, 200.000 créditos)** |

### Optimización

- **Caché** — guarda la puntuación en la base de datos, no la recalcules.
- **Procesamiento perezoso** — calcula la sinastría solo cuando el usuario abre el *match*, no para todas las parejas potenciales.
- **Cálculo por lotes al registrarse** — calcula la compatibilidad con los 20 mejores *matches* potenciales de inmediato.

## Sin hora de nacimiento

Si el usuario no conoce su hora de nacimiento, envía `"time": "12:00:00"` (mediodía). Las casas serán menos precisas, pero las posiciones planetarias y los aspectos cruzados serán correctos. La puntuación de compatibilidad seguirá siendo informativa.

Para la compatibilidad HD, la hora es más importante: considera `hd/sensitivity` para evaluar el impacto de una hora inexacta.

<CardGrid>
  <LinkCard title="API de Sinastría →" href="/products/synastry-api/" description="Detalles sobre los endpoints de compatibilidad" />
  <LinkCard title="Guía de inicio rápido" href="/getting-started/" description="Tu primera solicitud en 5 minutos" />
  <LinkCard title="Precios" href="/pricing/" description="Desde gratuito hasta Enterprise" />
</CardGrid>
