# Aplicativos de Namoro

A astrologia é um fator de retenção em aplicações de namoro como Bumble, Hinge, Tinder, Tantan e em apps astro-first como NUiT, Struck. A API AstroWay fornece um score de sinastria pronto a usar de 0–100 com apenas uma chamada — sem precisares de teres o teu próprio motor de efemérides nem de pagar uma licença do Solar Fire ($495).

## Como funciona

1. O utilizador insere a data, hora e local de nascimento durante o registo
2. No momento do match — o teu backend chama `/v1/synastry` com os dados de ambas as pessoas
3. A API devolve `compatibility.score` (0–100) e `label` (harmonioso/equilibrado/misto/desafiador)
4. O score é usado como um dos fatores de ordenação

```
Algoritmo de matching
  ├── Proximidade geográfica      (40%)
  ├── Interesses em comum         (30%)
  ├── Astrologia de compatibilidade (20%)  ← API AstroWay
  └── Outros sinais               (10%)
```

## Principais endpoints

| Endpoint | Créditos | O que devolve |
|---|---|---|
| `/v1/synastry` | 50 | Aspetos cruzados + score 0–100 |
| `/v1/human-design/compatibility` | 100 | Compatibilidade de HD (tipo + estratégia) |
| `/v1/horoscope/compatibility` | 50 | Análise textual de compatibilidade |

## Modelo de integração

```ts
// No momento do match — chamar a sinastria
async function getCompatibility(userA: UserProfile, userB: UserProfile) {
  const result = await astrowayClient.synastry({
    chart1: {
      date: userA.birthDate,
      time: userA.birthTime || '12:00:00', // meio-dia padrão se desconhecido
      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,  // soma ponderada
    tension: result.compatibility.tension,
  };
}
```

<Aside type="tip">
O resultado da sinastria é imutável (depende apenas das datas de nascimento). Guarda o par `(userA_id, userB_id) → score` na tua base de dados. Uma chamada à API — e não precisas de recalcular mais.
</Aside>

## Orçamento estimado

### Cenário: 1 000 novos matches por dia

| Métrica | Valor |
|---|---|
| Matches/dia | 1 000 |
| Créditos/match | 50 (sinastria) |
| Créditos/dia | 50 000 |
| Créditos/mês | ~1 500 000 |
| Plano | **Business ($199/mês, 3 500 000 créditos)** |

### Cenário: 50 matches por dia (startup)

| Métrica | Valor |
|---|---|
| Matches/dia | 50 |
| Créditos/dia | 2 500 |
| Créditos/mês | ~75 000 |
| Plano | **Starter ($19/mês, 200 000 créditos)** |

### Otimização

- **Cache** — guarda o score na base de dados, não recalcules
- **Processamento preguiçoso** — calcula a sinastria apenas quando o utilizador abre o match, não para todos os pares potenciais
- **Cálculo em lote no registo** — calcula a compatibilidade com os top 20 potenciais matches de imediato

## Sem hora de nascimento

Se o utilizador não souber a hora — envia `"time": "12:00:00"` (meio-dia). As casas serão menos precisas, mas as posições planetárias e os aspetos cruzados estarão corretos. O score de compatibilidade continua a ser informativo.

Para a compatibilidade de HD, a hora é mais importante — considera `hd/sensitivity` para avaliar o impacto da hora imprecisa.

<CardGrid>
  <LinkCard title="API de Sinastria →" href="/products/synastry-api/" description="Detalhes sobre os endpoints de compatibilidade" />
  <LinkCard title="Primeiros passos" href="/getting-started/" description="Primeira chamada em 5 minutos" />
  <LinkCard title="Preços" href="/pricing/" description="Do grátis ao Enterprise" />
</CardGrid>
