# App di dating

L'astrologia è un potente strumento di retention per le app di dating come Bumble, Hinge, Tinder, Tantan e per le app astro-first come NUiT, Struck. L'API di AstroWay fornisce un punteggio di sinastria pronto all'uso da 0 a 100 con una singola chiamata — senza bisogno di un motore efemeridi proprietario o di una licenza Solar Fire ($495).

## Come funziona

1. L'utente inserisce data, ora e luogo di nascita durante la registrazione
2. Al momento del match, il tuo backend chiama `/v1/synastry` con i dati di entrambi gli utenti
3. L'API restituisce `compatibility.score` (0–100) e `label` (harmonious/balanced/mixed/challenging)
4. Il punteggio viene utilizzato come uno dei fattori di ranking

```
Algoritmo di matching
  ├── Prossimità geografica         (40%)
  ├── Interessi in comune           (30%)
  ├── Compatibilità astrologica     (20%)  ← AstroWay API
  └── Altri segnali                 (10%)
```

## Endpoint principali

| Endpoint | Crediti | Cosa restituisce |
|---|---|---|
| `/v1/synastry` | 50 | Aspetti incrociati + punteggio 0–100 |
| `/v1/human-design/compatibility` | 100 | Compatibilità HD (tipo + strategia) |
| `/v1/horoscope/compatibility` | 50 | Analisi testuale della compatibilità |

## Pattern di integrazione

```ts
// Al momento del match — chiama la sinastria
async function getCompatibility(userA: UserProfile, userB: UserProfile) {
  const result = await astrowayClient.synastry({
    chart1: {
      date: userA.birthDate,
      time: userA.birthTime || '12:00:00', // default a mezzogiorno se sconosciuto
      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,  // somma ponderata
    tension: result.compatibility.tension,
  };
}
```

<Aside type="tip">
Il risultato della sinastria è immutabile (dipende solo dalle date di nascita). Memorizza la coppia `(userA_id, userB_id) → punteggio` nel tuo database. Una sola chiamata API — e non dovrai più ricalcolare.
</Aside>

## Valutazione del budget

### Scenario: 1.000 nuovi match al giorno

| Metrica | Valore |
|---|---|
| Match/giorno | 1.000 |
| Crediti/match | 50 (sinastria) |
| Crediti/giorno | 50.000 |
| Crediti/mese | ~1.500.000 |
| Tariffa | **Business ($199/mese, 3.500.000 crediti)** |

### Scenario: 50 match al giorno (startup)

| Metrica | Valore |
|---|---|
| Match/giorno | 50 |
| Crediti/giorno | 2.500 |
| Crediti/mese | ~75.000 |
| Tariffa | **Starter ($19/mese, 200.000 crediti)** |

### Ottimizzazione

- **Caching** — salva il punteggio nel database, non ricalcolare
- **Elaborazione lazy** — calcola la sinastria solo quando l'utente apre il match, non per tutte le coppie potenziali
- **Calcolo batch alla registrazione** — calcola la compatibilità con i primi 20 potenziali match subito

## Senza ora di nascita

Se l'utente non conosce l'ora — passa `"time": "12:00:00"` (mezzogiorno). Le case saranno meno precise, ma le posizioni planetarie e gli aspetti incrociati saranno corretti. Il punteggio di compatibilità rimarrà comunque informativo.

Per la compatibilità HD l'ora è più importante — valuta `hd/sensitivity` per stimare l'impatto di un'ora imprecisa.

<CardGrid>
  <LinkCard title="Synastry API →" href="/products/synastry-api/" description="Dettagli sugli endpoint di compatibilità" />
  <LinkCard title="Guida rapida" href="/getting-started/" description="Fai la tua prima richiesta in 5 minuti" />
  <LinkCard title="Prezzi" href="/pricing/" description="Da gratuito a Enterprise" />
</CardGrid>
