# Ứng dụng hẹn hò

## Cách thức hoạt động

1. Người dùng nhập ngày, giờ và nơi sinh khi đăng ký
2. Khi có lượt ghép — backend của bạn gọi `/v1/synastry` với dữ liệu của cả hai người
3. API trả về `compatibility.score` (0–100) và `label` (harmonious/balanced/mixed/challenging)
4. Điểm số được sử dụng như một trong những yếu tố xếp hạng

```
Thuật toán ghép đôi
  ├── Độ gần vị trí          (40%)
  ├── Sở thích chung         (30%)
  ├── Tương hợp chiêm tinh   (20%)  ← AstroWay API
  └── Các tín hiệu khác       (10%)
```

## Các endpoint chính

| Endpoint | Credit | Trả về |
|---|---|---|
| `/v1/synastry` | 50 | Cross-aspects + điểm 0–100 |
| `/v1/human-design/compatibility` | 100 | Tương hợp HD (type + strategy) |
| `/v1/horoscope/compatibility` | 50 | Phân tích văn bản tương hợp |

## Mẫu tích hợp

```ts
// Khi ghép đôi — gọi synastry
async function getCompatibility(userA: UserProfile, userB: UserProfile) {
  const result = await astrowayClient.synastry({
    chart1: {
      date: userA.birthDate,
      time: userA.birthTime || '12:00:00', // noon default if unknown
      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,  // weighted sum
    tension: result.compatibility.tension,
  };
}
```

<Aside type="tip">
Kết quả synastry là bất biến (chỉ phụ thuộc vào ngày sinh). Hãy lưu cặp `(userA_id, userB_id) → điểm` vào cơ sở dữ liệu của bạn. Một lần gọi API — và bạn không cần tính toán lại nữa.
</Aside>

## Đánh giá ngân sách

### Kịch bản: 1.000 lượt ghép mới mỗi ngày

| Chỉ số | Giá trị |
|---|---|
| Lượt ghép/ngày | 1.000 |
| Credit/lượt ghép | 50 (synastry) |
| Credit/ngày | 50.000 |
| Credit/tháng | ~1.500.000 |
| Gói cước | **Business ($199/tháng, 3.500.000 credit)** |

### Kịch bản: 50 lượt ghép mỗi ngày (startup)

| Chỉ số | Giá trị |
|---|---|
| Lượt ghép/ngày | 50 |
| Credit/ngày | 2.500 |
| Credit/tháng | ~75.000 |
| Gói cước | **Starter ($19/tháng, 200.000 credit)** |

### Tối ưu hóa

- **Lưu cache** — lưu điểm vào cơ sở dữ liệu, đừng tính lại
- **Xử lý lười** — chỉ tính synastry khi người dùng mở lượt ghép, không phải tất cả các cặp tiềm năng
- **Tính toán theo lô khi đăng ký** — tính tương hợp với top 20 lượt ghép tiềm năng ngay lập tức

## Không có giờ sinh

Nếu người dùng không biết giờ — hãy truyền `"time": "12:00:00"` (giữa trưa). Các nhà sẽ kém chính xác hơn, nhưng vị trí hành tinh và cross-aspects vẫn đúng. Điểm tương hợp vẫn mang tính thông tin.

Đối với tương hợp HD, thời gian quan trọng hơn — hãy cân nhắc `hd/sensitivity` để đánh giá tác động của thời gian không chính xác.

<CardGrid>
  <LinkCard title="Synastry API →" href="/products/synastry-api/" description="Chi tiết về các endpoint tương hợp" />
  <LinkCard title="Bắt đầu nhanh" href="/getting-started/" description="Làm quen trong 5 phút" />
  <LinkCard title="Bảng giá" href="/pricing/" description="Từ miễn phí đến Enterprise" />
</CardGrid>
