# PRD — Telegram Mini App: Bilingual (EN + FA)

**Status:** Ready to implement  
**Scope:** `src/sections/telegram/telegram-mini-app-shell.tsx` only  
**Depends on:** Telegram Mini App redesign (done — commit `integrate-main-into-development`)  
**Estimated effort:** 1 day

---

## 1. Goal

The Telegram Mini App currently renders English only. Persian (Farsi) users — the primary audience — see the app in a language they don't use day-to-day in Telegram. This PRD specifies full EN ↔ FA bilingual support with automatic language detection and a manual toggle.

---

## 2. Language Detection (priority order)

1. **Telegram's `language_code`** — `shellContext.initDataUnsafe?.user?.language_code` — if `"fa"` or `"fa-IR"`, default to Persian
2. **localStorage key** `amn_tg_lang` — user's last manual selection, persists across sessions
3. **Fallback** — English

Detection runs once on mount. Manual toggle overwrites and persists to localStorage.

---

## 3. String Inventory (all strings to translate)

### Loading state
| Key | EN | FA |
|---|---|---|
| `loading.session` | Loading session… | در حال بارگذاری… |
| `loading.signin` | Signing in… | در حال ورود… |

### Unsupported state
| Key | EN | FA |
|---|---|---|
| `unsupported.badge` | MINI APP ONLY | فقط مینی‌اپ |
| `unsupported.title` | Open in Telegram | در تلگرام باز کنید |
| `unsupported.body` | This view is designed for the Telegram Mini App. Use the web dashboard from a browser. | این صفحه برای مینی‌اپ تلگرام طراحی شده است. از مرورگر به داشبورد وب دسترسی داشته باشید. |
| `unsupported.cta_web` | Open Web Dashboard | باز کردن داشبورد وب |
| `unsupported.cta_signin` | Sign In | ورود |

### Unlinked / sign-in state
| Key | EN | FA |
|---|---|---|
| `unlinked.badge` | ESCROW · HELD IN TRUST | امانت · در امانت نگه‌داشته |
| `unlinked.body` | Link your Telegram session to access escrow requests, payments, and secure messaging. | حساب تلگرام خود را متصل کنید تا به درخواست‌های امانت، پرداخت‌ها و پیام‌رسانی امن دسترسی داشته باشید. |
| `unlinked.cta_telegram` | Continue with Telegram | ادامه با تلگرام |
| `unlinked.cta_signing_in` | Signing in… | در حال ورود… |
| `unlinked.cta_email` | Sign in with email | ورود با ایمیل |
| `unlinked.cta_create` | Create an account | ساخت حساب |

### Header
| Key | EN | FA |
|---|---|---|
| `header.subtitle` | MINI APP | مینی‌اپ |

### Home content
| Key | EN | FA |
|---|---|---|
| `home.banner.badge` | ESCROW ACCOUNT | حساب امانت |
| `home.banner.welcome` | Welcome back, {name} | خوش آمدید، {name} |
| `home.banner.cta` | New Escrow Request | درخواست امانت جدید |
| `home.actions.requests.label` | Open Requests | درخواست‌های باز |
| `home.actions.requests.desc` | Browse and negotiate active escrow requests | مرور و مذاکره درخواست‌های امانت فعال |
| `home.actions.payments.label` | Payments & Escrow | پرداخت‌ها و امانت |
| `home.actions.payments.desc` | Track payments, release funds, view history | پیگیری پرداخت‌ها، آزادسازی وجه، مشاهده تاریخچه |
| `home.actions.chat.label` | Request Chat | گفتگوی درخواست |
| `home.actions.chat.desc` | Continue conversations on active requests | ادامه مکالمات روی درخواست‌های فعال |
| `home.chips.badge` | ESCROW STATES | وضعیت‌های امانت |

### Status chips (bilingual labels)
| State | EN | FA |
|---|---|---|
| Held | Held | نگهداری شده |
| Shipping | Shipping | در حال ارسال |
| Released | Released | آزاد شد |
| Pending | Pending | در انتظار |
| Disputed | Disputed | اختلاف |
| Cancelled | Cancelled | لغو شد |

### Tab bar
| Key | EN | FA |
|---|---|---|
| `tabs.home` | Home | خانه |
| `tabs.requests` | Requests | درخواست‌ها |
| `tabs.chat` | Chat | گفتگو |
| `tabs.account` | Account | حساب |

### MainButton (Telegram native)
| Key | EN | FA |
|---|---|---|
| `main.new_request` | New Request | درخواست جدید |
| `main.sign_in` | Sign In | ورود |

### Onboarding sheet
| Key | EN | FA |
|---|---|---|
| `onboarding.title` | Account linked | حساب متصل شد |
| `onboarding.subtitle` | Your Telegram session is ready | حساب تلگرام شما آماده است |
| `onboarding.body` | Add your wallet, notification preferences, and payment details any time from Account Settings. | تنظیمات کیف پول، اعلان‌ها و جزئیات پرداخت را هر زمان از تنظیمات حساب اضافه کنید. |
| `onboarding.cta_settings` | Account Settings | تنظیمات حساب |
| `onboarding.cta_later` | Later | بعداً |

---

## 4. Layout Changes for RTL (Persian)

| Element | LTR | RTL |
|---|---|---|
| Root `dir` attribute | `ltr` | `rtl` |
| Font family | `var(--sans)` = IBM Plex Sans | `var(--sans-fa)` = Vazirmatn |
| Arrow icon in action list | `→` (arrowRight) | `←` (arrowLeft) |
| Tab bar order | Home · Requests · Chat · Account | خانه · درخواست‌ها · گفتگو · حساب (same order, text RTL) |
| Banner welcome text | left-aligned | right-aligned (inherits from dir=rtl) |
| Chip list | left-to-right wrap | right-to-left wrap (inherits) |

**Font size bumps for Persian:** Body text 13px → 14px, labels 10px → 11px (Vazirmatn renders slightly smaller at the same size).

---

## 5. Language Toggle UI

A small toggle in the header, right side:

```
[ EN | فا ]
```

- Two buttons side by side, mono font
- Active language: ink-900 background, cream text
- Inactive: transparent, ink-600 text
- Width: auto (narrow) — doesn't displace the logo
- On tap: haptic light + switch language + persist to localStorage

---

## 6. Translations Object Structure

```ts
const TR = {
  en: { loading: {...}, unsupported: {...}, unlinked: {...}, header: {...}, home: {...}, tabs: {...}, onboarding: {...}, main: {...} },
  fa: { /* same keys */ },
};
```

All access via `t.home.banner.cta` pattern — no template literals in JSX, only in the translations object.

---

## 7. Files Changed

| File | Change |
|---|---|
| `src/sections/telegram/telegram-mini-app-shell.tsx` | All string extraction + RTL layout + lang detection + toggle |

No new files required. No routing changes. No backend changes.

---

## 8. Definition of Done

- [ ] Language auto-detected from `initDataUnsafe.user.language_code` on mount
- [ ] Manual toggle persists to `localStorage` key `amn_tg_lang`
- [ ] All 40+ strings translated (see table above)
- [ ] `dir="rtl"` applied to root `.tg-shell` when lang is `fa`
- [ ] Vazirmatn font active for Persian (already loaded via Google Fonts in `SHELL_CSS`)
- [ ] Arrow icons flip direction in RTL
- [ ] Tab labels translate correctly
- [ ] Telegram `MainButton` text updates when lang switches
- [ ] No TypeScript errors
- [ ] Tested in browser at `/telegram` with `?lang=fa` param override for dev preview
